Possible ways to Sync Data between two Zoho CRM Organizations

Possible ways to Sync Data between two Zoho CRM Organizations

Requirement Overview

The user wants to synchronize records between two Zoho CRM organizations, so that any record created or updated in Org A is automatically reflected in Org B. i.e., whenever a record is added or modified in Zoho CRM Org A, the same changes should be synced in Org B.

Use Case

A Company maintains multiple Zoho CRM Orgs due to regional operations, different business units, or external partner collaboration. In such cases, syncing data between these Orgs ensures consistency, collaboration, and visibility across teams.
  1. Example Business Use-Cases
Global + Regional Orgs
      -> A company has a Global Zoho CRM Org for central reporting and multiple Regional Zoho CRM Orgs for local sales teams.
      -> Leads captured in the Regional Org must sync to the Global Org for centralized tracking.
      -> Global Org may push back updates like “Qualified Lead” or “Closed Won Deal” to Regional Orgs.

Parent Company + Subsidiary
      -Parent company manages corporate accounts and enterprise deals in one Org.
      -> Subsidiary companies manage local sales in their own Orgs.
      -> Sync ensures parent company has visibility into subsidiary sales progress.

Vendor–Partner Collaboration
      -> A vendor uses one Zoho CRM Org, while resellers/partners use another Org.
      -> Syncing allows partners to push deals/opportunities to the vendor Org for approvals, fulfillment, or invoicing.
      -> Vendor Org may push product/pricing updates back to partners’ Orgs.
  1. Current Challenges to achieve this directly

As of now, we do not have a direct option to setup an integration between two Zoho CRM accounts. Though, users can manually Export/Import. However, this requires continuous manual intervention. Whereas, the user is looking to sync records automatically without any manual work.

Solutions - Step-by-Step Implementation Guide

Users can opt for any of the below methods to sync records between two Zoho CRM Organizations 

A. Using Email Parser Method

Let us see how we can achieve this via email configuration in detail below. 
  1. Configuration Setup

1. Firstly, you need to generate the "Email parser ID" and add an "Approved Email Address" in the destination account, i.e., CRM Org B. Refer to this Help Link to generate the Email Parser ID and to add an Approved Email Address.

2. Now, create an email template with merge fields for the Leads module in the source account, i.e., CRM Org A. Ensure to create the template in the Plaintext format. 


3. Add an email address to your Organisation email under "Setup >> Channels >> Email >> Email configuration >> Organisation Email". Once added, verify and authenticate it. Ensure to add the email address that you have added in Approved email address in the Destination account(under created Parser).
Info
Refer to the following Help Link to know more about Organization email.


4. Create a Email notification under "Setup >> Automation >> Action >> Email notification >> Create new Email notification >> add the Email notification and select the Lead module".

Now add Email Parser ID in the To address field and select the created Email template. Then, select the Organisation email address that you have added previously and save the email notification.


Notes
Note: If you are using an email address that is already authenticated in Zoho CRM Org 1, you can directly use the same email address as an approved address in Email Parser of Org 2 .

For example, suppose you have added example@abc.xyz as an organization email address and authenticated the domain in CRM Org 1. You could then use the same email address (example@abc.xyz) as an approved address in the Email Parser settings of CRM Org 2.

If you have added an email address that is not authenticated in Zoho CRM Org 1, you will need to use a different approved email address in the Email Parser of Org 2.

For example, suppose you have added example@abc.xyz as an organization email address, but the domain is not authenticated in CRM Org 1. In this case, follow the steps below to obtain the correct email address, which can then be added as the approved email address in the Email Parser.

Steps to get the correct email address:
1. Add a dummy email address in the "To" field of the Email Notification action.
2. Add that Email Notification action to a workflow.
3. Trigger the workflow once to send an email to that dummy email address.
4. Open the email from the mailbox. You will see the From email in format as: example.abc.xyz@viazohocrm.com.
5. Copy this From email address and add it as an approved email address in the Email Parser of Org 2.

Once configured, the emails will be received and processed accurately in the Email Parser.

This method will also work across DCs. i.e. CRM account1 in IN DC and CRM account2 in US DC

5. Now, create a workflow for the Leads module and the set the trigger as "On Create or Edit". Set the workflow to be executed for all Lead records and in the action, select email notification that you created earlier with the Parser ID. Then, save the Workflow. 


6. Then, create a test record in your Leads module from 'CRM Org A'. So that, we can create the Parser rule in 'Org B'. When the Lead is created, the workflow will be triggered and the email will be sent to the Email Parser ID with lead information that has been merged from the lead record.

