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:

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:

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:
| Component | What it does (purpose) | Examples |
| Field | This 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 value | This is the specific value that you want to find in a field | Text, numbers, dates, users, lists. For example, “To Do” can be the value for the Status field. |
| Keyword | A 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:

For example:
project = "ecommerce shopping app" AND status = "To Do" |
Here:
Projectandstatusare the fields.=is the operator."ecommerce shopping app"and"To Do"are the values.ANDis 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 searches | Examples |
| Project | The Jira project | Project = "Ecommerce shopping app" |
| Assignee | The person assigned to the work item | assignee = "John Doe" |
| Status | The current status of the issue | Status = "To Do" |
| Priority | The issue priority | Priority = High |
| Type | The type of issue | Type = epic |
| Labels | Labels added to the work item | Labels ="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 operator | What it does | Example |
= | It finds an exact match. | project = "Online ordering app" |
!= | It excludes an exact match | status != 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. |
IN | Matches 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" |
WAS | Searches for former values. | Assignee was “Jane Doe” This outputs issues that were previously assigned to Jane Doe. |
CHANGED | Finds 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” |
IS | Checks whether a field has a value. | assignee IS EMPTY |
IS NOT | Checks 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.

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 does | Examples |
AND | It requires both conditions to match. | Project = "Ordering app" |
OR | Matches either of the conditions. | duedate is EMPTY OR duedate is < now () |
NOT | Excludes a condition inside your JQL query. | NOT status = Done |
EMPTY, Null | Searches for issues where a field does NOT have a value. | Assignee is EMPTY |
ORDER By | Specifies how your search results will be sorted. | ORDER BY created ASC |
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 function | What it does | Example |
| 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" |
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" |
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) |
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:

Here’s 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.

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 error | What it means |
| The value does not exist for the field | The value you entered may not exist in your Jira setup or is spelled differently. |
| Expecting an operator | You may have left out an operator like AND, OR, or ORDER BY |
| Unclosed quotation mark | You started a quoted value but forgot to close it |
| Field does not exist | Jira 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:

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:

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.




