Jira JQL: Complete Guide to Jira Query Language (2026)

Jira JQL: Complete Guide to Jira Query Language

JQL allows you to perform advanced searches to find specific work items in your Jira projects. For simple searches, Jira’s basic search may be all you need. But when you need more precise results, JQL lets you create custom queries to filter and find specific stories, bugs, tasks, and other work items. 

If you repeatedly run the same search to find specific work items, you can avoid rebuilding it every time. In case you didn’t know, Jira lets you write a custom query once, validate it, and save it as a filter you can reuse whenever you need the same search.

So, in this guide, we’ll explain what JQL is, the search options available in Jira, and the components you need to create a useful JQL query. We’ll also break down each component and show you what they do using several examples.

Here’s everything you’ll get:

  • A JQL cheat sheet covering common operators, keywords, and functions. 
  • 20 practical JQL queries you can copy and adapt for your use case. 
  • How to use and validate JQL in Jira, step by step. 
  • How to turn a JQL query into a reusable filter.

Let’s get started.

What is JQL?

JQL is short for Jira Query Language. This is a text-based advanced search method that’s built specifically for querying data in Jira. It lets you write a specific query in an editor to ask Jira exactly what information or issues you want to find.

Generally, there are three ways Jira allows you to search for important information about your projects:

  • Quick search.
  • Basic search.
  • Advanced search with JQL.

Quick search is the Search bar at the top of the Jira workspace:

Quick search is the Search bar at the top of the Jira workspace

Type in a key phrase, and Jira shows matching work items.

Basic search uses the default filters and dropdowns to set your search criteria without typing in a query. Simply select Filters in the left sidebar to search work items. Basic search is the default setting next to JQL, as shown below:

You refine basic search using the default filters by Jira (e.g., space, assignee, type, status, etc.).

Advanced search allows you to construct structured queries using JQL in this search interface or JQL editor:

Advanced search allows you to construct structured queries using JQL in this search interface or JQL editor

Here’s a basic version of JQL when we switch from basic search:

project = SCRUM AND assignee = "John Doe" AND status = "To Do" AND type = Epic ORDER BY created DESC

This query basically tells Jira to find Epic issues in the SCRUM project that are assigned to “John Doe” and have a “To Do” status. It then sorts the results in descending order by creation date (DESC) so the newest issues will appear first.

The four main components of JQL syntax

Constructing a JQL query like the one above depends on having the following four components:

ComponentWhat it does (purpose)Examples  
FieldThis is the data field or the attribute that you want to search. Project, status, assignee, issuetype, reporter, development, labels, priority, fixVersion, etc.
Operators It tells Jira how to compare the data field with the target value that you’re searching for.=,  !=, <, >, IN, ~, WAS, CHANGED
Target valueThis is the specific value that you want to find in a fieldText, numbers, dates, users, lists.

For example, “To Do” can be the value for the Status field.
KeywordA keyword connects two or more clauses together to form a query. It can also alter the logic of an operator.AND, OR, NOR, ORDER BY, etc.

So, you can think of a basic JQL query structure like this:

So, you can think of a basic JQL query structure like this

For example: 

project = "ecommerce shopping app" AND status = "To Do" 

Here:

  • Project and status are the fields.
  • = is the operator.
  • "ecommerce shopping app" and "To Do" are the values.
  • AND is the keyword connecting the two conditions.

Now that you understand the four main components, let’s look more closely at the fields and operators you can use to make your searches more specific.

Fields 

A field is any parameter or data field that you want Jira to look at. Here are some fields you’ll use more often than others.

Fields What it searchesExamples 
Project The Jira projectProject = "Ecommerce shopping app"
AssigneeThe person assigned to the work itemassignee = "John Doe"
Status The current status of the issueStatus = "To Do"
PriorityThe issue priorityPriority = High
TypeThe type of issueType = epic
Labels Labels added to the work itemLabels ="frontend"

Other fields can be your description, comments, and so on.

Common JQL operators

An operator is simply a word or symbol that links a field to a specific value (or a list of values) to define a search condition. This includes advanced actions like checking for empty fields or matching a list of multiple values.

Here are some of the most common JQL operators you can use, broken down:

JQL operatorWhat it doesExample
=It finds an exact match.project = "Online ordering app"
!= It excludes an exact matchstatus != Done
>, <, >=, <=Compares values that are greater than, less than, greater than or equal to, less than or equal to the target value, respectively.created > "2026/01/01"

This finds values that were created after Jan 2026.
INMatches any value in a list of items.status IN ("To Do", "In Progress")
NOT IN Searches for values other than the ones you provided.status NOT IN ("Done", "Closed")
~It searches for a specific text in different fields. Summary ~ "shopping cart"
WASSearches for former values.Assignee was “Jane Doe”

