Salesforce to Salesforce Integration: Sync Multiple Salesforce Instances Bidirectionally

Salesforce to Salesforce integration

Over the years, CRM and Salesforce have become companions, inseparable and tightly bonded. The number of capabilities Salesforce offers towards CRM is huge and proof enough to leverage it for enhanced functionalities, like a Salesforce to Salesforce integration between partners or other businesses using the platform.

Such integration would allow sharing data (for instance: Leads and Opportunities)  and its updates between different Salesforce instances. This will help achieve close collaboration with different partners or businesses using Salesforce, in turn, helping you grow your customer experience manifold. 

So in this article, we aim to target the benefits of this setup by having a look at a few use cases. And then, we will see how we can achieve a decentralized Salesforce-to-Salesforce integration using a tool called Exalate

Jump to:

Why Integrate Multiple Salesforce Instances?

In today’s digital world, data is gold, and if mined properly it can help different teams share expertise and grow together through common business-critical information. 

But the fundamental problem lies when this information is passed manually between them. It leads to discrepancies and errors. Plus, you need to filter the exchanged data, as you don’t want to send across all the information. There is certain information you would rather keep within your Salesforce instance; to comply with your security or data regulatory requirements. So much filtering if done manually can become cumbersome and lead to friction among team members. 

To avoid that, a Salesforce to-Salesforce integration seems like the way out. 

It will deal with all the above problems like a cakewalk, providing along the way a few extra toppings like secure, automatic, filtered, reliable, and real-time bi-directional information exchange. All this, so the other party has the most accurate representation of information it wants to see and doesn’t receive any unauthorized information. 

To elaborate a little on how exactly it will be beneficial, let’s have a look at a few scenarios where exchanging information between multiple Salesforce instances can help companies collaborate and communicate effectively. 

Salesforce to Salesforce Integration: Common Use Cases 

Sales and Marketing Teams 

Sales and marketing are probably the teams in your organization that use Salesforce day in and day out. But what these teams probably lack is collaboration on common customer enhancement goals with each other; as they might be stuck up in their respective Salesforce instances. 

An integration in such a case would help to share customer information in the form of Accounts, Opportunities, Leads, etc, and design campaigns or other marketing initiatives around them. The treasure house of information within individual Salesforce instances can be used by both these teams and prove beneficial to open up new avenues for enriching customer experience. 

Sales and Customer Service Teams 

Customers are and have always been the focus of businesses worldwide. To enrich and nurture your relationship further with your customers, an integration between the Salesforce instances used by the sales and customer service teams can definitely work in a positive manner. 

Cases, Tasks, and Opportunities always have valuable insights into customer behavior, feedback, problems, and queries. So getting early access to such information and proactively dealing with it can only leave you with happier customers. 

Grow and Diversify your Partners and Business

Allowing multiple Salesforce organizations (Salesforce instances) to integrate would mean expanding your partnerships with newer business interests; in turn, targeting a wider customer base and increasing the services to offer. 

This can also allow vendors to diversify their business operations, wherein such different partners could bring in their expertise to provide a package of services to their customers. 

This brings us to the point of reminiscing about ways to achieve such a Salesforce to Salesforce integration.

2 Ways to Integrate Multiple Salesforce Instances

Salesforce to Salesforce: The Native Salesforce Functionality 

Well, Salesforce is well-known for its customizability to suit almost any business case and model. As such it has already envisioned the future of integration and has brought to you “Salesforce to Salesforce”; a service that offers to connect 2 Salesforce organizations (or instances). 

But to use this feature there are certain points to consider like: the ability to share a maximum of 100 tasks per related Salesforce record. There are also other guidelines you can refer to here

This is a great option if you have simple out-of-the-box use cases. But if you have custom or advanced integration needs then you can achieve that through REST API callouts using Apex

Now here is where the real challenge lies. 

Apex is a powerful medium that allows you to extend the native capabilities of Salesforce to include custom and advanced business logic, but it boils down to implementing an integration, which honestly is too much work. 

This is one of the things you might want to consider if your teams do not have the necessary technical resources to carry it forward. Also, Apex isn’t really optimized nor designed for the complex integration processing that is expected from typical integration tools; not to mention that it is subject to governor limits defined by Salesforce. 

In lieu of this, AppExchange from Salesforce has ready-made apps that help remove the sting of implementing an integration and allow you to integrate multiple Salesforce instances in a graceful manner. So here is a tool that can checkmark almost all your integration needs. 

