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

How to sync GitHub issues to Jira with Pipedream

Automatically create Jira tickets whenever new GitHub issues are opened with title, description, labels, and assignee mapping.

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 both GitHub for code and Jira for project tracking who need instant ticket creation.

Not ideal for

Teams that only need weekly summaries or batch imports should use scheduled workflows instead.

Sync type

real-time

Use case type

sync

Real-World Example

πŸ’‘

A 12-person development team at a fintech startup uses this to create Jira tickets instantly when GitHub issues are filed by QA or product managers. Before automation, developers checked GitHub manually twice per day and tickets were created 4-6 hours late, delaying sprint planning.

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 Pipedream

Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. 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.

Admin access to GitHub repository to configure webhooks
Jira account with permission to create issues in target project
Jira API token generated from account security settings

Optional

Knowledge of which GitHub usernames map to Jira users for assignee sync

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Summarysummary
Issue Typeissuetype
Projectproject
5 optional fieldsβ–Έ show
Descriptiondescription
Assigneeassignee
Labelslabels
Prioritypriority
Reporterreporter

Step-by-Step Setup

1

pipedream.com > New > Workflow

Create new Pipedream workflow

Go to pipedream.com and click New in the top navigation. Select Workflow from the dropdown menu. You'll see an empty workflow canvas with a placeholder trigger step. This is where you'll configure the GitHub webhook that fires when issues are created.

  1. 1Click 'New' in the top navigation bar
  2. 2Select 'Workflow' from the dropdown
  3. 3Click on the default trigger step to configure it
βœ“ What you should see: You should see a workflow canvas with one empty trigger step ready for configuration.
2

Trigger Step > Search Apps > GitHub > New Issue (Instant)

Configure GitHub webhook trigger

Click the trigger step and search for GitHub in the app list. Select 'New Issue (Instant)' as your trigger type. This creates a webhook that GitHub will call immediately when issues are created. You'll see a unique webhook URL generated automatically.

  1. 1Search for 'GitHub' in the app selector
  2. 2Choose 'New Issue (Instant)' trigger
  3. 3Copy the generated webhook URL for the next step
βœ“ What you should see: You should see a GitHub trigger configured with a webhook URL starting with 'https://eol7f4r3r4nckl.m.pipedream.net'.
⚠
Common mistake β€” The webhook URL changes if you recreate the workflow, so save it before moving to GitHub settings.
Pipedream
+
click +
search apps
GitHub
GI
GitHub
Configure GitHub webhook tri…
GitHub
GI
module added
3

GitHub Trigger > Connect Account

Connect GitHub account

Click 'Connect Account' in the GitHub trigger step. A popup will open asking for GitHub permissions. Grant access to the repositories where you want issue sync enabled. Pipedream needs read access to issues and repository metadata to process the webhook data.

  1. 1Click 'Connect Account' button
  2. 2Authorize Pipedream in the GitHub popup
  3. 3Select which repositories to grant access to
  4. 4Click 'Install & Authorize'
βœ“ What you should see: You should see 'Connected' with your GitHub username displayed in the trigger step.
Pipedream settings
Connection
Choose a connection…Add
click Add
GitHub
Log in to authorize
Authorize Pipedream
popup window
βœ“
Connected
green checkmark
4

GitHub Repo > Settings > Webhooks > Add webhook

Add GitHub webhook in repository

Go to your GitHub repository settings and navigate to Webhooks. Click Add webhook and paste the Pipedream URL. Set Content type to 'application/json' and select 'Let me select individual events'. Check only the 'Issues' event box since we don't want other events triggering this workflow.

  1. 1Go to your GitHub repository settings
  2. 2Click 'Webhooks' in the left sidebar
  3. 3Click 'Add webhook' button
  4. 4Paste the Pipedream webhook URL in Payload URL
  5. 5Set Content type to 'application/json'
  6. 6Select 'Let me select individual events'
  7. 7Check only 'Issues' event