This outputs issues that were previously assigned to Jane Doe.
CHANGEDFinds values that were changed. So, let’s say we want to see issues where the status was changed from To Do to Done. You’d write:
status CHANGED FROM “to do” TO “done”
ISChecks whether a field has a value.assignee IS EMPTY
IS NOTChecks whether a field has a value that isn’t empty.assignee IS NOT EMPTY

The best part about Jira is that as you type a query, it helps you format it correctly and suggests fields, operators, and values, so you don’t have to worry.

Jira helps you format correctly and suggests fields operators and values

JQL cheat sheet (for keywords)

Here’s also a quick reference table for common keywords to connect two or more clauses in a query:

Keyword What it doesExamples 
AND It requires both conditions to match.Project = "Ordering app"
AND type in (Story, Bug)
AND status = "To Do"
ORMatches either of the conditions.duedate is EMPTY OR duedate is < now ()
NOT Excludes a condition inside your JQL query.NOT status = Done
EMPTY, NullSearches for issues where a field does NOT have a value.Assignee is EMPTY

Assignee = null
ORDER BySpecifies how your search results will be sorted.ORDER BY created ASC

ORDER BY priority DESC

With just these keywords and operators, you can create a wide range of useful JQL queries to help you: 

  • Find all high-priority issues that are assigned to you.
  • Show recently created issues.
  • List overdue issues in a specific project.
  • Prepare project status reports. 

Let’s not forget about JQL functions, though. They can make your searches more dynamic, for example, when you want to check work items created or due within a specific period of time. Or, you need to look beyond a single issue and find related work.

Important JQL functions worth knowing

Here are some JQL functions worth knowing:

JQL functionWhat it doesExample
currentUser()Finds issues that are currently assigned to whoever is logged in.assignee = currentUser()
Date functions such as startOfWeek() and endOfWeek()They automatically shift dates as the calendar week changes.created >= startOfWeek()
parentsOf() (ScriptRunner)It finds the parents of issues matching a specific subquery.issueFunction in parentsOf("status = Done")
JQL linkedIsuses() (native)Finds issues linked to a specific, single issue.issue in linkedIssues("SCRUM-123")

One technical caveat: parentsOf() and linkedIssues() can depend on your specific Jira configuration or an app like ScriptRunner. So, we highly recommend that you verify the exact syntax against the client’s Jira setup before publishing. In particular, issueFunction in parentsOf(…) is specific to ScriptRunner rather than standard, out-of-the-box JQL.

20 JQL queries you can copy-paste and use right away (organized by role)

The following are practical examples of JQL queries you can copy into Jira’s JQL editor and try for yourself. We’ve organized these queries by role so you can quickly find the queries that are most useful for the type of work that’s in front of you.

JQL queries for developers

As a developer, you can create JQL queries to:

1. Find your work in the current sprint

You can find work items that are assigned to you in the current sprint with this query:

project = "Your Project Name" AND assignee = currentUser() AND sprint IN openSprints()

Instead of hardcoding your name, you can use currentUser(). This way, anyone who runs this query while logged into Jira can find the issues assigned to them, making the same filter useful for the whole development team.

2. Find unresolved bugs assigned to you

Bugs are another pain for developers, so you’d want to know specific bugs that have been assigned to you and haven’t been fixed yet:

assignee = currentUser() AND issuetype = Bug AND resolution = Unresolved

3. Find unassigned work in the current sprint

Let’s say you’ve finished the current work and you’re looking for something else to work on. You can find unassigned work in the current sprint with:

project = "Your Project Name" AND sprint IN openSprints() AND assignee IS EMPTY

This shows work in the active sprint that hasn’t been assigned to anyone, giving you a quick list of issues you could pick up next.

4. Find work that’s assigned to you but is in progress.

You may also want to find work assigned to you that is currently in progress. This can help you see which tasks are active and may need your attention:

statusCategory = "In Progress" AND assignee = currentUser() 

The statusCategory checks the broader status group rather than one specific status. Combined with currentUser(), the query returns work that is currently in progress and assigned to the person running the search.

JQL queries for project managers

Here are some JQL queries a product manager may be interested in:

5. See all the epics that are still open across your company

To see which epics are still open across Jira projects, you can write:

issueType = Epic AND statusCategory != Done

Important note: Jira may only return issues from projects you have permission to access. So, if you oversee multiple projects, make sure you have access to each one you need to monitor.

6. Find overdue work items that are unresolved

You may also want to find work items that have passed their due date but are still not finished:

due < now() AND resolution = Unresolved

