Skip to content

Run Dynamics 365 and Zoho Side by Side While You Move

A guide to two-way sync between Microsoft Dynamics 365 and Zoho, aimed at teams migrating from one to the other. It explains why a hard cutover is the riskiest way to move a CRM, how keeping both systems live turns the migration into a reversible process, how field-level mapping keeps sensitive columns from ever leaving Dynamics, what happens to documents and attachments, and how OAuth lets a distributed team work on records without anyone sharing a login.

Author
Ruben Burdin · Founder & CEO
Published
July 21, 2026
Read time
10 min read
Run Dynamics 365 and Zoho Side by Side While You Move
ARTICLE

Moving a CRM is not really a data problem. Exporting accounts and contacts out of Microsoft Dynamics 365 and loading them into Zoho is the easy part, and most teams get through it in a week. The hard part is everything around it: the sales team that cannot stop working for a weekend, the records that keep changing while you migrate, the fields that are not allowed to leave the old system, and the uncomfortable question of what happens if the new setup turns out to be wrong.

Those risks all come from the same assumption, that a migration is a single event with a before and an after. Two-way sync removes that assumption. If both CRMs stay live and stay in agreement, moving stops being a cutover and becomes a process you can run at your own pace and reverse if you need to.

A weekend cutover versus a live coexistence: one-shot moves risk everything at once, two-way sync keeps both CRMs editable with excluded fields staying put

This guide covers how that works in practice: what two-way sync actually means between these two systems, how to control which fields move, what happens to documents, and how access works for a team that is not all in one office. For the wider platform question, see the guide to choosing a Zoho integration platform.

Why the hard cutover is the risky option

The classic plan is a freeze: export everything on Friday, load it over the weekend, tell everyone to open Zoho on Monday. It concentrates every risk in the project into a window where nobody can work, and the failure modes are all expensive. A mapping mistake found on Monday means a restore. Records edited during the freeze are lost or have to be reconciled by hand. And the old CRM goes read-only immediately, so if something important turns out to be missing, you are recovering it from an export rather than a running system.

Comparison of a one-shot cutover against a two-way sync coexistence between Dynamics 365 and Zoho
A one-shot cutover concentrates every risk into one window. A live sync spreads the move out.

Coexistence changes the shape of the project. Both CRMs stay live and stay paired, so a team can move to Zoho when its workflows are ready rather than when the calendar says so. Finance can stay on Dynamics while sales works in Zoho, and both see the same customers. If something is wrong, you fix the mapping and the records reconcile, because neither side was ever frozen. The migration finishes when you turn the sync off, which is a decision rather than an event.

What two-way sync actually means here

The phrase gets used loosely, so it is worth being precise. Two scheduled exports pointed at each other are not a two-way sync. Without a way to tell which system a change came from, each export reads the other's writes as new changes and sends them back, so records ping between the two systems, duplicate, and drift. Any tool describing a pair of one-way jobs as bidirectional is describing that failure mode.

A real two-way sync tracks the origin of every change. When the engine writes an updated account into Zoho, that write is tagged, so it is not picked up as a fresh Zoho edit and pushed back to Dynamics. It also detects changes at the field level, so only what actually changed moves, and it resolves genuine conflicts, where the same field changed on both sides, under a policy you set rather than by letting the last write win.

Lifecycle of a record during a Dynamics to Zoho move: detected, checked against the mapping, mapped or held back, applied, with conflict and retry paths
Excluded fields stop at the mapping gate. Everything else is applied, with conflicts and retries handled.

The gate near the top of that path is the piece most relevant to a migration. Every change is checked against the mapping before anything leaves the source system, which is what makes selective migration possible rather than aspirational.

Leaving some fields behind, on purpose

Most CRM migrations carry at least one field that should not make the trip. A social security number or other national identifier, a bank detail, a case note with clinical or legal content. The usual compromise is to migrate everything and then lock the field down in the new system, which technically works and satisfies nobody, because the data did cross and now lives in two places instead of one.

Field-level mapping gives you the cleaner answer. Because the mapping is an allow list, an excluded column is never read and never forwarded, so it does not arrive in Zoho at all. The scope of the migration shrinks to what you deliberately chose, and the review question becomes easy to answer: the field stayed in Dynamics, and here is the audit log showing what did move. If you are evaluating vendors, ask for that live rather than on a slide. Excluding a field and proving it never lands takes about two minutes to demonstrate and tells you a lot.

Book a Stacksync demo: run Dynamics 365 and Zoho side by side while you migrate

