

How to Sync GitHub Issues to Jira Tickets with N8n
Auto-create Jira tickets when GitHub issues are opened, mapping title, description, labels, and assignee between platforms.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Dev teams who need custom field mapping between GitHub issues and Jira tickets with real-time sync.
Not ideal for
Teams wanting plug-and-play setup without webhook configuration or custom field transformation logic.
Sync type
real-timeUse case type
syncReal-World Example
A 12-person mobile app team uses this to automatically create Jira tickets for every GitHub issue in their bug-tracker repo. Before automation, the project manager manually checked GitHub twice daily and created Jira tickets by copy-pasting, missing critical bugs for hours. Now customer-reported issues flow from GitHub to their sprint board instantly, with proper labels and assignees mapped.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into n8n
Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Issue Title | issue.title | |
5 optional fields▸ show
| Issue Description | issue.body |
| Assignee | issue.assignee.login |
| Labels | issue.labels[].name |
| Issue Number | issue.number |
| Repository | repository.name |
Step-by-Step Setup
Dashboard > New Workflow
Create new workflow
Start a fresh N8n workflow to handle the GitHub to Jira sync. This sets up the canvas where you'll build the automation.
- 1Click 'New Workflow' from the N8n dashboard
- 2Name it 'GitHub-Jira Issue Sync'
- 3Click 'Save' to create the workflow
Workflow Canvas > Add Node > Webhook
Add GitHub webhook trigger
Set up N8n to receive webhook notifications when GitHub issues are created. This replaces polling and gives you real-time sync.
- 1Click the '+' button to add a trigger node
- 2Search for 'Webhook' and select it
- 3Set HTTP Method to 'POST'
- 4Copy the webhook URL that N8n generates
GitHub Repo > Settings > Webhooks
Configure GitHub webhook
Tell GitHub to send issue events to your N8n webhook. This creates the connection between GitHub and your automation.
- 1Go to your GitHub repository settings
- 2Click 'Webhooks' in the left sidebar
- 3Click 'Add webhook'
- 4Paste your N8n webhook URL
- 5Select 'Issues' as the trigger event
- 6Set Content type to 'application/json'
Workflow Canvas > Add Node > IF
Add issue filter
Filter webhook events to only process new issues. GitHub sends webhooks for issue updates, closes, and comments too.
- 1Add an 'IF' node after your webhook
- 2Set condition to 'String' equals
- 3Set field to '{{ $json.action }}'
- 4Set value to 'opened'
Credentials > Create New > Jira
Connect Jira credentials
Set up authentication so N8n can create tickets in your Jira instance. You need API access to write to Jira.
- 1Click 'Credentials' in the N8n sidebar
- 2Click 'Create New' > 'Jira Software Cloud API'
- 3Enter your Jira domain (company.atlassian.net)
- 4Add your email and API token
- 5Test the connection
Workflow Canvas > Add Node > Jira
Add Jira create issue node
This node creates the actual Jira ticket using data from the GitHub webhook. Connect it to the 'true' branch of your filter.
- 1Add a 'Jira' node after the IF node's true branch
- 2Select your Jira credentials
- 3Choose 'Issue' > 'Create' operation
- 4Select your target project from the dropdown
Jira Node > Issue Fields
Map issue title and description
Pull the GitHub issue title and body into the Jira ticket fields. This ensures all context transfers between systems.
- 1Set Summary field to '{{ $node.Webhook.json.issue.title }}'
- 2Set Description to '{{ $node.Webhook.json.issue.body }}'
- 3Add a line 'GitHub URL: {{ $node.Webhook.json.issue.html_url }}' to description
Drop this into an n8n Code node.
Copy this template{{ $node.Webhook.json.issue.labels.length > 0 ? $node.Webhook.json.issue.labels.map(l => l.name.replace(/\s+/g, '_').toLowerCase()).join(',') : 'unlabeled' }}▸ Show code
{{ $node.Webhook.json.issue.labels.length > 0 ? $node.Webhook.json.issue.labels.map(l => l.name.replace(/\s+/g, '_').toLowerCase()).join(',') : 'unlabeled' }}... expand to see full code
{{ $node.Webhook.json.issue.labels.length > 0 ? $node.Webhook.json.issue.labels.map(l => l.name.replace(/\s+/g, '_').toLowerCase()).join(',') : 'unlabeled' }}Workflow Canvas > Add Node > Set
Handle GitHub labels
Convert GitHub labels into Jira labels or components. This preserves categorization across platforms.
- 1Add a 'Set' node before the Jira node
- 2Create a new field called 'jira_labels'
- 3Use expression '{{ $node.Webhook.json.issue.labels.map(l => l.name).join(",") }}'
- 4Reference this in Jira node Labels field
Jira Node > Assignee Field
Map GitHub assignee
Transfer the GitHub issue assignee to Jira if they exist in both systems. This maintains ownership tracking.
- 1In the Jira node, find the Assignee field
- 2Set it to '{{ $node.Webhook.json.issue.assignee.login }}'
- 3Add a fallback using '|| "unassigned"'
- 4Test with a real GitHub issue that has an assignee
Workflow Canvas > Execute Workflow
Test the workflow
Run a live test by creating a new GitHub issue. This validates your entire automation chain.
- 1Click 'Execute Workflow' to activate listening mode
- 2Create a new issue in your GitHub repository
- 3Check the N8n execution log for success
- 4Verify the Jira ticket was created with correct data
Workflow Settings > Error Workflow
Add error handling
Configure what happens when Jira is down or fields are invalid. This prevents the workflow from silently failing.
- 1Click workflow settings (gear icon)
- 2Set 'On Error' to 'Continue With Default Value'
- 3Add a 'No Operation' node after Jira for the error branch
- 4Test by temporarily breaking your Jira credentials
Workflow Canvas > Activate Toggle
Activate workflow
Turn on the workflow so it runs automatically for all new GitHub issues. This makes the automation live.
- 1Click the toggle switch in the top right to 'Active'
- 2Verify the webhook is still responding
- 3Create one more test GitHub issue to confirm
- 4Monitor the execution history for the first few runs
Scaling Beyond 100+ issues/day+ Records
If your volume exceeds 100+ issues/day records, apply these adjustments.
Add webhook queue
Use N8n's HTTP Request node with retry logic instead of direct Jira calls. GitHub webhooks timeout at 10 seconds, but Jira API can be slower.
Batch label processing
Group multiple label operations into single Jira API calls using N8n's merge node. Individual label updates hit rate limits fast.
Cache user mappings
Store GitHub-to-Jira username mappings in N8n's global variables instead of looking up users on every issue. API calls for user validation add 2-3 seconds per ticket.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use N8n for this if you need custom field transformations or run on-premise infrastructure. N8n's code nodes let you manipulate GitHub webhook data before sending to Jira - useful when you need to map labels to custom fields or transform markdown to Jira syntax. The self-hosted option keeps sensitive issue data within your network. Skip N8n if you want the fastest setup - Zapier's GitHub/Jira templates work in 5 minutes versus N8n's 30-minute webhook configuration.
This workflow uses 1 execution per new GitHub issue. At 50 issues per month, that's 50 executions total. N8n's starter plan includes 5,000 executions for $20/month, so you're well within limits. Zapier charges $20/month for 750 tasks but counts each field mapping as separate tasks - this same workflow burns 4-5 Zaps per issue. Make offers 10,000 operations for $9/month but webhook delays can hit 2-3 minutes. N8n processes webhooks under 10 seconds.
Zapier wins on the pre-built GitHub/Jira integration - it maps issue types and custom fields automatically without manual configuration. Make handles GitHub's nested label arrays more elegantly with built-in iterators. N8n makes you build these transformations from scratch using Set nodes and expressions. But N8n's webhook triggers are more reliable than Zapier's polling, and you're not locked into someone else's field mapping decisions when your Jira setup gets complex.
GitHub's webhook payload changes between issue types - pull requests include different fields than regular issues. Your IF filter needs to check both action type and issue type to avoid errors. Jira's user lookup is case-sensitive, so GitHub usernames with capital letters won't match Jira accounts automatically. The biggest gotcha: GitHub sends webhook retries if N8n doesn't respond within 10 seconds, so slow Jira API calls create duplicate tickets. Add timeout handling to your Jira nodes.
Ideas for what to build next
- →Add bidirectional comment sync — Set up webhooks to sync comments between GitHub issues and Jira tickets, keeping discussions in both platforms.
- →Create status update automation — Build a reverse sync that updates GitHub issue labels when Jira ticket status changes from To Do to Done.
- →Add Slack notifications — Extend the workflow to post new issue alerts in your dev team's Slack channel with links to both GitHub and Jira.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup