

How to PR to Jira status with Power Automate
Auto-update Jira ticket status to 'In Review' when a GitHub pull request is opened with 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 using GitHub and Jira who want automatic ticket status updates without manual intervention
Not ideal for
Teams needing complex branch name parsing or multiple status transitions based on PR events
Sync type
real-timeUse case type
notificationReal-World Example
A 12-developer team at a fintech startup uses this to move Jira tickets to 'In Review' the moment someone opens a PR with a branch like 'feature/PROJ-123-payment-flow'. Before automation, developers forgot to update Jira 40% of the time, causing confusion during standups 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 Power Automate
Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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 | ||
| Issue ID | key | |
| Status | status | |
4 optional fields▸ show
| Pull Request URL | comment |
| Branch Name | customfield_branch |
| Author | reporter |
| PR Title | summary |
Step-by-Step Setup
My flows > + New flow > Automated cloud flow
Create automated cloud flow
Navigate to make.powerautomate.com and sign in. Click 'My flows' in the left sidebar, then the '+ New flow' button in the top toolbar. Select 'Automated cloud flow' from the dropdown menu. Name your flow 'GitHub PR to Jira Status' and search for 'GitHub' in the trigger selection.
- 1Click '+ New flow' in the top toolbar
- 2Select 'Automated cloud flow'
- 3Enter flow name 'GitHub PR to Jira Status'
- 4Search for 'GitHub' in the trigger box
- 5Select 'When a pull request is opened' trigger
GitHub connector > Sign in
Configure GitHub connection
Click 'Sign in' to authenticate with GitHub. You'll be redirected to GitHub's OAuth page where you need to authorize Power Automate access to your repositories. Select the organization and repository where you want to monitor pull requests. The connection will validate and show a green checkmark when successful.
- 1Click 'Sign in' button in the GitHub trigger
- 2Authorize Power Automate in GitHub OAuth dialog
- 3Select your organization from the dropdown
- 4Choose the target repository
- 5Click 'Save' to confirm the connection
+ New step > Control > Condition
Add condition to check branch name
Click '+ New step' below the GitHub trigger. Search for 'Condition' and select the Control connector's Condition action. This will filter PRs that contain Jira ticket keys in their branch names. Set up the condition to check if the branch name contains your Jira project prefix pattern.
- 1Click '+ New step' under the GitHub trigger
- 2Search for 'Condition' in the connector list
- 3Select 'Condition' from Control connector
- 4Click the first value field
- 5Select 'Head ref' from GitHub dynamic content
Condition > contains > PROJ-
Configure branch name pattern matching
In the condition's middle dropdown, select 'contains'. In the right value field, enter your Jira project key pattern like 'PROJ-' or whatever prefix your team uses for ticket IDs. This ensures the automation only fires when branch names include actual Jira ticket references, not for branches like 'hotfix' or 'main'.
- 1Click the middle dropdown in the condition
- 2Select 'contains' from the list
- 3Click the right value field
- 4Type your Jira project prefix like 'PROJ-'
- 5Verify the condition shows 'Head ref contains PROJ-'
If yes > + Add an action > Jira > Update work item
Add Jira connection in Yes branch
Click '+ Add an action' inside the 'If yes' branch of the condition. Search for 'Jira' and select the Jira connector. Choose 'Update work item' as the action since we're changing the ticket status. Power Automate will prompt you to create a connection to your Jira instance.
- 1Click '+ Add an action' in the 'If yes' section
- 2Search for 'Jira' in the connector search
- 3Select the Jira connector
- 4Choose 'Update work item' action
- 5Click 'Sign in' to authenticate with Jira
Jira connection > Server URL, Email, API Token
Authenticate with Jira
Enter your Jira instance URL (like https://yourcompany.atlassian.net), email address, and API token. Generate the API token from your Jira account settings under Security. Power Automate will test the connection and show available projects once authenticated successfully.
- 1Enter your Jira URL in Server field
- 2Add your email address
- 3Paste your Jira API token (create from Jira account settings)
- 4Click 'Create' to establish connection
- 5Wait for green connection confirmation
If yes > + Add an action > Data Operations > Compose
Extract ticket ID from branch name
Before updating Jira, we need to parse the ticket ID from the branch name. Click '+ Add an action' above the Jira step and search for 'Compose'. Add a Compose action to extract the ticket ID using Power Automate expressions. This handles branches like 'feature/PROJ-123-new-feature' to get 'PROJ-123'.
- 1Click '+ Add an action' above the Jira update step
- 2Search for 'Compose' and select Data Operations > Compose
- 3Click in the Inputs field
- 4Switch to Expression tab
- 5Enter expression to extract ticket ID from branch name
Compose > Inputs > Expression
Configure ticket ID extraction expression
In the Compose action's expression field, enter: split(split(triggerOutputs()?['body/pull_request/head/ref'], '-')[0], '/')[1]. This expression splits the branch name on slashes, takes the last part, then splits on dashes to reconstruct the ticket ID format. Test this logic matches your branch naming pattern.
- 1Click Expression tab in the inputs field
- 2Enter the ticket ID extraction expression
- 3Verify the expression syntax is correct
- 4Click 'OK' to save the expression
- 5Rename the Compose action to 'Extract Ticket ID'
Update work item > Issue ID, Status
Configure Jira work item update
In the Update work item action, set the Issue ID or Key field to reference the output from your Extract Ticket ID compose action. Select your Jira project from the dropdown. Choose the fields to update - typically you'll set the Status field to 'In Review' or whatever status represents code review in your workflow.
- 1Click Issue ID or Key field
- 2Select 'Outputs' from Extract Ticket ID dynamic content
- 3Select your project from Project dropdown
- 4Click 'Show advanced options' if needed
- 5Set Status field to 'In Review'
- 6Configure any other required fields
Save > Test flow
Test and save the flow
Click 'Save' in the top right to save your flow. Create a test branch with a Jira ticket ID in the name, then open a pull request. Monitor the flow run history to verify it triggers correctly and updates the Jira ticket status. Check both Power Automate run history and the actual Jira ticket to confirm the status change.
- 1Click 'Save' in the top toolbar
- 2Create a test branch like 'feature/PROJ-123-test'
- 3Open a pull request from that branch
- 4Go to 'Run history' to see flow execution
- 5Verify the Jira ticket status changed to 'In Review'
This expression handles complex branch naming patterns and extracts clean ticket IDs. Paste it in the Compose action's expression field to handle branches like 'feature/team/PROJ-123-description'.
JavaScript — Code Step// Extract ticket ID from branch name with flexible parsing▸ Show code
// Extract ticket ID from branch name with flexible parsing
first(filter(split(triggerOutputs()?['body/pull_request/head/ref'], '/'),
lambda('item', contains(item(), 'PROJ-'))))... expand to see full code
// Extract ticket ID from branch name with flexible parsing
first(filter(split(triggerOutputs()?['body/pull_request/head/ref'], '/'),
lambda('item', contains(item(), 'PROJ-'))))
// Alternative for multiple project prefixes
first(filter(split(triggerOutputs()?['body/pull_request/head/ref'], '/'),
lambda('item', or(contains(item(), 'PROJ-'), contains(item(), 'FEAT-'), contains(item(), 'BUG-')))))
// Extract just the ticket number if you need it separately
last(split(first(filter(split(triggerOutputs()?['body/pull_request/head/ref'], '/'),
lambda('item', contains(item(), 'PROJ-')))), '-'))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 Microsoft Power Automate for this if your team is already in the Microsoft ecosystem and needs enterprise-grade security controls. Power Automate handles GitHub webhooks reliably and the Jira connector includes proper error handling for ticket updates. The expression language works well for branch name parsing. Skip Power Automate if you need complex conditional logic or your team prefers open-source solutions like n8n.
This costs 2 flow runs per pull request - one for the trigger and one for the Jira update. At 100 PRs per month, you'll use 200 runs total. Power Automate includes 2,000 runs in the $15/month plan, so this automation costs effectively nothing until you hit high volumes. Zapier charges per trigger at their lowest tier, making Power Automate cheaper for teams opening 50+ PRs monthly.
Zapier's GitHub integration offers more trigger options like PR status changes and has better branch name parsing built-in. Make provides superior error handling with automatic retries and clearer debugging when Jira updates fail. n8n gives you complete control over the ticket ID extraction logic with JavaScript expressions that are easier to debug than Power Automate's formula syntax. Pipedream offers real-time webhook processing with better latency. But Power Automate wins on enterprise compliance - it inherits your Microsoft 365 security policies and audit logging without extra configuration.
You'll hit issues with branch naming edge cases that break the ticket ID extraction. Teams often use prefixes like 'feature/team-name/PROJ-123' or suffixes that confuse the parsing logic. Jira workflow transitions are another pain point - tickets in 'Done' status usually can't move back to 'In Review', causing silent failures. The GitHub webhook occasionally delivers duplicate events during heavy repository activity, so add duplicate detection if your team merges frequently throughout the day.
Ideas for what to build next
- →Add reverse sync for PR merge — Move Jira tickets to 'Done' when pull requests are merged or closed. Requires additional GitHub trigger for PR state changes.
- →Include PR details in Jira comments — Add the PR title, description, and link as comments on the Jira ticket for better context during review.
- →Handle multiple ticket references — Modify the extraction logic to handle branches that reference multiple tickets like 'feature/PROJ-123-PROJ-124-shared-component'.
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