Exalate App for a Salesforce to Salesforce Integration

I will use an integration solution called Exalate for the purpose of this article. It was designed specifically with decentralized integration in mind and allows you to bidirectionally sync information in real-time between 2 (or more) Salesforce instances or between Salesforce and other applications like Jira, GitHub, ServiceNow, Zendesk, HP ALM, etc. 

You can have a look at Exalate’s integrations page for more info. 

So let’s see why Exalate would be the right choice to handle a complex Salesforce to Salesforce integration:

  • Perhaps, we will get straight to the point; what is decentralized integration?
    This means that each side will independently control what it sends to the other side and how it wants to receive information from the other side. An effect of this arrangement is that it ensures unauthorized Salesforce users don’t get access to shared information, because you simply choose what to send (or receive) over and what not to.
    Since it has distributed architecture, the systems are loosely coupled, making your integration more maintainable and scalable. 
  • It provides secure information exchange through role-based access controls, encrypted information exchange, use of HTTPS, etc. You can learn more about its security features in this whitepaper.  
  • It has an intuitive scripting engine that allows you to integrate with even the most advanced or complex integration use cases. So in this way, it is flexible
  • You don’t have to worry about downtimes or outages with Exalate in place; it ensures reliability. It will gracefully resume operations in case of breakdowns and ensure the information keeps flowing from the point of interruption without the need for manual intervention.

But the question still remains, how do you achieve such a Salesforce to Salesforce integration using Exalate? 

 So let’s see how!

How to Set up a Salesforce to Salesforce Integration in 5 Steps 

Step 1: Install Exalate on Salesforce 

The first step is to install Exalate on Salesforce. Since we are integrating two Salesforce instances, you would need to install it on the other instance as well. 

You can find the installation steps here, but I will also discuss them briefly in this section. 

Note: Exalate accesses Salesforce through APIs. Salesforce has got its own guidelines for API Access add-ons. For example, API access is provided by default in Enterprise accounts, but it is not the case with other accounts like Professional. Learn more about the different Salesforce editions Exalate supports on this documentation page.

Head over to AppExchange by Salesforce. In the global search bar, search for Exalate. Choose Exalate from the drop-down list. 

Click “Get It Now”. 

Exalate for Salesforce

Then click “Install in Production” to install the package in the production environment. 

install salesforce production environment

After this, “Confirm and Install”.

Next, you need to choose the users’ profiles that will have permission to access the Exalate app. Click on the permissions according to their roles. Don’t worry if you can’t decide immediately, you can change the permissions anytime later.  

install exalate on Salesforce

I have chosen “Install for Admins Only”. Once done, click “Install”. 

Then approve access to 3rd-party websites and click “Continue”. You will be redirected to your Salesforce instance by clicking “Done”. 

exalate for salesforce installation

Now in Salesforce, access the Exalate app by searching for it in the “Apps” section. Then “Request Node” to request an Exalate node.

exalate console for salesforce to Salesforce Integration

Then  “Allow” the app for necessary permissions. 

Now to activate an evaluation license and to verify your Exalate for Salesforce instance, fill in a simple form with your details. Click on “Agree and submit” after filling out the information. 

activate exalate evaluation license

Head over to your inbox. Open the email you have received from the Exalate License manager and click “Verify Exalate instance”. 

verify exalate instance for salesforce integration

This will finish the installation. 

Note: To log in to your Salesforce Exalate node, follow this process

Now proceed to the next step. 

Step 2: Connect your Salesforce Instances 

To begin with, you need to connect both your Salesforce instances. This will help form a link between them. Once the link is established, you can proceed to configure the connection and share the required information. 

For this, initiate the connection from one Salesforce instance and accept it on the other. 

Go to the “Connections” tab in the left-hand menu of the Exalate console on any one of the Salesforce instances. It doesn’t matter which instance you start from; Exalate has a uniform interface on all applications. 

Then click on “Initiate Connection”. 

initiate salesforce to Salesforce Integration

Enter the destination instance URL. This will be the URL of the other Salesforce instance. Copy it from the address bar and paste it into the text box shown in the image below. 

After Exalate performs a check of whether it has been installed on the destination instance or not, it will give you further options to proceed. These options would include choosing the configuration mode. 

exalate configuration modes

It supports 2 configuration modes: Basic and Script.

