Your teams can integrate multiple Jira instances to improve collaboration and share relevant data back and forth. A well-implemented Jira to Jira integration can help connect dev teams working in Jira Software to customer support teams handling tickets in JSM (Jira Service Management). It also supports scenarios like merger and acquisition transitions, MSP client coordination, outsourced QA collaboration, and departmental separation across large organizations.
There are many such possibilities. I'll show you how to do this using Exalate.
There are a few apps on the Atlassian marketplace for syncing Jira work items between multiple instances, but the use cases they support are limited. Exalate comes with a Groovy scripting engine that allows you to implement even complex use cases with ease. It also includes Aida, an AI-assisted configuration tool that can generate sync scripts from natural language prompts, so you don't need deep scripting knowledge to get started.
Organizations end up with multiple Jira instances for a variety of reasons: company growth, restructuring, mergers, migrations, or simply because different departments need autonomy. But even when systems stay separate, the work inside them rarely does. Teams still need to coordinate, escalate work items, share progress, and keep information aligned.
Here are common scenarios where Jira to Jira integration makes a real difference:
Exalate syncs any data available via the REST API between your Jira instances. The most common fields include:
Standard fields: Work items (bugs, stories, tasks, epics), summaries, descriptions, statuses, priorities, assignees, reporters, comments, attachments, and labels.
Advanced fields: Custom fields, sprints (name, state, start/end dates, goals), story points, time tracking and worklogs, components, fix versions, linked work items, parent-child relationships, and sub-tasks.
Specialized sync: User mentions in comments, public vs. private comment filtering, Tempo Worklogs, Insight/Assets fields, and third-party plugin data.
You can also map different field values between instances. For example, sync a "Bug" in one instance as a "Defect" in another, or map statuses so "In Progress" on one side becomes "Active" on the other.
This guide walks you through setting up a Jira to Jira integration using Exalate. The setup is done entirely through the Exalate app; there is no need to install anything separately on each instance.
Go to the Exalate app. If you already have an account, log in directly. New users can create an account by entering their email or signing up with Google.
Workspaces help you organize and manage your integrations and connections in one place. To create your first workspace, click "+ Create Workspace", enter a name and description, and confirm.
Once you have a workspace, you can start creating connections between your Jira instances.
When the process completes, select "Continue to configuration" and choose a Jira project to use for synchronization.
After creating your connection, you have two configuration paths: "Quick Sync" and "Edit & Test".
Quick Sync publishes the starter configuration and lets you sync one work item between your Jira instances to verify the connection works. Enter a work item key under the "Item sync monitor" and click "Sync Now" to test, or "Link with existing" to connect two existing work items.
Edit & Test opens the draft editor, where you can customize your sync rules. Click "Create a new version" or "Open latest draft" to start editing without affecting your live configuration.
Sync rules are based on Groovy scripts. They are divided into outgoing scripts (what data leaves a Jira instance) and incoming scripts (how that data is applied in the receiving instance).
Here is a sample line for syncing Jira custom fields:
issue.customFields."Jira custom field name".value = replica.customFields."Jira custom field name".value
The above statement maps a custom field value through the replica (the data payload passed between synced entities). Make sure to configure both sides: the outgoing script sends the value, and the incoming script maps it to the appropriate field in the destination instance.
To stop something from syncing (for instance, attachments), remove that script line from the outgoing script.
Using Aida for AI-assisted configuration: Instead of writing scripts manually, you can use Aida to generate sync scripts from plain language prompts. For outgoing scripts, describe what data should leave your system (e.g., "Exclude attachments" or "Only sync high-priority work items"). For incoming scripts, describe how data should be applied (e.g., "Map statuses" or "Set a default assignee if the user can't be found"). Aida generates working Groovy scripts based on your existing configuration and Exalate's scripting API.
Test Run: Before going live, use the TestRun feature to validate your configuration against real data without affecting production. Select work items, run the test, and review the incoming and outgoing replicas. If something looks off, adjust and test again. Publish only when everything works correctly.
Triggers control which work items enter the sync automatically. You configure them using Jira Query Language (JQL).
Click "+ Add Trigger" and define conditions. Here are sample JQL triggers:
Save your triggers and publish the configuration. Your Jira instances will now exchange data automatically based on the rules and triggers you have set.
Exalate gives you the flexibility to handle a wide range of Jira-to-Jira integration scenarios. Here are some commonly implemented use cases:
To learn more about syncing possibilities between Jira instances, reach out to us to discuss your use case.
Exalate combines flexibility with operational simplicity through a unified management console:
francis
1 comment