Two-CRM Migration
An e-commerce group acquired a second brand and needed both CRMs merged into one Zoho instance without losing a single contact, deal or note — and without a single hour of downtime.
Client overview
A mid-market e-commerce group operating a DTC brand and a wholesale channel, which acquired a second, similarly-sized brand. Both companies ran independent Zoho instances with overlapping customers, active deals and years of support history — none of it reconciled.
The challenge
Two brands, two CRMs, 1.4 million contact and deal records — many partially duplicated across both systems. The business couldn't afford downtime during its peak sales season. Previous migration attempts had failed because of custom field conflicts and Deluge scripts that only one person on the team understood.
Objectives
- Merge both CRMs into a single Zoho instance with zero downtime
- Deduplicate 1.4M contact and deal records across the two source systems
- Preserve every note, deal and automation with a full audit trail
- Establish one canonical field schema so this problem doesn't recur after the next acquisition
The solution
Field mapping & deduplication
Exported every object from both CRMs and ran a Python deduplication pass using email, phone and company name as match keys. Built a canonical field map resolving 47 conflicting custom field names into 31 clean properties.
Staging environment dry-run
Stood up a Zoho sandbox and ran three full migration dry-runs over two weeks. Each pass caught edge cases — unicode characters breaking Deluge scripts, timezone offsets on deal close dates, association limits on the target plan.
Delta-sync bridge
Built a PostgreSQL delta table that tracked every record change in the source CRMs during the migration window. On cutover night, applied the delta in under 90 seconds — zero records lost, zero duplicates created.
Post-migration validation
Wrote 200+ automated checks that ran immediately post-cutover: record counts, association integrity, workflow trigger counts, user permission sets. Green across the board before handing back to the team.
Technical architecture
Key features delivered
- Canonical field map resolving 47 conflicting custom fields into 31 clean properties
- Python-based deduplication using email, phone and company-name matching
- Real-time delta-sync bridge applied at cutover to catch last-minute changes
- 200+ automated post-migration validation checks covering data and permissions
- All Deluge automations rebuilt and documented — no single-person black boxes
- Sales-team data access preserved and reconciled across both legacy orgs
Results
- 1.4 million records migrated with 99.8% data accuracy verified against source.
- Zero downtime — the cutover window was a Sunday night, back online before Monday standup.
- Duplicate contact rate dropped 40% versus the combined pre-migration state.
- All Deluge automations rebuilt, documented and tested — no black-box scripts left behind.
Challenges
47 conflicting custom fields
Both CRMs had years of one-off custom fields with overlapping meanings. Resolving this required sitting with both sales teams to agree on 31 canonical properties before any data moved — a mapping exercise, not just a technical one.
Unicode and timezone edge cases
The first dry-run silently corrupted a handful of records with non-ASCII characters in Deluge scripts, and deal close dates shifted a day on records near midnight UTC. Both were caught because dry-runs were treated as seriously as the real cutover.
Zero-downtime constraint during peak season
The business could not tolerate a maintenance window. The delta-sync bridge — tracking every source-system change during the migration and replaying it at cutover — made a "big bang" migration behave like an incremental one.
Lessons learned
- Treating dry-runs as real dress rehearsals (not smoke tests) is what surfaced the unicode and timezone bugs before they hit production.
- Field mapping is a negotiation between teams as much as a data problem — get agreement before writing migration code.
- A delta-tracking table turns a risky single-shot migration into something closer to a reversible, incremental one.
Two years of a deferred, feared migration were completed in eight weeks with no lost data and no downtime. The combined company now runs on one CRM with one schema, and future acquisitions have a documented playbook to follow instead of starting from scratch.
Relational RevOps Build
Need something like this built?
Need help implementing Zoho, AI automation or custom integrations? Tell me where the friction is — I'll map the system and hand it back clean.