The Basic mode is free and is configured automatically for you. It works well for basic sync use cases and is quite suitable for testing the connection you have just established. 

You can sync only “Cases” with the Basic mode. It also comes with a Free Plan that allows you up to 1000 free syncs per month. 

The Script mode is what makes Exalate compatible with almost any scenario. It is more advanced and lets you decide what you want to share with the other side and how you want to map the information coming from the other side. 

It comes in Groovy scripting language which is not very difficult to understand by non-technical users. There is also elaborate documentation on sample scripts that can come in handy when you get stuck. 

We will cover this mode in a while.  Let’s continue with the Basic mode for now. 

Continue with the Basic Mode 

Once you select “Basic”, click “Next”. 

You then need to verify if you have admin access to the other Salesforce instance. Don’t worry if you don’t. An invitation code will be generated. You can copy and paste it on the other side in this case. 

I have access, so I will click on “Yes, I have admin access”. Then I will be redirected to the other Salesforce instance to verify the access and establish the connection. 

On the next screen, you can test the connection you have just created by entering the Case number in the text box given and then clicking “Exalate”. 

Salesforce Integration successful connection

After a brief pause, you can see the Case getting synced to the other side. As shown in the image below, you can even click on the respective links and head over directly to the particular Case. 

successful salesforce to Salesforce Integration

Now let’s move ahead with the Script mode.

Continue with the Script Mode 

Initiate the connection in the same manner as you just did. But now instead of choosing “Basic”, choose “Script”. And then click “Next”.

exalate script mode

Now you need to enter a name for your local Salesforce instance and one for the remote instance. A connection name by combining both of these names will be auto-generated, but you can change it if you want.

initiate salesforce integration in script mode

Don’t forget to add a description. It will help you identify your connection amongst a long list. Click on “Initiate” once you have entered all the details on this page. 

Now an invitation code is generated. This is a unique secret code to authenticate both instances.

“Copy invitation code” and make sure to paste it somewhere safe just in case. Once you copied it, click “Done”. 

Then go to the other Salesforce instance. 

There on the “Connections” tab click the “Accept invitation” button this time. On the text box, paste the code you have just copied and click “Next”.

accept Salesforce Sync invitation

In a few seconds, the connection is successfully created.

salesforce to salesforce successful sync

You can now configure it to decide what and how you want to send and receive information. 

Step 3: Configure the Connection to Share Data

You can continue to configure the sync by clicking the “Configure Sync” button on the screen above. 

If you don’t choose to do it immediately, you can go back to your “Connections” anytime and click on the edit connection button in front of your connection name. 

Both approaches will redirect you to a page that looks like shown below. 

As seen, there are 4 tabs: 

  • Rules
  • Triggers
  • Statistics and 
  • Info
salesforce to Salesforce Sync rules

Statistics show how many items you are sharing and the details of when you have last synced them. 

The Info tab gives information about the type of connection. You can find the destination instance URL here. You can edit the description of the connection here, too.

Moving to the “Rules” tab. 

There are 2 sections under it. The “Outgoing Sync” decides what information should be sent and the “Incoming Sync” decides how you want to map the information coming from the other side.

Each line corresponds to a field you want to sync. For instance, replica.description = entity.Description in the Outgoing sync would mean that the description of the case is sent over to the other side. Replica acts like an empty placeholder to dump information you want to send to the other side. Likewise in the incoming sync you take contents from the replica and place it under the appropriate fields, i.e:  entity.Description  = replica.description, meaning that the replica’s description is copied to the description of the Salesforce entity

Note that these rules exist at either end, so each side can decide independently of what it needs to send and receive. The syncs are written in Groovy scripting language. 

To stop sending or receiving certain information, you can simply choose to comment or delete that particular line. So if you delete replica.description  = entity.Description in the outgoing sync section, then it means the description won’t be synced to the other side. 

You can even choose to have a fixed field description, for instance: replica.description = ‘synced from the sales team’. 

You can also add some text at the beginning of the description, for instance: 

replica.description = ‘synced from the sales team’ + entity.Description

To send additional information, you can add scripts in the existing sync rules section. 

For instance, if you want to send Tasks in addition to Cases from one Salesforce instance to the other, you can add the following script in the “Outgoing sync”: 