7. Go to the Email Parser in 'CRM Org B' >> Email. You will find an email with the Parsing status as "Rules not matched". Ensure to select the "Update record" checkbox, so that when the record is updated in 'Org A', it will be updated in 'Org B' as well. 

Info
Refer to the following Help Link to know detailed information about creating Parser Rule.
Once the configuration of Parser rule is completed, you are ready to go live. You could create or edit the Lead record in the 'Org A'. It will be synced to 'Org B' via Email Parser. 

Notes
NOTE: You need to recreate the same setup for each module and layout to sync the records from multiple module via Email parser. 
  1. Working - Screenshots

Record from CRM Org 1
  

Email parser - Record Created


Email Parser - Record Updated


B. Using Zoho Flow Method

Using Zoho Flow, we can effectively sync data from Org A to Org B. The Users can setup triggers from one Zoho CRM instance (i.e., Org A), to do action in another Zoho CRM instance (i.e., Org B).

Consider a scenario where the CRM1 account is owned by 'User A', and CRM2 account by 'User B'. To create this flow, you will require twi Zoho Flow accounts, one for 'User A', and another one for 'User B'.
  1. Configuration Setup

Step1 - Log in to your Zoho Flow account (i.e. User B), and add 'User A' as a member in your account. 

1. Go to Settings->Members  
2. Click 'Add Member' in the top right.  
3. Enter the name, email address, and role of the new member, and click 'Send' to invite them. 

(Once user 'A' accepts your invite, they will become a member of your Zoho Flow organization.)  
 
Step2 - From your account (i.e. User B), connect CRM 2 account in Zoho Flow. 

1. Go to Settings->Connections 
2. Click 'Create connection' 
3. In the configuration window that appears, select Zoho CRM, and click 'Next'.  
4. Give your connection a name (UserB - Org2), and click 'Authorize.' 
 
CRM2 account (your account - User B) will now be connected to Zoho Flow. Once connection is established, click 'Share', and this connection will now be accessible to other users.
  
Step3 - Log in to 'User A' Zoho Flow account. On the top right, you will see the list of organizations that 'A' is part of. From here, select the organization that you had invited them to. i.e. switch to Org B (to which UserA was invited)


 
Step4 - Now, from 'User A's account, in this same organization, connect CRM1 to Zoho Flow (Repeat Step 2). Provide the connection a name (UserA - OrgA), and click 'Authorize'. 
 
Step5 -  Once you connect the CRM1 account in this organization(i.e. Org B) and connection is established. Click 'Share', and this connection will now be accessible to other users.  

  1. To sync data from CRM1 to CRM2

Open the Zoho Flow 'Org B' where two connections are established for both Zoho CRM Organizations. Then, create a new flow.

1. Select Zoho CRM as the trigger. 
2. From the connections drop-down, select CRM1 connection (i.e., UserA - OrgA). 
3. Drop the Zoho CRM action required and select CRM 2 connection (i.e., UserB - OrgB). 
4. Map various data points that you need to pull from CRM1 to CRM 2. 
5. Save the flow and switch it on. 
 
This flow will now sync data from CRM1 to CRM2 automatically
  1. To sync data from CRM2 to CRM1

1. Select Zoho CRM as the trigger. 
2. From the connections drop-down, select CRM 2 connection (i.e., UserB - OrgB). 
3. Drop the Zoho CRM action required and select CRM 1 connection (i.e., UserA - OrgA). 
4. Map various data points that you need to pull from CRM2 to CRM1. 
5. Save the flow and switch it on. 

This flow will now move data from CRM2 to CRM1 automatically.

Example Image showing CRM Trigger & Action in flow

  1. Working Demo - Screencast


Idea
To simplify in an easier way, we have used direct trigger and actions for create/update purpose in common module entry level. Users can also use "Custom Function" block to search the existing record using unique fields from Source CRM Org and use a "Decision" block to create or update record in Destination CRM Org.
Notes
Note - This method can only be used for CRM Organizations which are in same DC. Since we do not support users across DCs, you could not invite user from other DC to your Flow account as of now.

C. Using Self-Client Method via API

Users can use CRM APIs to create/update records in other CRM Org using Self-Client method. This helps you to setup the seamless integration between two CRM Organizations. 
  1. Learn how to communicate with Zoho CRM across data centres?

-> Here, there are two Zoho CRM accounts. One is in US DC, and another one is in IN DC. To communicate with US DC CRM, the user with Zoho CRM API Access permission in US DC should generate a Grant Token using the Self Client method. 

-> Using a Grant Token, the user can generate Access and Refresh tokens. So, these tokens, Access and Refresh are the ones that are going to be useful for communicating with the US DC CRM account. 

-> An Access Token is a key to communicate with the respective CRM account, and the Refresh Token is used to generate a new access token, as the Access Token will expire within an hour.
  1. Permissions and Availability

