Jira's native JQL is great at telling you where a work item is right now: current status, current assignee, current priority. Instant.
But ask it a question about history — who moved MARS-14 to Done, and when — and it goes quiet. The answer is sitting right there in the work item's changelog, but native JQL cannot search it. So teams fall back to opening items one at a time, exporting to spreadsheets, or scripting against the REST API.
That is the gap Argon's transitionedBy function closes. It reads the indexed changelog and answers history questions in a single line of JQL. Here are five ways teams put it to work.
The whole function, in one line
The syntax is the same every time — five arguments:
issue in transitionedBy(subquery, status, startDate, [endDate], [user])A subquery (which items to look at), the status they were moved to, a start date, an optional end date, and an optional user. In practice, a basic call looks like this:
issue in transitionedBy("project = MARS", "Done", "2026/05/01", "2026/05/31")It works with both in and not in — and that little not in turns out to be the most useful part.
1. Sprint retros: what actually got done
“Done” on the board today is not the same as “moved to Done during the sprint.” Items get reopened, re-closed, dragged in late, or created straight into a closed column. To see what genuinely crossed the line in a window, ask for the transition, not the current status:
issue in transitionedBy("project = MARS", "Done", "2026/05/01", "2026/05/31")That is the query behind the screenshot at the top of this post: the work that actually reached Done in May, no more and no less.
2. Accountability: who moved it
Add the fifth argument and you are asking a sharper question: which items did a specific person move to a status, in a window. Just pass their name — no cryptic account IDs to look up:
issue in transitionedBy("project = MARS", "Done", "2026/05/01", "2026/05/31", "Aria Nakamura")This is the question native JQL simply cannot answer. The assignee field tells you who owns an item now; it says nothing about who advanced it. For audits and for honest retros — who is quietly carrying the workflow? — that distinction is everything.
3. The not-in power move: find what did not happen
Flip in to not in and Argon returns the items that were never moved to a status. Combine it with a current-status filter and you get the report every lead actually wants: work that is still open and never shipped this cycle.
project = MARS AND statusCategory != Done AND issue not in transitionedBy("project = MARS", "Done", "2026/05/01", "2026/05/31")not in surfaces the twelve MARS items still open that never reached Done in May — the work that slipped the cycle.Stalled tickets, skipped steps, work that slipped the sprint — the things that are invisible precisely because nothing happened to them. not in makes them a one-line query.
4. It composes with the JQL you already write
transitionedBy is just another clause, so stack it with everything else. Which bugs did we actually fix and ship in May?
issuetype = Bug AND issue in transitionedBy("project = MARS", "Done", "2026/05/01", "2026/05/31")issuetype = Bug onto transitionedBy narrows the result to the six bugs actually fixed and shipped in May.Swap in a priority clause, a component, a label, a saved filter — whatever you already use. The history clause rides along.
5. It is not just Done
The status argument is any status in your workflow. Point it at your review column, your QA gate, your blocked state — anywhere you care when something moved and who moved it:
issue in transitionedBy("project = MARS", "In Progress", "2026/04/01", "2026/06/30")Approval trails, time-to-review, compliance checks — same function, different status.
How it works (and where your data lives)
Argon indexes your work item changelog — every status change, who made it, and when — so these queries return in seconds instead of crawling the REST API item by item. And because Argon is built entirely on Atlassian Forge, that index lives inside your own Jira Cloud tenant. Nothing is copied to a third-party server.
transitionedBy is one of seventeen functions Argon adds to JQL. For the bigger picture, see using Argon for smarter project planning, or read the deeper write-up on the Atlassian Community.
Try Argon for Free
Install Argon from the Atlassian Marketplace and start using advanced JQL functions in your Jira Cloud instance today.
Get Argon on Marketplace