Notice: Trying to access array offset on value of type int in /var/www/html/wp-includes/formatting.php on line 889

Jira to Jira Integration: The Comprehensive Guide to Jira Sync in 2023

Jira to Jira integration

Helping teams work together effectively is a key factor in 21st-century workplace success. And matching the software they use to the needs of different groups is especially important when they are sharing data. So if you’re a Jira user and you want to share some data with a user working in another Jira, a Jira to Jira integration is what becomes necessary for a smooth collaboration. 

This software shouldn’t just help individual teams work flawlessly on their own, it should also help them connect and integrate.

In this article, you’ll see why connecting multiple Jira instances together is useful, and what technology is available for synchronizing them effectively. After that you’ll be taken through a step-by-step guide, explaining how to set up a connection between two Jira nodes. I’ll show you how you can customize the connection and synchronization. 

And lastly, I’ll cover some use cases to show you what a Jira to Jira integration can do to help improve your workflows, keep your teams connected and your data intact.

Here’s what we’ll cover in this blog post:

Get the Jira to Jira Sync Guide

Learn how to achieve a seamless integration between multiple Jira instances, step-by-step.

Why you Need a Jira to Jira Integration

There are many reasons why you might choose to integrate two Jira instances. 

Teams performing different roles very often overlap in the information they track. For example, customer feedback is useful to the customer support team, who will be the ones directly handling it. 

It is also useful to the engineering team, however. Engineers will want to know about bugs or issues with their user interface. They will also want to know what features customers want to see.

On the other hand, marketing teams will want to have a view of the people who are using their product, and what they like and dislike about it. 

These teams will want to share information, but they don’t necessarily want to share all of it. Engineers aren’t going to be interested in a customer’s contact information but will want to know about the issue that is being discussed. 

To solve these problems, you need to synchronize the information that is useful to both teams. It is possible to share data by email, but obviously, that is slow, laborious, and prone to error. So if you manage to do it automatically, you can save everyone time and money, and keep the data intact along the way.

When teams collect information themselves, they can run into an issue known as siloing. Teams can collect data effectively, but they keep it on internal systems. That wouldn’t help the wider organization, especially when going outside the borders.

Providing information to other groups is obviously important, but it is rarely a priority for people on a day-to-day basis. Having software automate the process of information synchronization can effectively solve this problem.

How to Choose the Right Technology for a Jira to Jira Integration

There are several things to consider when setting up your integration. You need to think about any potential problems and make sure your solution can handle them. The tool I’ve chosen, Exalate, was designed to meet three specific software integration requirements.

Decentralized Integration (Autonomy)

First of all, you want your teams to be able to make changes independently while working in the peace of their familiar environment. There will likely be a lot of consultation when setting up the sync, but after that, they need to be able to make changes without consulting each other. This is the essence of a decentralized integration setup.

Privacy is also important. Teams must be able to control what is sent to Exalate, and ensure that confidential data is not sent without permission. If exchanged, it must be done securely.


Your integration needs are likely to change over time. You might want to change what data is synchronized or change the format, or the synchronization criteria. Exalate offers a flexible system for controlling what is shared, and when the sharing happens. 

Its advanced scripting engine lets you define precisely how you want to integrate data. This flexibility allows you to adapt it to any use case required.

Connections can be altered easily at any time as you can also switch them on and off with a single button. Controlling and adapting the integration as your projects evolve is as straightforward as possible.


You need software that works as close to 100% of the time as possible. It also needs to handle problems gracefully. That means that if one of your systems has some downtime, the integration software is able to handle the outage, and resume operations when the systems are back up again. 

It should be able to get the systems back in sync as soon as possible, without you having to spend time resetting it or tweaking the settings. 

Ideally, once you have set the system up, you should be able to forget about it. Synchronization should happen without you needing to do anything else.

Exalate is also convenient and easy to work with. It has a free trial, and you can test it without having to enter payment information. Also, it doesn’t take long to install and set up. I’ll run you through the process of doing that next.