This query shows overdue work across all Jira projects, so you can easily spot work items that need follow-up. To focus on a specific project, you can add project = “Your Project Name” at the beginning.

7. Find high-priority stories and bugs in the current sprint

Let’s say you want to find open stories and bugs that are marked as either High or Highest priority in the current sprint.

You can write:

project = "Your Project Name"
AND issuetype IN (Story, Bug)
AND (priority = High OR priority = Highest)
AND sprint IN openSprints()

The parentheses group the two priority conditions together, so Jira will evaluate a group condition first before it combines it with the other conditions in the query.

8. Find everything completed in the last month

If you’d like to review work that your team has completed in the previous month, try:

statusCategory = Done AND resolved >= startOfMonth(-1) AND resolved <= endOfMonth(-1)

The -1 tells Jira to go back one month. So, startOfMonth(-1) takes you to the beginning of the previous month, while endOfMonth(-1) takes you to its end. In simple terms, this will take you from the 1st to the 31st of the previous month.

9. Find recently created work

If you want to keep an eye on new work entering the project: 

project = "My Scrum Project"
AND created >= -7d
ORDER BY created DESC 

10. Find your work that is tagged to a s specific label

If your team uses labels to group work into specific buckets, you can use JQL to find everything with a certain label. 

For example: 

labels = "customer-request" 

The query is useful when your team uses labels to flag certain types of work you want to monitor as a manager. Just replace “customer-request” with the label your team uses.

JQL queries for product managers

Here are some useful JQLs for a product manager

11. Find items that are in the next release

You can write: 

fixVersion = earliestUnreleasedVersion() AND resolution = Unresolved

This shows items that are flagged for the next release but haven’t been resolved yet. 

12. Find every high-priority item in your backlog

Try:

status IN ("To Do", Backlog) AND priority IN (Critical, Highest, High)

This finds high-priority items that are still sitting in your backlog. You can then take action by breaking larger epics into smaller stories, planning those stories into a sprint, or assigning them to a team member so work can begin.

13. Find all work that is unestimated

You can add the story point estimate to the previous query:

status IN ("To Do", Backlog)
AND priority IN (Critical, Highest, High)
AND "Story point estimate" IS EMPTY

This finds all high-priority work that hasn’t been estimated. You can fine-tune this further by adding assignee IS EMPTY so you see everything to find work that is also unassigned.

14. Find recently updated work

To see items that have changed recently, try:

updated >= -7d ORDER BY updated DESC

This shows issues that have been updated in the last seven days, so you can quickly see what your team has been up to or which work items may need your attention.

JQL queries for SCRUM masters

Here are some JQLs that can help you keep an eye on sprint progress, blockers, and work that may need attention as a scrum master.

15. Find incomplete work from the previous sprint 

If you want to see what the team didn’t finish in the last sprint, try: 

sprint in closedSprints() AND statusCategory != Done ORDER BY updated DESC

16. Find blocked work 

If your team uses a Blocked status, you can quickly find issues that are currently blocked with this:

status = Blocked ORDER BY priority DESC 

17. Find issues with no activity in the last seven days 

You can also look for work that hasn’t been updated recently by writing: 

updated < -7d AND statusCategory != Done ORDER BY updated ASC

JQL queries for everyday Jira users

Then there are JQL queries everyone should know. You don’t have to be a project manager, admin, or an executive to write these simple searches:

18. Find your open work items 

To see all work items currently assigned to you, use: 

assignee = currentUser() AND resolution = Unresolved ORDER BY updated DESC. 

This gives you a personal list of your assigned work that you haven’t finished yet.

19. Find issues you reported that are still open 

If you’ve reported an issue and want to check whether it has been resolved, try: 

reporter = currentUser() AND statusCategory != Done ORDER BY created DESC 

Jira will return issues you reported that are still open, with the newest ones shown first.

20. See work that you need to complete before the week ends

Try:

due >= startOfWeek() AND due <= endOfWeek()

You’ll have a list of work items with due dates falling within the current week.

How to use JQL in Jira, step by step

Generally, all advanced search queries are written in Jira’s JQL editor. 

You can find this editor on the Jira dashboard by navigating to Filters in the main menu to search work items. Then switch from Basic to advanced search by clicking the JQL tab at the top of your screen:

Generally, all advanced search queries are written in Jira’s JQL editor

Here’s an example with one of the JQL queries for an everyday Jira user to see it in practice:

an example with one of the JQL queries for an everyday Jira user to see it in practice

But how do you verify your results and troubleshoot errors when writing or modifying a JQL query?

How to validate results

Jira normally helps users check whether their JQL is written correctly, but you should also make sure the results match what you were trying to find in the first place. 

