Who Moved It, and When?......5 Ways to Put Jira's transitionedBy to Work
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 JQL Argon 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", "Elias Alexander")
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")

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")
<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2-4.jpg" style="width: 999px;"><img src="https://us.v-cdn.net/6038660/uploads/images/433607i8C307A9574B1701C/2-4.jpg" role="button" title="2-4.jpg" alt="2-4.jpg"></span>
<span>Swap in a priority clause, a component, a label, a saved filter — whatever you already use. The history clause rides along.</span>
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 JQL Argon adds to JQL - check them all 
Enjoy!
Greetings
Bartek from Orbiscend OU (JQL Argon app provider)