How to Set up a Jira to Jira Integration (the Step-by-Step Process) 

There are several deployment models of Jira, and you need to know which you have before you start. There are Jira Cloud and Jira Server, along with Jira Data Center, which is essentially a scaled-up version of Jira Server for Enterprise organizations. To read more about the deployment models, check out this article

Jira Cloud is a subscription-based service hosted by Jira on its own servers. Jira Server and Data Center are hosted on users’ own machines.

Let’s get down to setting up the Jira to Jira integration: 

Step 1: Install Exalate on Jira

You’ll need to do this step for each of your Jira setups. Firstly, log in to one of your Jira Cloud instances. Find Exalate in the Atlassian Marketplace. To find it, click the cog-shaped settings button in the top-right of the screen and then click “Apps” in the menu that appears. 

Note: The installation process depends on the version. I’m focussing on Jira Cloud here, and there’s a further guide to it in the Exalate documentation. If you’re using Jira Server or Data Center, please look at this guide instead.

In the marketplace search field, type “Exalate”. You’ll see several versions of Exalate appear, corresponding to the platforms Exalate supports.

Select “Exalate Jira Issue Sync & more”. Click “Try it free” on the next page.

Exalate free trial

A pop-up asking you to “Add to Jira” will appear. You can view the app details from here if you want. Then click “Start free trial”.

Wait for some time while the app is being added.

You’ll be redirected back to Jira, where you’ll see a pop-up telling you that the app has been added. Click the “Get started” button.

Congratulations! Your installation is complete.

Next, you need to repeat the same process on your other instance. If your other instance is Jira Cloud, use the steps above, otherwise check the links for details on the Jira Server or Data Center installation process.

Step 2: Connect your Jira Instances

Now that Exalate is installed on both Jira instances, you need to create a connection between them. The way to do that is to set up a connection from either instance.

One side actually invites the other side to connect and the other side accepts.

During the connection setup, there are several screens that let you configure exactly how Exalate behaves. In some cases, I’ll pick the defaults, but look in more detail at those areas in steps 3 and 4. Exalate will pick sensible default settings, exchanging data between identical, or equivalent fields.

So in the later steps, I’ll look at how the connection can be adjusted after it has been created.

First, let’s set it up.

On one of your Jira instances, click “Apps” in the top menu, and then select “Manage your apps”. If Exalate is installed, you’ll see it listed as a heading in the left-side menu.

Click “Connections”. 

initiate connection for a jira to jira integration

If you’ve created any connections before, you’ll see them listed here.

If not, you’ll see a message saying that none have been created yet. Either way, click the green “Initiate connection” button.

On the next screen, enter the URL of the other instance.

After entering the URL you will be redirected to a screen that will allow you to choose between 3 configuration modes: Basic, Visual, or Script Mode.

Exalate configuration modes

Continue with the Basic Mode

This is the newest addition to the type of connections provided by Exalate. Basic connections have a set of predefined sync rules to help you sync basic issue fields like summary, description, comments, attachments, and issue types. You cannot modify these sync rules. This type of connection works best for basic synchronization needs. 

Note: Exalate also has an option where not only Global administrators but also Project administrators can set up Basic connections from the Project settings. This helps establish the connection on a project level. Visit this page to learn more about how to do it.

The above screen redirects you to select the project on the side that initiated the connection. 

initiate a jira sync

Hit “Next” and then you will need to confirm whether you have admin access to the destination Jira instance or not. Click “Initiate” if you have access or else follow these steps.

jira sync basic mode access

On the destination instance, select the project and then click “Confirm”. Once the connection has been established, you can sync your first issue in Exalate to see how it works: by entering the issue key and clicking on Exalate as shown below, by using the connect operation, or by syncing issues in bulk or creating a trigger.

accept a jira to jira connection

While syncing your first issue you can also see the status of your sync as “synchronized”.

Continue with the Visual Mode

In this mode, you can give names to your local instance and destination instance. The form will use these to create a name for the connection, which you can modify if you like.