Documents, and who gets to touch the records

Two practical items get discovered late in almost every Dynamics to Zoho project. The first is files. Record data and attachments are different problems: contracts, scans, and signed documents attached to a CRM record often physically live in a linked SharePoint library, and moving the record does not move the file. Plan the file migration as its own step, relinking each document to the matching Zoho record so references still resolve afterwards, and test it on real records early rather than assuming it comes along for free.

One-shot cutoverTwo-way sync coexistence
Working during the moveFrozen for the windowBoth CRMs stay editable
Switching teamsEveryone on the same dayOne team at a time
If the mapping is wrongRestore from a backupFix it and let records reconcile
Sensitive fieldsMigrated, then locked downNever leave the source system
Records changed mid-moveReconciled by handSynced automatically
Rolling backNot realisticBoth sides are still live

The same migration, run as an event or as a process.

The second is access. Teams working across offices or time zones need to operate on the same records, and the shortcut, one shared login passed around, is exactly what a security review will reject. OAuth solves it properly: each person connects with their own scoped grant, so access is granted and revoked individually and nobody handles a password that belongs to someone else. When a contractor rolls off, you revoke one grant instead of rotating a credential everyone depends on.

Move at your own pace

A Dynamics 365 to Zoho migration does not have to be a weekend with a rollback plan nobody believes in. Keeping both CRMs live and in agreement turns it into something you can start, pause, and reverse: teams switch when they are ready, records stay current on both sides, sensitive fields stay where they belong, and the project ends when you decide to turn the sync off.

Stacksync runs that sync in real time and in both directions, with field-level mapping and conflict resolution, an audit log of every change, and OAuth access per person. The same engine also connects Zoho to your MySQL database and to Snowflake, so the systems around the CRM keep up too. To walk through your own migration, book a demo.

Migrate to Zoho without a hard cutover using real-time two-way sync

FAQ

Frequently asked questions

Can Zoho and Dynamics 365 run at the same time?
Yes, and during a migration that is usually the safer option. With two-way sync, both CRMs stay live and every record is paired across them, so a change made in Dynamics appears in Zoho within seconds and a change made in Zoho is written back. Teams can move over one at a time instead of everyone cutting over on the same day, and nothing is stranded in the system you are leaving.
Can I exclude a sensitive field from the migration?
Yes. The field mapping acts as an allow list: only mapped fields are read and forwarded. If you exclude a column such as a social security number or another national identifier, it is never sent to Zoho at all, rather than being sent and then restricted on the far side. That is the answer a security or compliance review is looking for, because the excluded data never crosses the boundary.
What happens to documents and attachments?
Records and files are handled separately, and it is worth planning them separately. Record data, accounts, contacts, opportunities and custom entities, syncs field by field between the two CRMs. Files attached to those records, including documents that live in a linked SharePoint library, are migrated as their own step and relinked to the matching Zoho record so the reference still resolves after the move. Confirm the file side explicitly during scoping, because it is the part most often assumed and least often tested.
How do people access records without sharing login credentials?
Through OAuth. Each person or service connects with its own grant and its own scopes, so a distributed team can work on synced records without anyone passing around a password. Access is granted and revoked per user, which means offboarding someone is a revoked grant rather than a credential change that everyone else has to absorb.
Can I reuse the field mapping I already started?
Yes. If you already produced a list matching source field names to Zoho field names, that work carries into the sync configuration rather than being thrown away. The mapping is configuration, not code, so an existing sheet can be imported and adjusted. For a migration that has been paused and restarted, this is usually the single biggest saving.
Can Zoho handle a large database of records?
Zoho scales to large record counts, but the load pattern decides whether it holds up. Pushing millions of rows through the standard API in one burst will exhaust the daily credit budget, so the initial move should run as a throttled backfill and the ongoing sync should be field-level, moving only records that actually changed. Set up that way, a large member or case database stays current without a nightly full reload.

About the author

Ruben Burdin
Ruben Burdin
Founder & CEO

Ruben Burdin is the Founder and CEO of Stacksync, the first real-time and two-way sync for enterprise data at scale. Ruben is a Y Combinator alumni with a strong background in software engineering and business.

All posts by Ruben Burdin

About Stacksync

Stacksync powers real-time, two-way sync between CRMs, ERPs, and databases. Engineers sync data at scale and automate workflows, not dirty API plumbing.

Coworkers laughing in front of a laptop in a casual office setting

Your last integration took months.
Your next one takes a prompt.