if(entity.entityType == "Case") {
replica.key            = entity.Id
replica.summary        = entity.Subject
replica.description    = entity.Description
replica.comments       = entity.comments 
replica.attachments    = entity.attachments
replica.Status         = entity.Status

if(entity.entityType == "Task") {
replica.key            = entity.Id
replica.summary        = entity.Subject
replica.description    = entity.Description
replica.Status         = entity.Status

Don’t forget to map the corresponding Task details in the “Incoming sync” of the other Salesforce instance here. 

This way, you can even set up the most advanced configuration between the instances. 

There is no need to get bogged down by so much code. There are a lot of script helpers that can help you with advanced processing. 

Step 4: Create Automated Sync Triggers

Sync rules as seen above decide what information should be sent and received, whereas triggers decide when to send that information. They are conditions that we set if satisfied will send information according to the Sync rules. 

To create triggers, click the “Triggers” tab as shown in the above section. 

If this is your first time, the screen will be empty. So start creating a new trigger by clicking “Create trigger”. 

The “Add trigger” screen allows you to create your trigger. 

add sync triggers to salesforce integrations

Select the Salesforce entities to which the trigger will apply, for instance, Case, Account, Product, Opportunity, etc. 

Then in the next section, you can enter the details of the Case in the fields provided to create a trigger. There are a lot of options in the “More” section as well.  For instance, you can choose to sync Cases belonging to a particular company, in which case you need to write the name of the company in the text box provided. 

Or you can even create it by toggling the search query option, which will allow you to write a trigger in the Salesforce Object Query Language (SOQL). 

Salesforce Sync triggers

I have written a trigger to sync every case with the status ‘New’ to the other side. 

Once you write your query, scroll down and fill in some notes for the trigger. This will help you identify the purpose of your trigger in case you have too many. 

And then click “Active” to activate the trigger. 

create triggers for salesforce to salesforce integration

On the previous screen, you will be able to see your trigger listed. You can choose to edit or delete it from this screen. You can even choose to sync existing Salesforce objects fulfilling the condition of the trigger by clicking the three dots next to its name and selecting “Bulk Exalate”. 

And last but not least, the most important step is to “Publish” the changes you have made so they can be reflected in your sync. 

Step 5: Start the Synchronization

There are various ways you can start your synchronization with Exalate.

  • You can use the Basic mode to sync as shown in step 2. 
  • You can create triggers as shown in step 5. 
  • You can “Bulk Exalate” Salesforce entities satisfying the trigger conditions. 
  • Or you can manually sync a particular entity by clicking on the “Exalate” sync panel in the Salesforce object page. You just need to select the connection name through which you want to sync and click “Exalate”. This panel will also show you the status of your synchronization. 
  • Another way to sync is using the “Bulk Connect” option that allows you to sync existing Salesforce records present in both instances. 

This is all you need to know about how Exalate can help you achieve your integration. 

Things to Consider when Using Exalate

Defined User Roles and Responsibilities

It is important to define user roles and responsibilities, especially in an integration setup. Such a filter is necessary to avoid friction between team members. As an appropriate measure you can label the items to be synced correctly and clearly, so everyone on the team stays on the same page and is aware of what needs to be done in case of a discrepancy or error. 

With Exalate it is possible to filter items to even the most granular level. For instance, you can filter them according to the username field so things can be handled differently for teams or individuals. 

Access to the Exalate app

We need proper access control mechanisms to ensure authorized people have access to the Exalate app. This requirement is important in an integration setup to ensure your information does not end up in the wrong hands, or any data regulatory requirements are not violated. Such permissions are already set up while the app is being installed, but they can even be changed later if needed. 

Notification Handling

When dealing with newer integration apps like this, it is tempting to overload users with every little sync. However, we need to avoid this, as sometimes people can tend to overlook important notifications if they are overloaded with a lot of unnecessary ones. 

A plan must be in place so that only the required and minimum number of users are notified in case something goes wrong, or to have updates about necessary syncs. This will ensure the app is used correctly and no one is missing important notifications. 


Integration is a tricky subject and can seem gigantic. Honestly, it is! But if handled carefully and with proper planning, it can make your life a lot easier. 

We saw how this can be true for a Salesforce to Salesforce integration where you can expand your business to include newer partners and your business teams to work towards common customer goals. 

We covered native ways to handle this integration. And then moved on to see how to get your integration to work the way you want it to, using a cross-company integration solution called Exalate.

And lastly, we saw how Exalate can be used to integrate multiple Salesforce instances in 5 easy steps and pointed out a few things that can make your integration path a smoother one.

Recommended Reads:

Comments are closed.