initiate jira sync

There’s also an optional description field. The more information you enter here, the more easily you’ll be able to identify and work with your connection later on. This is especially important when you have multiple connections and different people working with them. Adding enough detail here can save you work later on.

When you’re ready, click “Next”.

For using Visual Mode, you need admin access on both sides of your Jira instance. So when you click “Next” on the screen above, you will be redirected to a screen that asks you to confirm the admin access. 

Firstly, Exalate will try to establish a connection between your nodes. That might take a few seconds.

successful visual Jira to Jira integration

When it’s ready, click the green “Configure sync” button to proceed.

On the next screen, you have several options to control how you integrate your Jira projects.

exalate visual mode jira sync scope

The connection names are displayed, and under each of them is a drop-down menu where you can pick which project is used for synchronization. The filter issues screen takes you to a further screen, where you can configure what is sent over. 

In the middle, the “Sync method” drop-down lets us pick whether synchronization is done manually, or automatically, or whether it is disabled entirely.

We can make this choice for both synchronization directions, so if you just want to copy issues one way, you can do so.

You could also have synchronization occur manually in one direction and automatically in the other, it’s up to you.

Let’s look in more detail at the screen that appears when you click the “Filter entities” button. 

jira to jira integration filters

There are various filters you can set to choose which issues are synchronized. If you want to sync all of them, just leave these fields blank. You can choose to filter issues of a specific type, or you can select a status, priority, or which labels to use. 

If you click the “More” button, a few more fields will appear allowing you to specify the Assignee or Reporter.

You can also add a specific description, or summary, which will select matching items.

These filters can be combined as needed. Click the “Save” button when you’ve made your selections.

jira issue mapping

Back on the main scope screen, click “Next”, to move on to the next step.

On the “Rules” screen, you specify which fields are mapped onto each other. Since the integration uses 2 Jira instances, fields are mapped one-to-one with identically named fields.

If you’re using Jira with another platform, such as a Jira Zendesk integration or a Jira Azure DevOps integration, similar fields may have different names.

You can drag the fields up and down to re-order them. Some can also be expanded to reveal further options. The “priority” field, for example, lets you choose how priorities map to each other.

The “Expand all”, and “Collapse all” buttons at the top left let you show or hide all the extra fields at once, which is useful if you want to check everything quickly. 

If you want to create a new mapping, click the “Add mapping” button. Here you can select further fields to be mapped together. Your 2 instance names are on the left and right sides, and you can choose the fields to be mapped from the drop-down boxes under their titles. 

The sync direction field in the middle lets you choose whether the synchronization goes in both directions, or in a single direction.

add mapping to jira to jira connection

There are further drop-downs letting you choose what happens if no matching value is found for the field.

In this case, Exalate can set a default value, which you select with another drop-down box. Alternatively, it can report an error, or do nothing. This behavior is set on each side of the connection, so it doesn’t have to be identical.

If you click the plus button, you can map specific values for the field to one another. This is especially useful if you are using different platforms.

But even with 2 Jira instances, you may have teams that use different terminology, so this feature can be useful there. There’s a small delete icon next to each entry you can click if you want to remove it.

When you’ve finished on this screen, click the “Save” button if you want to keep your changes, or the “Cancel” button if not. 

If you click the small arrow at the side of the “Add mapping” button, you’ll see an “Add script” option. If you click that, a new screen will open.

add scripting to jira integration

Here you can add lines of code that control your mappings in more detail. The lines of code there already show how you can set specific fields to specific values, or map them onto other values.

Script rules can be complicated, but they are very powerful if you learn how to use them. To learn more, click the “Check examples” text in Exalate to read some script rules examples.

When you’ve finished, click “Save” to keep your changes, or “Cancel” to discard them.

edit jira sync mapping

If you want to edit any of the fields that are there, hover over it and click the “Edit mapping” icon next to the delete icon. The “Edit mapping” screen works the same way as the “Add mapping” screen.