For example, let’s say you wanted to find all work assigned to you with a code review status. You might write: 

status = "Code Review" AND assignee = currentUser()

If Code Review is not a status in your Jira workflow, Jira will return an error saying,  “The value ‘Code Review’ does not exist for field ‘status ‘.” It’ll also suggest another query based on the statuses available in your Jira setup.

Jira normally helps users check whether their JQL is written correctly

Refine your results further

Additionally, you can refine your results further by adding another condition to shorten the search results list and make it more precise.

For example, a query that shows everything assigned to you is too broad. It may return too many results: 

assignee = currentUser()

You can make the results list much shorter by being more specific:

assignee = currentUser() AND priority IN (High, Highest) AND statusCategory = "In Progress" 

The first query returns all work assigned to you. The second narrows those results to high- and highest-priority work items that are currently in progress. 

This is one of JQL’s main benefits. You can keep adding conditions to narrow your search until Jira returns the exact set of issues you need. So, after you run a query, check the results to see whether they need further fine-tuning.

Common syntax errors

Jira will usually flag a query when something is wrong with its syntax. Common errors include:

JQL errorWhat it means
The value does not exist for the fieldThe value you entered may not exist in your Jira setup or is spelled differently.
Expecting an operatorYou may have left out an operator like AND, OR, or ORDER BY
Unclosed quotation markYou started a quoted value but forgot to close it
Field does not existJira doesn’t recognize the field you entered.

The error message you receive will depend on what’s wrong with your JQL query. The good news is that Jira gives you an error message and, where possible, a suggested query to help you find and fix the problem.

How to turn a JQL query into a reusable filter

The next logical step after creating a query and validating it is to save it as a filter.

Here’s why:

You may have found yourself running the same search repeatedly. For example, you check open bugs every morning, review overdue work every Friday, or monitor a specific group of issues throughout a project.

Instead of writing these searches every time, save them as filters you can reuse whenever you need to do a specific task that’s in front of you.

In this image, click the blue Save filter button. Jira will then open this window where you can add a filter name, description, and other details:

How to turn a JQL query into a reusable filter

There’s more you can do than simply reuse a search filter. Depending on your permissions and Jira setup, you can: 

  • Create different types of filters, including those that work across multiple projects, within a specific project, or management filters. 
  • Open Filters → View all filters to manage your list of filters. 
  • Share filters with other Jira users or groups so they can use the same search.
  • Subscribe to filters to receive regular updates about the issues returned by the filter. 

For a full walkthrough of creating, editing, sharing, and managing filters, check out our guide on How to Create Filters in Jira.

How is AI changing JQL queries?

Jira’s Ask AI is another option that lets you easily create JQLs, especially if you know what you want to find but aren’t sure how to write the syntax. 

So, instead of writing the query yourself, you can simply select the Ask AI option and describe what you want in plain English:

“Find work items in my Scrum project that haven’t been assigned to anyone and haven’t been resolved.”

The AI will turn the request into a JQL query and return matching results as shown below:

The AI will turn the request into a JQL query and return matching results as shown below

Rovo is the AI that powers this experience. It saves you time and makes JQL more accessible if you don’t use it regularly. 

Want to learn more about using AI with Jira? Check out our guide on What Is Atlassian Rovo and How to Use It.

Jira JQL FAQs

What is JQL in Jira? 

JQL, or Jira Query Language, is a text-based advanced search method you construct to find specific issues in Jira. It lets you combine fields, operators, values, keywords, and functions to create more precise searches than basic filters.

What search options does Jira offer?

In addition to Advanced search with JQL, Jira lets you ask AI to search for work items. You can also use Quick search and Basic search. Quick search lets you find issues using the search bar, while Basic search uses default filters and dropdowns to narrow your results.

Can I save a JQL query in Jira and reuse it for repeatable searches? 

Yes, you can save a JQL query as a Jira filter and reuse it later. This is useful when you regularly run the same search, such as checking open bugs, overdue work, or issues assigned to you.

Why is my JQL query not working? 

Your JQL query may not work if you use a field, value, status, or operator that Jira doesn’t recognize. Jira will usually show an error message when you don’t query the right way. And, where possible, it’ll suggest a correction to help you identify and fix the problem.

Conclusion 

JQL gives you more control over how you search work items in Jira than quick or basic search modes. By combining fields, operators, values, keywords, and functions, you can construct precise queries to find issues within and across large Jira projects.

You can use these queries to track bugs, manage backlogs, monitor sprints, or find work that needs your attention the most. Once a JQL query keeps surfacing the same type of issue, you should stop rebuilding the search by hand. Save it as a filter or use a template to make those repeatable searches much easier.