Info
1) The users profile should have Zoho CRM API Access enabled.
2) The users profile should have Manage Automation enabled.
  1. Prerequisites from Zoho CRM under US DC
    1) Grant Token
    2) Access Token
    3) Refresh Token

Notes
Refer to the Overview and all the Steps related to OAuth Authentication in this Help Link, which will guide you in detail about how authentication works in Zoho which includes Grant, Access and Refresh Tokens.

      Configuration Setup

Step 1: Users from US DC CRM accounts with Zoho CRM API Access permission should navigate to Zoho Developer console to generate a Grant Token via the self-client method.

Step 2: Choose the Client Type as Self Client.

Step 3: Enter the required scope, time duration as 10 and scope description.

Step 4: Upon clicking Create, you will find Grant Token.

Step 5: Either you could use the other API execution console (i.e., Postman, Insomnia, etc.) to generate an Access and Refresh Token or you could use the code1 shared below to generate an Access and Refresh Token from CRM.

Notes
Generate an Access and Refresh Token within 10 minutes with the help of Grant Token, as Grant Token is valid only for 10 min maximum.
  1. Sample Deluge Script - Code1:
  1. accesstokenmp = Map();
  2. accesstokenmp.put("grant_type", "authorization_code");
  3. accesstokenmp.put("client_id", "1000.CHZ74KIIK1LFMZJ7K6073ZSD9TQ8RT");
  4. accesstokenmp.put("client_secret", "616dcf2104dc5e6a5e5921b9ad828b20308be5547c");
  5. accesstokenmp.put("code", "1000.fa1d4da1df80805c1a9a0dffe3e76af3.3898323428c16839635fb42c082cd300");
  6. response = invokeUrl [
  7. url: "https://accounts.zoho.com/oauth/v2/token"
  8. type: POST
  9. parameters: accesstokenmp
  10. ];
  1. Grant Token Video
  1. Different ways to generate Access and Refresh Tokens

    1) Developer Tools - eg., Postman, Insomnia
    2) Zoho Deluge Invoke URL task 
      -> Generating Access Token via Developer Tool (i.e. Postman, Insomnia, etc)



      -> Generating Access Token via Zoho Deluge Invoke URL Task


  1. Steps to deploy the custom solution in Zoho CRM IN DC
Create a Workflow in CRM IN DC account by providing the required details.

Set a trigger on Record Creation, provide a condition (if any) and use the below code2 in the Instant Actions of the Workflow.


      -> Sample Deluge Script - Code2:
  1. void automation.TBSolution()
  2. {
  3. refreshtoken = Map();
  4. refreshtoken.put("refresh_token", "1000.c10f1746037754011ed558e92f558f70.6a1c309c4c3715efca7************");
  5. refreshtoken.put("client_id", "1000.O466EKV1NQT0ZKHATWA***********");
  6. refreshtoken.put("client_secret", "1b74110de0dfc1156e00a3003037a2471*********");
  7. refreshtoken.put("grant_type", "refresh_token");
  8. //Refreshing the Access Token
  9. response = invokeUrl [
  10. url: "https://accounts.zoho.com/oauth/v2/token"
  11. type: POST
  12. parameters: refreshtoken
  13. ];
  14. accesstoken = response.get("access_token");
  15. mp = Map();
  16. datamp = Map();
  17. datalist = List();
  18. mp.put("Last_Name", name);
  19. datalist.add(mp);
  20. datamp.put("data", datalist);
  21. headersMap = Map();
  22. headersMap.put("Authorization","Zoho-oauthtoken " +accesstoken);
  23. //Creating a Leads record in US DC CRM account whenever a new Leads record created in IN DC
  24. response1 = invokeurl
  25. [
  26. url :"https://www.zohoapis.com/crm/v7/Leads"
  27. type :POST
  28. parameters:datamp.toString()
  29. headers:headersMap
  30. ];
  31. }
  1. Working Demo - Screencast


D. Using Serverless Function

Users can create a serverless function in OrgB and using API Key of the created serverless function, we can call the function from OrgA using Workflow Setup and pass the data payload to function in order to sync the same in other Org. This integration setup helps you to create or update records from one CRM Org to other CRM Org seamlessly.

Info
Refer to the following Custom Function Solution - Article to have a detailed Overview with steps to configure the same.


Quote
Custom Solution Created By

Email Parser Method - Harish K
Flow Method - Myself [Joshi]
Self Client Method - Hemanth Kumar L M

If you need any further clarifications, please don’t hesitate to contact partner-support@zohocorp.com.

Notes
Additionally, we kindly ask all Europe and UK Partners to reach out to partner-support@eu.zohocorp.com.