You might not want to map all the fields that are mapped by default, so delete any you don’t want by clicking the “Delete mapping” icon, on the right of each one.

When you have everything set up to your liking, click “Publish”, to finalize your choices.

Continue with the Advanced Script Mode

If you want to customize your Jira sync how you want, then the Script mode is your way to go. It uses the Groovy scripting engine, which allows for utmost control over your data exchange.

The methods offered on the wizard here are the same as I’ll cover in later sections, so you can mostly just accept the defaults when installing Exalate.

To start with, after selecting the “Script Mode”, you will be taken to a  screen that will allow you to enter the details of the connection.

initiate jira sync

Once the details are entered and you clicked “Next”, you have to choose a project at the Jira instance initiating the connection, which will be used for synchronization. Select one from the drop-down list and click the “Initiate” button.

Lastly, an invitation code is generated, which you need to copy and paste into the other Jira instance. Click the “Copy invitation code” button. The code will be copied to the clipboard. Paste this somewhere safe, such as a text file, and save it for later.

copy invitation code to a jira sync

Next, log in to your other Jira instance. Look for the Exalate connections screen in the same way as before. This time, click the “Accept invitation” button. You can even be automatically redirected to the other Jira instance by clicking the “Go to remote” button.

jira to jira integration invitation code

Paste the invitation code into the field provided, then click “Next”.

accept a jira sync invitation

When accepting the connection invitation, you choose the project on this side that you want to synchronize with the other side.

After you’ve made your choices, you’ll see this connection listed among any others you created before.

Now your Jira instances are connected, let’s look at some of the things you can do with the connection.

Step 3: Configure Your Connection to Determine What Information Gets Shared

As mentioned, Exalate will use common defaults when creating your connection. You can edit these at any time. 

edit jira to jira integration

To start, find your connection in the list, move the mouse over it, and click the “Edit connection” icon that appears.

Click on the “Rules” tab in the connection screen.

 jira to jira sync rules

The rules use the Groovy language, so if you already have some experience, all the better. Anyone familiar with core programming concepts should be able to adapt to them fairly easily.

Note: New to Groovy? Then check out chapter 4 of the Exalate Academy.

Each rule shows how fields are mapped onto each other. As this is a Jira to Jira connection, the field names are identical, such as replica.labels = issue.labels.

There are also some helper functions that, for example, can map lists of comments or attachments from one instance to the other, such as issue.comments = commentHelper.mergeComments(issue, replica).

You can adjust these lines to change anything you like. If there are fields you don’t want to be synced, delete them.

If you want to map fields to other fields, adjust them.

If you want to give a specific value to a field, change it to do that, for example, you might want to change replica.labels = issue.labels to replica.labels = ‘synced from Jira Server’.

You can use conditional statements and logical operators to give you different behavior in different situations. You can have specific types of items ignored when synchronizing, and you can combine operators to change their behavior for combinations of field values too.

Read more about the sync rules here.

If you look under the sync rules, there’s an “Advanced” heading. If you click to expand this, you have the option to show the remote issue link or not.

When you’re finished, click the green “Publish” button to save your changes.

Step 4: Set Up Automated Synchronization Triggers

Triggers define the conditions that cause items to be synchronized over the connection. As with the sync rules, you can use code to control these conditions. The sync rules determine the specifics of what is shared under synchronization, the triggers determine if specific items are synchronized or not.

If you click the “Triggers” tab in the edit connection screen, you can access the automated synchronization triggers.

You can also find a summary of all of your active triggers, by clicking “Triggers” in the left-hand menu.

Jira sync triggers in Exalate

If you follow the first method and want to create a new trigger, click the “Create trigger” button at the top right.

Triggers are written in a different language depending on the platform. Jira uses its own query language, JQL. Note that this is different from the “Groovy” language used for the synchronization rules. Read more about it in the documentation.

automatic sync triggers

On the “Add trigger” screen, there’s a drop-down box at the top where you can select what kind of entity the trigger applies to. I’ve selected “issue” in this case. In the next box, below the “If”, you enter your query. Here, I’ve chosen to sync issues where the type is marked as “Task”.

