I’m working with the Jira Trigger node in n8n Cloud .
My goal is simple: run the workflow only once when an issue is transitioned to Closed .
I already updated the JQL to:
project = ***** AND status CHANGED TO Closed
However, the problem is that when a ticket is closed, the workflow is triggered 5 times for the same issue.
From what I can see, Jira sends multiple issue_updated events almost simultaneously (status, resolution, internal fields, etc.), and n8n treats each one as a separate trigger.
I tried filtering with expressions like:
{{$json.changelog.items[0].field === "status" && $json.changelog.items[0].toString === "Closed"}}
krisn0x
September 23, 2025, 3:12pm
2
Hey, to understand what events are logged, temporarily use this:
{{ $json.changelog && $json.changelog.items && console.log('Event:', $json.changelog.items.map(i => `${i.field}:${i.toString}`)) && true }}
Then you can pick any of these to filter based on your requirement:
{{ $json.changelog && $json.changelog.items && $json.changelog.items.some(item => item.field === ‘status’ && item.toString === ‘Closed’) }}
More Specific Status Transition Filter
{{ $json.changelog && $json.changelog.items && $json.changelog.items.some(item => item.field === ‘status’ && item.toString === ‘Closed’ && item.fromString !== ‘Closed’) }}
This ensures it only triggers when status changes TO Closed, not when it’s already Closed and other fields update.
Primary Event Filter (Most Reliable)
{{ $json.changelog && $json.changelog.items && $json.changelog.items[0].field === ‘status’ && $json.changelog.items[0].toString === ‘Closed’ && $json.changelog.items.length >= 1 }}
This catches only events where the first/primary change is the status change to Closed.
Resolution + Status Combo Filter
Many times the “main” close event includes both status and resolution changes:
{{ $json.changelog && $json.changelog.items && $json.changelog.items.some(item => item.field === ‘status’ && item.toString === ‘Closed’) && $json.changelog.items.some(item => item.field === ‘resolution’) }}
This triggers only when both status AND resolution are changed in the same event.
Webhook Event Type Filter
If your Jira setup sends different event types, filter on the specific event:
{{ $json.webhookEvent === ‘jira:issue_updated’ && $json.issue_event_type_name === ‘issue_generic’ && $json.changelog && $json.changelog.items && $json.changelog.items.some(item => item.field === ‘status’ && item.toString === ‘Closed’) }}
Let me know if any of these change the behavior
system
Closed
December 22, 2025, 3:12pm
3
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.