βœ“ What you should see: You should see a green checkmark next to your webhook URL after GitHub tests the connection.
⚠
Common mistake β€” If you check multiple events, the workflow will run for issue comments and other actions you probably don't want.
5

GitHub Repo > New Issue, then Pipedream Workflow > Trigger Step

Test GitHub trigger

Create a test issue in your GitHub repository with a title, description, and assignee. Go back to Pipedream and check the trigger step for incoming data. You should see the full issue payload including title, body, labels array, and assignee object within 5-10 seconds.

  1. 1Create a new issue in your GitHub repository
  2. 2Add a title, description, assign it to someone
  3. 3Go back to Pipedream workflow
  4. 4Check the trigger step for the test data
βœ“ What you should see: The trigger step should show JSON data with fields like 'title', 'body', 'assignee', and 'labels' array.
⚠
Common mistake β€” If no data appears after 30 seconds, check that your webhook URL is correct and GitHub can reach it.
Pipedream
β–Ά Deploy & test
executed
βœ“
GitHub
βœ“
Jira
Jira
πŸ”” notification
received
6

Workflow > + Add Step > Jira > Create Issue

Add Jira action step

Click the + button below your trigger to add a new step. Search for Jira and select 'Create Issue' action. This step will receive the GitHub issue data and create a corresponding Jira ticket. The step will appear connected to your trigger with a flow arrow.

  1. 1Click the + button below the GitHub trigger
  2. 2Search for 'Jira' in the app list
  3. 3Select 'Create Issue' action
  4. 4The step appears below your trigger
βœ“ What you should see: You should see a new Jira step connected to your GitHub trigger with configuration fields to fill out.
7

Jira Step > Connect Account

Connect Jira account

Click 'Connect Account' in the Jira step. Enter your Jira site URL (like company.atlassian.net), email, and API token. You'll need to generate an API token from your Jira account settings first. Pipedream will test the connection and show your available projects.

  1. 1Click 'Connect Account' in the Jira step
  2. 2Enter your Jira site URL (company.atlassian.net)
  3. 3Enter your email address
  4. 4Paste your Jira API token
  5. 5Click 'Connect'
βœ“ What you should see: You should see 'Connected' with your Jira site name and a dropdown of available projects.
⚠
Common mistake β€” Generate your Jira API token at id.atlassian.com > Security > API tokens before attempting connection.
8

Jira Step > Project > Issue Type > Field Mapping

Configure Jira field mapping

Select your target Jira project and issue type (usually Bug or Task). Map the GitHub issue title to Jira summary field. Map GitHub body to Jira description. For assignee, you'll need to map GitHub usernames to Jira account IDs since they're different systems.

  1. 1Select your Jira project from dropdown
  2. 2Choose issue type (Bug, Task, etc)
  3. 3Map Summary to GitHub issue title
  4. 4Map Description to GitHub issue body
  5. 5Configure assignee mapping if needed
βœ“ What you should see: You should see field mappings with GitHub data references like {{steps.trigger.event.title}} populated.
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
9

Between Steps > + > Code > Node.js

Add label transformation code

Click + to add a Node.js code step between GitHub and Jira. This step will convert GitHub labels array to Jira-compatible format. GitHub sends labels as objects with name/color, but Jira expects simple strings or specific label IDs depending on your setup.

  1. 1Click + between GitHub and Jira steps
  2. 2Select 'Code' then 'Run Node.js'
  3. 3Name the step 'Transform Labels'
  4. 4Add the label conversion code
βœ“ What you should see: You should see a code step that processes the GitHub labels and outputs a clean array for Jira.
⚠
Common mistake β€” Jira label requirements vary by project configuration, so test with your specific setup first.

This code step transforms GitHub labels and handles assignee mapping between the two systems. Paste it in a Node.js code step between your GitHub trigger and Jira action.