I’ve also added a note, describing what the trigger does, and set the trigger to “Active”. If you don’t do that, it won’t work! Finally, click the “Add” button at the bottom.

Back in the trigger list, you can see the entry you just created. Now, items that match the condition will be synced automatically.

These triggers can be edited or deleted by clicking the respective icons in the list, under the “Action” heading. If you click the three dots, you also get the option to “Bulk Exalate” and “Unbulk Exalate”.

Let’s take a quick look at the screen you see if you click “Triggers” in the left-hand menu, and then choose to edit an entry.

As you can see, this screen is very similar to what you saw earlier. There’s an extra field to choose which connection the trigger applies to. If you make changes here, click the “Update” button in the bottom right to keep them, or “Cancel” to discard them.

Step 5: Start Synchronizing Tasks

Now your connection is ready, you can start creating tasks and if they match the criteria, they will be shared between platforms. Exalate checks for new tasks every few minutes, so please wait for a little while if you don’t see them transferred immediately.

If you don’t see anything after a while, take a look at the rules and make sure they exactly match the items and fields you want to exchange.

Common Use Cases 

There are many situations where a Jira to Jira integration could be useful. Let’s run through a few.

Customer Support and Development Teams

Customer support teams get a huge amount of feedback from customers. Much of this concerns the issues that users are having with the product. This could be anything from technical problems, to areas where the user interface isn’t clear, to suggestions for new features. 

Developers will want to know if something doesn’t work, or if it could be improved. They will also be open to new suggestions. They won’t necessarily want to know all the details though, and they won’t need to see all the discussions between customers and the support team.

You can set the sync rules to send the information the developers need, and then any solution to the problem can be synced back to the support team. Perhaps you could have a time limit field as well or comments that support can relay back to the customer.

A Marketing Team and Design Team

The marketing team might keep track of features that are popular in competitor products, or that consumers respond to in campaigns. The design team might want to analyze these and see whether they would be a good fit for the team’s product.

If you create a label that corresponds to these features, perhaps called ‘new-features’, you can then create a trigger that says label = new-features. This should be a one-way synchronization as the marketing team won’t need to see the design team’s work.

Safely Connecting to Multiple Suppliers

If you have multiple suppliers, you might want to connect your systems with theirs, while keeping the suppliers’ information separate from each other and providing each end with the maximum autonomy possible. With a cross-company integration solution like Exalate, you can make sure you exchange information safely with each supplier, letting you collate the information without leaking suppliers’ data to each other.

It allows you to comment on or add to the information, and control which of it you share. In this way, you can create “safe islands”, where you can work with the data you need while being confident you aren’t going to breach customer confidentiality.

Managed Services Provider Handling Different Customers

A managed services provider, or MSP, needs to handle issues with its customers. The businesses it deals with may have different contracts, and accordingly different expectations. If an MSP has a small number of large clients, they might well have specific people assigned to handle each one, and Exalate can make sure relevant issues are assigned to the correct person.

It can also share information between systems while keeping some information internal to the MSP. What is shared and what isn’t can be defined for each specific client, depending on the business relationship.

Helping New Staff Members

If you want to help new staff members learn the ropes, Exalate can help with that. You can set Exalate up to copy tickets created by a newcomer to another system, so managers can check what they are doing, and make sure they are responding to issues in the correct way. 

To do this, create a synchronization trigger that looks like assignee = team-member-name and then set the sync rules to copy over whatever management wants to check up on. When the new team member is up to speed, you can delete or deactivate the trigger.


As you’ve seen, it’s easier than ever to get your teams working together more effectively. If you set up an effective Jira to Jira integration, you’ll boost your team’s productivity and enable them to benefit from the information captured and processed by different departments.

You also know how to install an integration solution like Exalate and set it up to exchange data between your Jira systems. You can also tune the connection to match your needs and make sure each system gets exactly the information it requires.

Recommended Reads:

Comments are closed.