Downloads
Download the n8n workflow (JSON)
github-issues-to-jira-triage-n8n-claude.json · n8n workflow · 23 steps · starts with Check Every 15 Minutes · uses GitHub, Jira, Anthropic, Slack · 42 KB
Import into n8n: Create Workflow, then the menu, then Import from File.
How to import it into n8n
- In n8n, create a new workflow.
- Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
- Open each node with a warning and connect your own account: the file carries no passwords or keys.
- Run it once with Test workflow, check the result, then switch it to Active.
What this workflow does
Stop copying GitHub issues into Jira by hand. Every 15 minutes this workflow picks up new GitHub issues, lets Claude decide the type, priority and product area, writes a clean Jira issue with the steps to reproduce, and labels the GitHub issue so it is never synced twice. Urgent issues are posted to Slack right away. Security reports, questions and anything the AI is unsure about go to a person in Slack instead of Jira.
- Check Every 15 Minutes starts the run. Workflow Configuration holds every value you can change.
- Get Open GitHub Issues reads open issues created after
startFromDate, newest first. Keep Untriaged Issues drops pull requests, older issues and anything that already has your synced, review or skip label. Loop Over Issues handles them one at a time. - Read Issue Details builds a dedupe label like
github-storefront-412. Find Existing Jira Issue searches the Jira project for it. If Already in Jira? is true, Label Issue Already in Jira only adds the synced label on GitHub. - Classify Issue with Claude (Claude Chat Model + Triage Output Parser) returns type, priority, area, a Jira summary, steps to reproduce, expected and actual behaviour, a security flag, a confidence score and a one-line reason. If the model fails, Use Manual Triage Fallback sends the issue to a person.
- Prepare Jira Ticket maps the type and priority to your Jira IDs, builds the labels and the Jira description (with the original report), and decides if a person should look first.
- Needs Human Review? sends security reports, questions, unknown types and results below
minConfidenceto Mark GitHub Issue for Review and Ask Team to Triage in Slack. - Everything else goes to Create Jira Issue. Mark GitHub Issue as Synced adds the synced label at once, Comment Jira Key on GitHub tells the reporter, and Is It Urgent? posts High and Highest issues to Slack through Alert Team About Urgent Issue.
- If the Jira search, the Jira create or the review label fails, Alert Team About Failed Sync posts the issue, the step and the error to Slack, and the loop moves on.
Who it is for
Open source maintainers, SaaS and product teams, agencies and support engineers who collect bug reports and feature requests on GitHub but plan the work in Jira Cloud. Useful for teams where nobody "owns" triage and issues pile up.
What you need
- n8n (Cloud or self-hosted)
- GitHub repository and a token that can read and write issues
- Jira Software Cloud project (works on the free plan). Your project's create screen must allow Priority and Labels; team-managed projects allow both by default
- Anthropic API key
- Slack workspace
- n8n (cloud or self-hosted)
The workflow, step by step
Step 1 · Get new GitHub issues
Reads open issues and keeps real issues newer than startFromDate that don't have the synced, review or skip label.
- Check Every 15 Minutes (Schedule)
- Workflow Configuration (Set)
- Get Open GitHub Issues (GitHub)
- Keep Untriaged Issues (Filter)
- Loop Over Issues (Loop Over Items)
Step 2 · Skip issues already in Jira
Searches Jira for the issue's github-<repo>-<number> label. If one exists, GitHub just gets the synced label.
- Read Issue Details (Set)
- Find Existing Jira Issue (Jira Software)
- Already in Jira? (IF)
- Label Issue Already in Jira (HTTP Request)
Step 3 · Triage with Claude
Claude returns type, priority, area, a summary and the steps as JSON. If the model fails, the fallback sends the issue to a person.
- Claude Chat Model (Claude model)
- Classify Issue with Claude (Basic LLM Chain)
- Triage Output Parser (Structured Output Parser)
- Use Manual Triage Fallback (Set)
- Prepare Jira Ticket (Set)
Step 4 · Create the Jira issue
Clear reports become Jira issues. The synced label goes on GitHub right away, then a comment with the Jira key.
- Needs Human Review? (IF)
- Create Jira Issue (Jira Software)
- Mark GitHub Issue as Synced (HTTP Request)
- Comment Jira Key on GitHub (GitHub)
Step 5 · Alert on urgent issues
High and Highest priority issues are posted to Slack with both links.
- Is It Urgent? (IF)
- Alert Team About Urgent Issue (Slack)
Step 6 · Ask a person
Security reports, questions and unsure results get the review label and a Slack message instead of a Jira issue.
- Mark GitHub Issue for Review (HTTP Request)
- Ask Team to Triage in Slack (Slack)
Step 7 · Failure alert
A Jira or GitHub error posts the step and the error to Slack. The loop moves on and the issue is retried next run.
- Alert Team About Failed Sync (Slack)
Setup
- Download the JSON below and import it in n8n (Create workflow > ⋯ > Import from File).
- GitHub: create a fine-grained personal access token with Issues read and write on the repo (or a classic token with
repo). Add it in n8n as a GitHub API credential and select it on the two GitHub nodes and the three label nodes (HTTP Request with the GitHub credential). - Jira Cloud: create an API token at id.atlassian.com, add a Jira SW Cloud API credential (email, token, site URL) and select it on Find Existing Jira Issue and Create Jira Issue.
- Anthropic: add an Anthropic API key credential and select it on Claude Chat Model.
- Slack: add a Slack credential and invite the bot to your triage channel.
- Open Workflow Configuration and set:
-
githubOwner,githubRepo: the repo to watch, for exampleacme-labsandstorefront-jiraProjectId: the numeric project ID. Openhttps://<your-site>.atlassian.net/rest/api/3/project/<KEY>in your browser while logged in:idis the project ID andissueTypeslists the issue type IDs -jiraSiteUrl:https://<your-site>.atlassian.net, used for links in Slack -jiraIssueTypeIds: IDs forbug,featureandtask(feature usually maps to Story) -jiraPriorityIds: IDs for Highest, High, Medium, Low. The Jira Cloud defaults are 1 to 4; checkhttps://<your-site>.atlassian.net/rest/api/3/priorityif yours were changed -productAreas: the areas Claude may pick from; each becomes a Jira label likearea-api-minConfidence: below this the issue goes to a person (default 0.7) -startFromDate: only issues created on or after this date are synced; set it to today -syncedLabel,reviewLabel,skipLabel: GitHub label names (jira-synced,needs-triage,no-jira) -slackChannel,maxIssuesPerRun - Run it once with a test issue (see Test data), then activate.
- Test it: open an issue like "Checkout returns 500 when the coupon has a space" with steps, then run once. Expected: a Jira bug with High priority, the
jira-syncedlabel and a comment on GitHub, plus a Slack alert.
How to customise
- The sample prompt and messages are a starting point, not a fixed format. Rewrite them for your team.
- Classify Issue with Claude: issue types and the priority rules (what "Highest" means for you)
- Comment Jira Key on GitHub, Alert Team About Urgent Issue, Ask Team to Triage in Slack: message text
- Check Every 15 Minutes: schedule
minConfidence: when a person reviews- No public comments: delete Comment Jira Key on GitHub if your Jira keys should stay private.
- Several repos: duplicate the workflow per repo, or turn
githubRepointo a list and loop over it before Get Open GitHub Issues. - Assignees or components: add Assignee or Components in Create Jira Issue, for example mapped from
area. - Opt out an issue: add the
no-jiralabel on GitHub and it is skipped.
Why Claude
Claude (Claude Sonnet 5 through the Anthropic Chat Model node). Bug reports are messy: stack traces, logs, code snippets, half sentences and sometimes text that tries to tell the bot what to do. Claude reads technical text and code well, follows a strict JSON schema reliably, and is careful about not inventing steps that aren't in the report, which matters because the steps land in Jira as if a person wrote them. It is also good at saying "I'm not sure", which is what the confidence gate needs. A cheaper model works too: switch the model in Claude Chat Model, but keep minConfidence so unclear results still go to a person.
Guardrails
- Set startFromDate first: On the first run every open issue created on or after this date goes to Jira. Set it to today unless you want the backlog imported.
Troubleshooting
- Credential errors after import: imported workflows never include credentials. Open each node marked red and select your own account.
- Nothing runs on its own: test runs only fire once. Activate the workflow so the trigger keeps running.
- Odd times or dates: set your timezone in Workflow Settings.
Want the members-only resources too?
A free account unlocks them all, including the ones shared in DMs.