JavaScript β€” Code Stepexport default defineComponent({
β–Έ Show code
export default defineComponent({
  async run({ steps, $ }) {
    const issue = steps.trigger.event;

... expand to see full code

export default defineComponent({
  async run({ steps, $ }) {
    const issue = steps.trigger.event;
    
    // Map GitHub usernames to Jira account IDs
    const userMap = {
      'sarah-dev': '5d2a8b0c1f2a3b4c5d6e7f8g',
      'mike-frontend': '1a2b3c4d5e6f7g8h9i0j1k2l',
      'alex-backend': '9z8y7x6w5v4u3t2s1r0q9p8o'
    };
    
    // Convert GitHub labels to Jira format
    const jiraLabels = issue.labels
      .map(label => label.name)
      .filter(name => !['wontfix', 'duplicate'].includes(name))
      .slice(0, 5); // Jira has label limits
    
    // Set priority based on labels
    let priority = 'Medium';
    if (issue.labels.some(l => l.name.includes('urgent') || l.name.includes('critical'))) {
      priority = 'Highest';
    } else if (issue.labels.some(l => l.name.includes('high'))) {
      priority = 'High';
    }
    
    // Map assignee if exists
    const assigneeId = issue.assignee ? userMap[issue.assignee.login] : null;
    
    return {
      summary: issue.title,
      description: `*From GitHub Issue #${issue.number}*\n\n${issue.body}\n\n[View on GitHub](${issue.html_url})`,
      labels: jiraLabels,
      priority: priority,
      assignee: assigneeId,
      githubUrl: issue.html_url,
      githubNumber: issue.number
    };
  }
});
10

GitHub Repo > New Issue, then Pipedream Workflow > Step Results

Test complete workflow

Create another test GitHub issue and watch the workflow execute. Check each step's output data to verify the transformation is working correctly. The final Jira step should show the created ticket ID and URL. Verify in Jira that the ticket appears with correct title, description, and labels.

  1. 1Create a new test issue in GitHub
  2. 2Watch workflow execution in Pipedream
  3. 3Check each step's output data
  4. 4Verify the Jira ticket was created correctly
  5. 5Check ticket details in Jira interface
βœ“ What you should see: You should see a new Jira ticket with the GitHub issue's title, description, and any labels converted properly.
⚠
Common mistake β€” If the workflow fails, check the error logs in each step rather than just the final result.

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 Pipedream for this if your team needs instant GitHub to Jira sync with custom transformation logic. The Node.js code steps handle complex label mapping and assignee lookups that basic platforms struggle with. Pipedream's webhook processing is genuinely instant - tickets appear in Jira within 3-5 seconds of GitHub issue creation. Skip this for simple field mapping where Zapier's pre-built actions work fine.

Cost

At 50 GitHub issues per month, you'll use about 100 Pipedream credits (trigger + Jira action) costing $10/month on the Basic plan. Zapier charges $20/month for the same volume on their Starter plan. Make handles this free up to 1,000 operations monthly, but their GitHub integration misses webhook retries that Pipedream handles automatically.

Tradeoffs

Make wins on visual debugging - their scenario execution logs are cleaner than Pipedream's JSON dumps. Zapier's Jira integration has better field mapping helpers for custom fields. N8N gives you more control over HTTP requests if you need custom Jira API calls. Power Automate integrates better if you're already using Azure DevOps. But Pipedream's code-first approach means you're not stuck when APIs change or requirements get complex.

You'll hit GitHub's webhook retry limits if your workflow fails repeatedly - GitHub stops delivering after a few failures. Jira's API is pickier about field formats than their UI suggests, especially for user assignments and custom fields. The biggest gotcha: GitHub usernames rarely match Jira email addresses, so assignee mapping breaks unless you build a lookup table upfront.

Ideas for what to build next

  • β†’
    Add bidirectional sync β€” Create a reverse workflow so Jira ticket updates flow back to GitHub issue comments.
  • β†’
    Include pull request linking β€” Automatically link Jira tickets when developers reference issue numbers in pull requests.
  • β†’
    Set up digest notifications β€” Send daily Slack summaries of all GitHub issues that became Jira tickets.

Related guides

Was this guide helpful?
← GitHub + Jira overviewPipedream profile β†’