Intermediate~20 min setupDeveloper Tools & Project ManagementVerified April 2026
GitHub logo
Jira logo

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-time

Use case type

sync

Real-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.

/mo
505005K50K

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

Skip the setup

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.

GitHub repository with admin access to create webhooks
Jira instance with API access and permission to modify issue status
N8n instance running and accessible from the internet for webhooks
GitHub personal access token with repo and webhook permissions
Branch naming convention that includes Jira ticket keys

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Pull Request Branch Namepull_request.head.ref
Issue Keykey
Issue Statusfields.status.name
3 optional fields▸ show
PR Authorpull_request.user.login
PR Titlepull_request.title
Repository Namerepository.name

Step-by-Step Setup

1

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.

  1. 1Click the purple + button in N8n dashboard
  2. 2Select 'Start from scratch' option
  3. 3Name your workflow 'GitHub PR to Jira Status'
What you should see: You should see a blank canvas with one 'Start' node in the center.
2

Canvas > + > GitHub > GitHub Trigger

Add GitHub Webhook Trigger

Configure N8n to receive real-time notifications when pull requests are opened. This eliminates polling delays.

  1. 1Delete the default 'Start' node by clicking it and pressing Delete
  2. 2Click the + icon and search for 'GitHub'
  3. 3Select 'GitHub Trigger' from the results
  4. 4Choose 'Pull Request' from the Event dropdown
What you should see: A GitHub Trigger node appears with Pull Request event selected.
Common mistake — Don't pick 'GitHub' regular node — you need 'GitHub Trigger' for real-time events
n8n
+
click +
search apps
GitHub
GI
GitHub
Add GitHub Webhook Trigger
GitHub
GI
module added
3

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.

  1. 1Click 'Create New Credential' in the Credential field
  2. 2Enter your GitHub personal access token with repo permissions
  3. 3Select your target repository from the Repository dropdown
  4. 4Set Events to 'pull_request' and Actions to 'opened'
What you should see: Green 'Connected' status shows, and webhook URL appears in the node settings.
Common mistake — Your token needs 'repo' and 'admin:repo_hook' scopes — read-only access won't work
4

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.

  1. 1Click + after the GitHub trigger node
  2. 2Search for 'Code' and select it
  3. 3Set Mode to 'Run Once for All Items'
  4. 4Paste the ticket extraction code in the JavaScript field
What you should see: Code node appears connected to GitHub trigger with JavaScript editor open.

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}}];
5

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.

  1. 1Replace default code with: const branchName = items[0].json.pull_request.head.ref;
  2. 2Add: const match = branchName.match(/([A-Z]{2,10}-\d+)/);
  3. 3Add: if (!match) return [{json: {skip: true}}];
  4. 4Add: return [{json: {ticketKey: match[1], skip: false}}];
What you should see: Code editor shows the regex pattern that extracts ticket keys from branch names.
Common mistake — Test your regex against actual branch names — some teams use different patterns than PROJ-123
6

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.

  1. 1Click + after the Code node
  2. 2Search for 'IF' and select it
  3. 3Set Condition to 'Boolean' and Value to '{{$json.skip}}'
  4. 4Set Operation to 'Equal' and Value2 to 'false'
What you should see: IF node shows with True and False output branches for conditional logic.
7

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.

  1. 1Click + on the 'true' output of the IF node
  2. 2Search for 'Jira' and select 'Jira Software'
  3. 3Set Operation to 'Update Issue'
  4. 4Choose 'Create New Credential' for Jira authentication
What you should see: Jira node appears on the True branch with Update Issue operation selected.
Common mistake — Use 'Jira Software' not just 'Jira' — the regular Jira node lacks status update features
8

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.

  1. 1Enter your Jira domain (e.g., yourcompany.atlassian.net)
  2. 2Add your email and API token from Jira account settings
  3. 3Click 'Test Connection' to verify access
  4. 4Save the credential with a descriptive name
What you should see: Green connection status appears and Jira projects load in dropdown menus.
Common mistake — API tokens expire — don't use your login password, generate a proper token from Jira settings
9

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.

  1. 1Set Issue Key field to '{{$node['Code'].json['ticketKey']}}'
  2. 2Click 'Add Field' and select 'Status'
  3. 3Choose 'In Review' from the Status dropdown
  4. 4Leave other fields empty unless you need additional updates
What you should see: Jira node shows mapped ticket key field and In Review status selection.
Common mistake — 'In Review' must match your Jira workflow exactly — check spelling and case sensitivity
GitHub fields
title
body
state
html_url
user.login
available as variables:
1.props.title
1.props.body
1.props.state
1.props.html_url
1.props.user.login
10

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.

  1. 1Click 'Save' in the top toolbar
  2. 2Click 'Activate' to enable the workflow
  3. 3Open a test PR in GitHub with a ticket key in the branch name
  4. 4Check the execution log in N8n after 30 seconds
What you should see: Execution shows green success status and the Jira ticket moves to In Review status.
n8n
▶ Run once
executed
GitHub
Jira
Jira
🔔 notification
received
11

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.

  1. 1Click the Jira node settings (three dots menu)
  2. 2Select 'Settings' then 'Error Handling'
  3. 3Change 'On Error' to 'Continue'
  4. 4Add a 'Set' node after Jira to log failed attempts
What you should see: Error handling shows 'Continue' mode and logging node appears for failed cases.
Common mistake — Never leave error handling on 'Break' for production — failed PRs will stop all future executions

Scaling Beyond 100+ PRs/day+ Records

If your volume exceeds 100+ PRs/day records, apply these adjustments.

1

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.

2

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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 ChangesSend 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 AuthorsMap GitHub usernames to Jira users and automatically assign the ticket to whoever opened the pull request.
  • Create Reverse Workflow for PR MergesBuild a second workflow that moves Jira tickets to Done when the associated pull request gets merged into main branch.

Related guides

Was this guide helpful?
GitHub + Jira overviewn8n profile →