

How to Move Jira Tickets to In Review on GitHub PR with N8n
Automatically update Jira ticket status to In Review when a GitHub pull request references the ticket key in the branch name.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Development teams with custom branch naming patterns who need reliable PR-to-Jira status automation.
Not ideal for
Teams without coding skills who prefer visual automation builders with pre-built GitHub parsers.
Sync type
real-timeUse case type
syncReal-World Example
A 25-person fintech startup uses this to automatically move Jira tickets to In Review when developers open PRs with ticket keys in branch names like feature/PAY-456-stripe-integration. Before automation, project managers manually checked GitHub 3-4 times daily and tickets stayed in To Do status for hours after code review started, confusing the team about actual work progress.
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Pull Request Branch Name | pull_request.head.ref | |
| Issue Key | key | |
| Issue Status | fields.status.name | |
3 optional fields▸ show
| PR Author | pull_request.user.login |
| PR Title | pull_request.title |
| Repository Name | repository.name |
Step-by-Step Setup
Dashboard > + > Start from scratch
Create New N8n Workflow
Start a fresh workflow that will listen for GitHub pull request events. This becomes your main automation pipeline.
- 1Click the purple + button in N8n dashboard
- 2Select 'Start from scratch' option
- 3Name your workflow 'GitHub PR to Jira Status'
Canvas > + > GitHub > GitHub Trigger
Add GitHub Webhook Trigger
Configure N8n to receive real-time notifications when pull requests are opened. This eliminates polling delays.
- 1Delete the default 'Start' node by clicking it and pressing Delete
- 2Click the + icon and search for 'GitHub'
- 3Select 'GitHub Trigger' from the results
- 4Choose 'Pull Request' from the Event dropdown
GitHub Trigger > Credential > Create New
Connect GitHub Repository
Authenticate with GitHub and specify which repository should send webhook events. N8n needs repo admin access to create the webhook.
- 1Click 'Create New Credential' in the Credential field
- 2Enter your GitHub personal access token with repo permissions
- 3Select your target repository from the Repository dropdown
- 4Set Events to 'pull_request' and Actions to 'opened'
Canvas > + > Code
Add Code Node for Ticket Extraction
Parse the branch name to extract Jira ticket keys using regex. This handles various branch naming patterns.
- 1Click + after the GitHub trigger node
- 2Search for 'Code' and select it
- 3Set Mode to 'Run Once for All Items'
- 4Paste the ticket extraction code in the JavaScript field
Drop this into an n8n Code node.
JavaScript — Code Node// Enhanced regex for multiple project patterns▸ Show code
// Enhanced regex for multiple project patterns const branchName = items[0].json.pull_request.head.ref; const patterns = [
... expand to see full code
// Enhanced regex for multiple project patterns
const branchName = items[0].json.pull_request.head.ref;
const patterns = [
/([A-Z]{2,10}-\d+)/, // PROJ-123
/([A-Z]+_\d+)/, // PROJ_123
/ticket\/([A-Z]+-\d+)/ // ticket/PROJ-123
];
const ticketKey = patterns.map(p => branchName.match(p)).find(m => m)?.[1];
return [{json: {ticketKey, skip: !ticketKey}}];Code Node > JavaScript Editor
Configure Ticket Key Regex
Use JavaScript to find ticket keys like PROJ-123 in branch names. This supports multiple project prefixes.
- 1Replace default code with: const branchName = items[0].json.pull_request.head.ref;
- 2Add: const match = branchName.match(/([A-Z]{2,10}-\d+)/);
- 3Add: if (!match) return [{json: {skip: true}}];
- 4Add: return [{json: {ticketKey: match[1], skip: false}}];
Canvas > + > IF
Add IF Node for Skip Logic
Branch the workflow to skip processing when no ticket key is found. This prevents errors on branches without tickets.
- 1Click + after the Code node
- 2Search for 'IF' and select it
- 3Set Condition to 'Boolean' and Value to '{{$json.skip}}'
- 4Set Operation to 'Equal' and Value2 to 'false'
IF Node True > + > Jira Software
Add Jira Node on True Branch
Connect to Jira to update ticket status when a valid ticket key exists. This goes on the True path.
- 1Click + on the 'true' output of the IF node
- 2Search for 'Jira' and select 'Jira Software'
- 3Set Operation to 'Update Issue'
- 4Choose 'Create New Credential' for Jira authentication
Jira Node > Credential > Create New
Configure Jira Credentials
Authenticate with your Jira instance using API token or OAuth. N8n needs permission to modify issue status.
- 1Enter your Jira domain (e.g., yourcompany.atlassian.net)
- 2Add your email and API token from Jira account settings
- 3Click 'Test Connection' to verify access
- 4Save the credential with a descriptive name
Jira Node > Issue Key > Expression
Map Ticket Key and Status
Configure which Jira ticket to update and what status to set. Use the extracted ticket key from the Code node.
- 1Set Issue Key field to '{{$node['Code'].json['ticketKey']}}'
- 2Click 'Add Field' and select 'Status'
- 3Choose 'In Review' from the Status dropdown
- 4Leave other fields empty unless you need additional updates
Toolbar > Save > Activate
Test the Workflow
Execute a test run to verify the webhook receives data and updates Jira correctly. Use a real pull request.
- 1Click 'Save' in the top toolbar
- 2Click 'Activate' to enable the workflow
- 3Open a test PR in GitHub with a ticket key in the branch name
- 4Check the execution log in N8n after 30 seconds
Jira Node > ... > Settings > Error Handling
Add Error Handling
Configure what happens when Jira updates fail due to invalid tickets or permission issues. This prevents workflow crashes.
- 1Click the Jira node settings (three dots menu)
- 2Select 'Settings' then 'Error Handling'
- 3Change 'On Error' to 'Continue'
- 4Add a 'Set' node after Jira to log failed attempts
Scaling Beyond 100+ PRs/day+ Records
If your volume exceeds 100+ PRs/day records, apply these adjustments.
Add Rate Limit Handling
Insert a 2-second delay node before Jira updates when processing multiple PRs simultaneously. Jira's API allows 300 requests per minute but can throttle individual endpoints lower.
Enable Webhook Queuing
Configure N8n's webhook queue settings to handle burst PR creation without dropping events. GitHub can send 10+ webhooks in seconds during bulk operations.
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 branch name parsing or complex status mapping logic that Zapier can't handle. The Code node lets you write JavaScript for any regex pattern your team uses. N8n also handles webhook retries better than Make when GitHub sends duplicate events. Only pick Zapier instead if your team has zero technical skills — their GitHub integration has a visual ticket key extractor that requires no coding.
This workflow costs basically nothing to run. Each PR triggers one execution that calls GitHub webhook + Jira API = 2 operations total. At 50 PRs per month, you're using 100 operations monthly. N8n's free tier gives you 5,000 executions monthly, so you won't pay anything until you hit 2,500+ PRs per month. Zapier charges $20/month for webhook triggers at this volume. Make's free tier handles the same 50 PRs but expires faster if you add other workflows.
Make has better visual debugging when your workflow breaks — their execution inspector shows exact API responses at each step. Zapier's GitHub integration auto-parses common ticket patterns without regex coding. But N8n wins for this use case because the Code node gives you complete control over branch name parsing. Most teams have inconsistent naming patterns that visual builders can't handle. Plus N8n's webhook handling is rock-solid compared to Make's occasional timeout issues.
You'll hit rate limits if developers open 20+ PRs rapidly — GitHub webhooks can overwhelm Jira's API limits. Add a delay node between batches or your workflow will fail with 429 errors. The regex extraction breaks on branch names with special characters like feature/PROJ-123_bugfix — escape your patterns properly. N8n's webhook occasionally receives the same PR event twice from GitHub, so add duplicate detection using the PR number to avoid double-processing tickets.
Ideas for what to build next
- →Add Slack Notifications for Status Changes — Send a message to your dev channel when tickets move to In Review so the team knows code is ready for review.
- →Auto-assign Jira Tickets to PR Authors — Map GitHub usernames to Jira users and automatically assign the ticket to whoever opened the pull request.
- →Create Reverse Workflow for PR Merges — Build a second workflow that moves Jira tickets to Done when the associated pull request gets merged into main branch.
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