CRM migration guide

The Definitive Guide to Migrating to Zoho CRM

Zoho CRM is a module-driven, edition-tiered CRM whose import success depends on pre-creating Modules, mapping picklist values exactly, and sequencing Layout-Pipeline-Stage before any deal row is loaded.

22 min read 9 sections Updated May 27, 2026
Zoho CRM
Contacts
Companies
Deals
Leads
Activities
Notes

Inside this guide

What you'll learn, section by section

  1. 01

    Why teams migrate to Zoho CRM

    The four shapes a Zoho CRM migration takes, and what makes the platform easier — or harder — than the category average.

  2. 02

    The Zoho CRM data model you need to map into

    Modules, Layouts, picklists, lookups, and the External-ID upsert keys you'll wire on every field — the destination schema decoded.

  3. 03

    Pre-migration prep — the work before you touch Zoho CRM

    What must be true on the source, the destination, and across the team before the first row hits the Data Migration wizard.

  4. 04

    Import mechanisms: UI wizard and Data Migration

    Two paths in, each with different limits and shapes. Picking the wrong one is how mid-migrations stall at the edition-tier ceiling.

  5. 05

    Mapping your data into Zoho CRM

    The longest section — because field mapping is where almost every Zoho CRM migration that fails actually breaks.

  6. 06

    The pitfalls that derail Zoho CRM migrations

    Specific failure modes — ranked by impact, each tied to the exact Zoho mechanism that breaks.

  7. 07

    Validation and cutover

    What to verify after the import job, in what order — and how to fail safely when something is wrong.

  8. 08

    Migration partners and tools

    Authorized Zoho Partners, iPaaS vendors, specialist migration shops — what each is good for and how to choose.

  9. 09

    Frequently asked questions

    The questions every Zoho CRM migration team works through before they sign the scope.

Section 01

Why teams migrate to Zoho CRM

The four shapes a Zoho CRM migration takes, and what makes the platform easier — or harder — than the category average.

Zoho CRM is a cloud customer relationship management application developed by Zoho Corporation, an India-based technology company founded in 1996 by Sridhar Vembu and Tony Thomas and headquartered in Chennai 1. Sales-side CRM is the historical core, now sold standalone and inside the broader Zoho One bundle alongside Desk, Books, Campaigns, Projects and forty-plus sibling apps.

The typical Zoho CRM customer is a 20-to-500-employee business buying on price and bundle economics — Standard starts around $14 per user per month, and Zoho One bundles forty-plus apps at around $45 per user per month 4.

Compared with HubSpot, Zoho positions on cost-per-seat and breadth of suite; compared with Salesforce, on a 90 percent cost-saving claim and lighter admin overhead; compared with Pipedrive, on a deeper module model with Custom Modules, Blueprint state machines, and Deluge scripting.

The shapes of migration that land on Zoho CRM tend to fall into four patterns. First, HubSpot exits, driven by the contact-tier pricing model — practitioners cite saving $12,000 per year by moving a 35-person team off HubSpot's $1,600/month tier 2. Second, Salesforce exits, where Zoho pitches a minimum 90 percent cost saving as the headline trigger 4.

Third, suite consolidation: replacing Pipedrive plus Mailchimp plus Zendesk with Zoho CRM plus Campaigns plus Desk inside Zoho One. Fourth, legacy ACT! and Maximizer replacements where the source is a desktop database. The Data Migration wizard ships native presets for Salesforce, Pipedrive, HubSpot, Highrise, Insightly, MS Dynamics and Maximizer 9.

What makes migrating *to* Zoho CRM easier than the category average is the Data Migration wizard itself — it auto-creates Modules that do not exist on the destination, auto-maps file columns to fields, and supports CSV, XLS, XLSX and vCard formats 22.

What makes it harder than the average is the edition-tier architecture, which gates Custom Modules, Sandboxes, Multiple Pipelines and most Custom Field types behind Enterprise or Ultimate, plus storage caps that bite mid-migration on smaller editions 37.

The picklist value model rejects values that do not exist on the destination dropdown, the Layout-Pipeline-Stage dependency rejects deal rows on any mismatch 152, and Created Time and Modified Time on most modules are system-managed and cannot be overwritten on import 102.

Workflows, Blueprint state machines, assignment rules and scoring rules do not import — they are rebuilt from documentation. Teams that scope the rebuild work up front finish on time; teams that assume parity do not.

Zoho's bundle economics get teams in the door; the edition-tier architecture and Layout-Pipeline-Stage coupling decide whether they stay on schedule.

Section 02

The Zoho CRM data model you need to map into

Modules, Layouts, picklists, lookups, and the External-ID upsert keys you'll wire on every field — the destination schema decoded.

Zoho platform Contacts Companies Deals Tickets Tasks Notes
Standard objects orbit the platform; every association can be many-to-many with optional labels.

Zoho CRM is built around Modules — the platform's term for what Salesforce calls Objects and HubSpot calls Objects. Each Module carries standard and custom fields, sits behind one or more Layouts, and connects to other Modules through Lookups and Multi-Select Lookups. Permission is governed by Profiles; record visibility by Roles and optionally Territories.

Before mapping any source field, you need to know which destination Module the row belongs in, which Layout it inherits, and which value will serve as its upsert key. The table below summarises the standard Modules a Zoho CRM migration will touch 10.

Object Stores Required on import Tier
Leads Unqualified prospects pre-conversion Last Name All editions
Contacts Individual people associated with Accounts Last Name All editions
Accounts Companies / organisations Account Name All editions
Deals Revenue opportunities in a pipeline Deal Name, Stage, Closing Date, Pipeline (if multi-pipeline) All editions
Tasks / Calls / Meetings Activity records on a parent Subject, Owner (and times for Meetings) All editions
Cases / Solutions Service tickets and KB articles Subject, Account All editions
Products / Price Books / Quotes / Sales Orders / Purchase Orders / Invoices Catalogue and quote-to-cash records Per-module — see field requirements All paid editions
Campaigns / Vendors Marketing program and supplier records Campaign Name; Vendor Name All editions
Custom Modules Customer-defined record types Schema defined first; per-field requirements Enterprise and Ultimate only

Records get matched by what Zoho calls duplicate check fields — fields marked with the *Do not allow duplicate values* property. Email is the common duplicate check on Leads and Contacts; Account Name on Accounts. Once marked unique, the import upsert flow uses it to decide insert-versus-update 43.

Deals, Cases, and Custom Modules have no natural unique key — create a custom single-line text field, mark *Do not allow duplicate values*, and populate from the source system's primary key. Zoho supports an explicit External ID field type that lets the upsert flow match against a foreign system's identifier without disturbing the internal Zoho ID 51.

When you upsert, Zoho checks the duplicate-check field set: if a match exists, the record updates; if none, it inserts. You can also pass Zoho's internal Record ID directly when re-importing your own export — the Record ID is the canonical primary key and bypasses duplicate-check matching entirely. Custom field types determine validation, storage and edition availability.

Field type Limits Notes
Single-line text 255 characters Plain string; can be marked unique 70
Multi-line text Up to 32,000 chars (large) Small / large variants; large is Enterprise+ 70
Number / Decimal / Currency / Percent Up to 16 digits Currency respects org multi-currency setup
Date / Date-Time Org timezone Date format set per locale; mismatch rejects import 22
Picklist (single-select) Per-edition count limit Display label and reference value can differ 67
Multi-Select Picklist Per-edition count limit Semicolon-delimited on import
Lookup One target Module One-to-many; populated by lookup name or ID
Multi-Select Lookup Enterprise and above Establishes many-to-many via hidden linking module
Formula Max 5,000 chars in expression 65 Return type fixed at creation; cannot be changed 70
Rollup Summary / Auto-Number / External ID Higher editions Rollup Summary is read-only post-creation 64

Relationships in Zoho CRM model parent-child through Lookup fields and many-to-many through Multi-Select Lookup fields, which silently create a hidden linking Module visible in *Developer Hub → Data Model*. A Contact has a Lookup to one Account; a Deal has Lookups to one Account and one Contact. There is no native cascade delete — deleting a parent does not delete children, which is a behaviour your workflow logic must reproduce if the source platform relied on it.

Custom Modules participate in Lookups the same way standard modules do, with the same upsert semantics. They are Enterprise and Ultimate only, and their schema, Layouts and unique-ID fields must exist on the destination before any record can be imported 11. Subforms — Zoho's pattern for related-list inline rows — are limited to one per module and migrate as child records, not parent-row payloads.

Section 03

Pre-migration prep — the work before you touch Zoho CRM

What must be true on the source, the destination, and across the team before the first row hits the Data Migration wizard.

The single best predictor of a clean Zoho CRM migration is how much work happens on the source side before the first import button is pressed. Zoho's Data Migration documentation devotes most of its prep checklist to source-side hygiene — file format, date format, mandatory-field coverage, drop-down value alignment — because the wizard rejects rows quietly on any mismatch and surfaces the reasons in Import History after the fact 22.

Zoho's Data Migration wizard is fast when the source file is clean and unforgiving when it isn't — pre-processing is where the time savings come from.

Treat the source export as raw material that must be shaped to Zoho's expected formats — emails lowercased, picklist labels converted to the values on Zoho's destination drop-downs, dates rewritten in the org locale format, currency stripped of symbols, and owners resolved to Zoho user emails or IDs.

Source-side prep

  • Audit and dedup the source database before export — Zoho's de-duplicate tool runs post-import and is slow on large datasets 156. Catch case-only email duplicates and trailing-whitespace duplicates in the source export, not after they land.
  • Convert picklist display labels to the picklist values that exist on the Zoho destination for every drop-down field — Lead Status, Lead Source, Deal Stage, Industry, every Custom Picklist. The Data Migration wizard rejects values not in the destination picklist and surfaces a row-level error in the result file 22.
  • Save every CSV as UTF-8 before upload. Zoho's troubleshooting docs explicitly call out character-encoding errors as the most common import failure mode — non-UTF-8 files produce garbled accented characters or full row rejection 113.
  • Stamp a stable external ID on every record in the source export — a UUID or the source platform's primary key — so re-runs and reconciliation are deterministic. This is the value you populate into Zoho's External ID field type on import 51.
  • Decide what is in scope for historical activities. Tasks, Calls and Meetings can be imported, but Created Time on these modules is system-managed in many cases, and the original activity date often must be carried in a custom *Activity Date* field 102.

Destination-side prep

  • Create a Sandbox from *Setup → Data Administration → Sandbox* on Enterprise or Ultimate. Sandboxes accept a Configuration-only copy or a Configuration + Sample Data copy — use the former to test schema and workflows, the latter to dry-run the full migration with representative volumes 7677.
  • Provision Users, Profiles and Roles before importing — owner assignment fails silently if a referenced user email does not exist in Zoho, and the row imports with the import-user set as owner instead.
  • Pre-create every custom field on the right Module and Layout with the right type — Field Type cannot be changed after creation (you cannot turn a Text field into an Integer later) 70.
  • Build Layouts, Pipelines and Stages before importing Deals — Pipelines belong to Layouts and Stages belong to Pipelines, and the import skips any row whose Layout-Pipeline-Stage triple is inconsistent 152.
  • Define Custom Modules, their unique-ID fields, and their Lookups before importing. Custom Module schemas must exist before records of that type can be created, and Custom Modules are gated to Enterprise and Ultimate editions 11.

People prep

Cutover only works if humans cooperate. Lock down a source-system freeze window — typically 24 to 72 hours — and communicate it to every department that touches the CRM. Train sales reps on Zoho's daily-workflow patterns, Deal stage transitions and Blueprint enforcement before go-live, not after. A clean Pipedrive-to-Zoho or HubSpot-to-Zoho migration of under 25,000 records can land inside one business day; a Salesforce-to-Zoho with Custom Modules and Blueprint rebuilds runs two to four weeks of elapsed time.

Section 04

Import mechanisms: UI wizard and Data Migration

Two paths in, each with different limits and shapes. Picking the wrong one is how mid-migrations stall at the edition-tier ceiling.

Zoho CRM exposes two load paths and the right one depends on dataset size, Module mix, and whether the load must be re-run idempotently. The native Import wizard handles most one-shot migrations under a few hundred thousand records. The Data Migration wizard adds source-CRM presets and auto-Module creation.

Native Import wizard

The per-Module Import wizard lives at the top right of any Module list view or under *Setup → Data Administration → Import* 22. It accepts CSV (UTF-8), XLS, XLSX and vCard (VCF). Each Module is imported as a separate file. The wizard maps columns to fields, lets you set assignment rules, choose Clone / Skip / Overwrite behaviour for duplicates, and run a sample before committing the full file.

Per-file size limits are edition-tiered: CSV files cap at 5 MB on Free, 10 MB on Standard and Professional, and 25 MB on Enterprise and Ultimate; VCF caps at 5 MB across all editions. Per-batch row limits are also edition-tiered — Zoho CRM Plus lists 10,000 records per batch as the import-data ceiling 39.

The right call: the Import wizard for one-shot loads under 100,000 records on standard Modules, or whenever you want a visual mapping review before commit.

Data Migration wizard

The Data Migration wizard, under *Setup → Data Administration → Data Migration*, is the larger-scope tool. It ships pre-built presets for Salesforce, Pipedrive, HubSpot, Highrise, Insightly, MS Dynamics, Maximizer and other Zoho CRM accounts, and supports direct connector-driven transfer from Pipedrive, Capsule, HubSpot, Insightly, Highrise, Bitrix and Bigin without intermediate file generation 9.

When a source Module does not match an existing Zoho Module, the wizard auto-creates the destination Module and maps the columns to its fields.

The wizard is the right pick when the source is one of the supported CRMs and the migration is largely one-shot. It is the wrong pick when the migration requires repeated dry-runs over weeks or reconciliation against a parallel source-of-truth.

Third-party staging tools

Tools like Fivetran, Airbyte, Stitch, Workato and Make sit between source and destination. They are used in two ways: (a) reverse-ETL where the source loads into a warehouse, gets transformed in SQL, then syncs into Zoho; and (b) staging-and-validate, where the tool handles type coercion and dedup before the result feeds the importer. Workato and Make are also common for ongoing post-migration sync, paired with Deluge.

Rule

Under 10,000 records on standard Modules → native Import wizard. 10,000–100,000 with a supported source preset → Data Migration wizard. Larger or repeatable loads → staged through a warehouse with an iPaaS layer feeding the importer.

Section 05

Mapping your data into Zoho CRM

The longest section — because field mapping is where almost every Zoho CRM migration that fails actually breaks.

SOURCE ZOHO CRM FirstName, LastName firstname, lastname AccountName company AnnualRevenue annualrevenue Owner.Email hubspot_owner_id CreatedDate createdate
Field-mapping flow — every source field resolves to a destination property or an explicit drop.

Mapping is where every migration earns its scars. Schema decisions in your mapping spreadsheet determine whether reports work on day two, whether Blueprint fires on day five, and whether sales trusts the data on day thirty.

Work Module by Module in import order: Users first, then Accounts (so Contacts and Deals can associate), then Contacts, then Deals, then Activities, then Custom Modules. The Data Migration wizard enforces this implicitly with a source preset; through the Import wizard, you enforce it by file order 26.

Leads vs Contacts vs Accounts

Zoho splits unqualified prospects (Leads) from qualified people (Contacts associated with Accounts). On migration, decide up front which source records become Leads and which become Contacts — a HubSpot Contact with a Lifecycle Stage of *Lead* is usually a Zoho Lead; a HubSpot Contact with *Customer* is usually a Zoho Contact with a populated Account Lookup.

The wizard does not split for you. Once a Lead is converted to Contact + Account + Deal in Zoho, the original Lead row is closed, not deleted.

Common source → Zoho Contact mapping

Source Destination
  • email
    Email (duplicate check field)

    Lowercased pre-import; mark as duplicate check field for upsert

  • first_name / last_name
    First Name / Last Name

    Last Name is mandatory in Contacts and Leads 10

  • phone
    Phone / Mobile

    Normalise to E.164; Zoho does not enforce a phone format

  • owner / account_owner
    Record Owner

    Map by Zoho user email; unresolved owners fall back to the importing user

  • account / company
    Account Name (Lookup)

    Import Accounts first; populate Lookup by Account Name or Account ID

  • created_at
    Custom Date-Time field (e.g., Legacy Created Date)

    Created Time on Contacts is system-managed and cannot be overwritten 110

  • source / utm_source
    Lead Source picklist

    Reference value must exist on the destination picklist 22

  • external system primary key
    External ID field

    Use this for upsert matching by external identifier 51

Accounts

Common source → Zoho Account mapping

Source Destination
  • company_name
    Account Name

    Mandatory; mark as duplicate check field to enable upsert

  • website / domain
    Website

    Free text; Zoho does not strip http(s) or www on match

  • industry
    Industry

    Picklist; map source labels to existing Zoho values

  • annual_revenue
    Annual Revenue

    Currency field; respects org base currency setup

  • parent account
    Parent Account (self-Lookup)

    Import parents first; populate Lookup in a second pass

  • territory
    Territory (Enterprise+)

    Territory hierarchy must exist before assignment

Deals, Layouts, Pipelines and Stages

Recreate every Layout, Pipeline and Stage in Zoho before importing Deals. Zoho's Multiple Sales Pipelines feature couples three things: a Deal belongs to a Layout, the Layout owns one or more Pipelines, and each Pipeline owns its own ordered Stages 152.

The import wizard checks the triple on every row and skips rows on either a Layout-Pipeline mismatch (the Pipeline does not belong to the chosen Layout) or a Pipeline-Stage mismatch (the Stage is not part of the chosen Pipeline) 152. Skipped rows surface in Import History with the reason; the wizard does not stop, it just leaves them out.

If you are consolidating multiple source pipelines, the cleanest approach is to keep them as separate Pipelines on a single Layout for at least 90 days post-migration, then merge once reporting has stabilised. Stage Duration history does not migrate natively — Zoho only records stage duration when a Deal exits a stage, so historical durations must be carried in custom *Days in [Stage]* numeric fields.

Common source → Zoho Deal mapping

Source Destination
  • deal_name / opportunity_name
    Deal Name

    Mandatory

  • pipeline
    Pipeline

    Mandatory when multi-pipeline; must belong to chosen Layout 152

  • stage
    Stage

    Must be a Stage on the chosen Pipeline — skipped on mismatch 152

  • amount
    Amount

    Currency; respects org base currency and per-deal currency override

  • close_date
    Closing Date

    Mandatory; format must match org locale date format 22

  • owner
    Deal Owner

    Map by Zoho user email; controls forecasting territory

  • primary_contact
    Contact Name (Lookup)

    Import Contacts first; Lookup populated by ID or name

  • account
    Account Name (Lookup)

    Mandatory in standard config; populated by Account Name or ID

Custom-field mapping strategy

Resist the urge to map every source custom field one-to-one. Zoho's custom-field count limit is edition-tiered, with Standard at the lowest cap and Ultimate at the highest — bringing dead fields across burns the budget you will need for legitimate new requirements 62. Migrate only the fields used by an active process or report in the last 12 months.

For picklist fields whose source values do not match the destination, either: (1) extend the destination picklist with the missing values through *Setup → Customization → Modules and Fields*, (2) collapse adjacent values during transform, or (3) introduce a parallel custom picklist that holds the legacy value verbatim.

Formula fields do not import as data — Zoho recomputes them on-platform from the formula expression, so the source formula logic must be rebuilt in Zoho's formula syntax (Abs, Ceil, Floor, If, Concat, etc.) under a 5,000-character expression limit 65.

Historical activities — Tasks, Calls, Meetings, Notes

Zoho stores Tasks, Calls and Meetings as their own Modules, related to the parent Lead, Contact, Account or Deal through a Related-To Lookup. On import, you build a multi-file load: first the parent records, then a separate activity file per type that carries the parent Record ID or unique identifier in the *What ID* / *Who ID* / *Related To* column.

The activity's *Activity Date* / *Due Date* / *Start Time* fields accept the original timestamp from the source — those are user-editable, unlike Created Time 8290.

Notes import via a dedicated file mapped to the Notes scope with a parent-Module reference and a parent Record ID. The Note title and content fields support rich text as of mid-2025 83, so HTML-flavoured note bodies can be brought across with a sensible amount of formatting preservation.

Historical emails are the hardest piece: there is no native bulk-email-import wizard, and practitioners typically use third-party services or build a custom Deluge function to attach historical messages per record 86.

Files and attachments

Attachments do not import in the CSV flow. The supported path is per-record attachment, associating a binary with the parent record. The per-record attachment cap is 100 MB total across all files, with individual file size capped at 10 MB per file via attachment 91. Email-template attachments cap at 10 files totalling 3 MB 91.

File storage itself is now powered by Zoho WorkDrive on new orgs, with edition-tied storage allowances that you can extend by paying for additional WorkDrive capacity 100.

For large attachment estates (hundreds of GB), the pattern most teams adopt is: keep originals in S3, Google Drive or WorkDrive, store a deep link in a custom URL field on the Zoho record, and only inline-upload the most recent or most-referenced subset. The Reddit thread on the historical 4 GB attachment cap is a forcing function for this design 99.

Audit trail, ownership and original timestamps

Zoho's standard Created Time and Modified Time fields are system-managed on most Modules and cannot be overwritten on import — they stamp to the moment the row was processed 110102. To preserve the original audit trail, create custom Date-Time fields *Legacy Created Date* and *Legacy Modified Date* on every Module and populate from the source export, then rewrite historical reports to filter on the legacy fields.

Record ownership during import works through a Field Mapping column on Owner — Zoho resolves the value against existing user email or user ID; rows whose owner cannot be resolved silently fall back to the importing user. Pre-provisioning all users and adding their emails to the source export's Owner column is the only reliable defence.

Account-level Audit Log captures Add, Update and Delete actions on records, plus configuration changes to Workflows, Profiles and Layouts. Administrator and CEO roles access the full log; other users see only own and sub-ordinates' actions 128. Audit log export covers up to the last three years by default 129.

CRM-specific: deal stage history, Blueprint, scoring, Deluge

Deal stage history does not migrate. Zoho captures stage duration only when a Deal exits a stage, which means historical *Days in Stage* and stage-entry timestamps must be carried in custom Date-Time fields per stage (Stage 1 Entered, Stage 2 Entered, etc.) and back-filled from the source export.

Blueprint state machines do not import. Recreate the source's process gates as Blueprint transitions in *Setup → Process Management → Blueprint*, mapping the source's stage-permission rules to Blueprint *Transition Settings*. The same applies to Scoring Rules, Assignment Rules and Workflow Rules — rebuild from documentation rather than trying to migrate accumulated outputs.

Email and calendar sync (Zoho Mail, Gmail, Outlook) is set up per user under *Settings → Channels → Email* and *Calendar Sync* in calendar.zoho.com 151 *after* users are provisioned. Do not enable it during the import window or you will get a flood of duplicate emails as the connector backfills against the same contacts you are loading.

Deluge custom functions are the in-platform scripting layer — they do not import, but they are the right place to write the post-migration glue logic (de-dup loops, batch-tagging, legacy-ID lookups) that pure import flows cannot express.

Section 06

The pitfalls that derail Zoho CRM migrations

Specific failure modes — ranked by impact, each tied to the exact Zoho mechanism that breaks.

High impact

Layout-Pipeline-Stage mismatch silently skips Deal rows

Zoho's Multiple Pipelines model couples three settings: a Deal belongs to a Layout, the Layout owns Pipelines, and each Pipeline owns Stages 152. The import wizard validates the triple per row and skips rows on any mismatch — Layout-Pipeline mismatch or Pipeline-Stage mismatch — without aborting the load. Skipped rows surface in Import History after the fact. Build the mapping table source-stage → Layout + Pipeline + Stage explicitly and validate against the wizard's sample step before committing the full file. 152

High impact

Created Time and Modified Time stamp to import day

Standard Created Time and Modified Time on most Modules are system-managed and cannot be overwritten during import 102110. Teams discover this on day two when reports filtered by *Created Date* return everything stamped to the import date. The mitigation is to create custom Date-Time fields *Legacy Created Date* and *Legacy Modified Date* on every Module, populate them from the source export, and rewrite all historical-period reports to use the legacy fields rather than the system fields. 102

High impact

Edition-tier storage and feature ceiling discovered mid-migration

Zoho's record-storage caps are edition-tiered — Free 5,000 records / 10 MB, Standard 100,000 / 200 MB, Professional 10 GB / 5 million records, Enterprise 10–15 GB / 5–7.5 million records, Ultimate up to 30 GB / 15 million 37. Custom Modules, Sandboxes, Multi-Select Lookups and Multiple Pipelines are gated to Enterprise and above. Teams that buy Standard for low monthly cost discover mid-import that historical activities push past 100,000 records and the load halts. Pick the edition against your full migrated volume, not your live working set. 37

High impact

Picklist value rejected because the destination drop-down does not list it

Zoho's picklists store a display value and a reference value that can differ 67. The Data Migration wizard rejects rows whose picklist value does not exist on the destination drop-down, returning a per-row error in Import History 22. Extend the destination picklist with every value the source contains before import — through the UI under *Setup → Customization → Modules and Fields* — or collapse adjacent source values during transform. 22

High impact

Owner falls back to import user on unresolved email

Zoho resolves the *Record Owner* column against existing user email or user ID at import time; rows whose owner email is not yet a provisioned Zoho user silently import with the import-running user as owner, not the intended owner. The downstream effect breaks owner-based workflows, assignment rules and forecasting territories. Pre-provision every user (including deactivated ones from the source if you need their historical attribution) before the first import row goes in.

Medium impact

Character encoding corruption on non-UTF-8 CSV

Zoho's troubleshooting documentation explicitly calls out character encoding as the most common import failure mode — non-UTF-8 CSVs produce garbled accented characters, mojibake on Asian-language records, or full row rejection 113. Excel saves CSVs as Windows-1252 by default on Western locales and as Shift-JIS or GBK on Asian locales. Always export source data as UTF-8 explicitly (in Excel: *File → Save As → CSV UTF-8*), and verify a sample row through a hex viewer before bulk upload. 113

Medium impact

Attachment 100 MB per-record cap silently truncates large estates

Zoho caps total attachments per record at 100 MB and per individual attachment at 10 MB 91. Migrations from Salesforce or HubSpot, where attachment caps were looser, discover this when contracts, signed PDFs and call recordings get rejected. The mitigation is to migrate only the most recent or most-referenced subset inline and store the rest in S3, Google Drive or Zoho WorkDrive with a deep-link custom URL field on the parent record 100. 91

Low impact

Regional data centre cannot be flipped after account creation

Zoho operates regional data centres for US, EU, India, Australia, China and Japan, and accounts are pinned to a region at signup. There is no self-serve cross-region migration — Zoho Support runs it as a ticketed operation 16. If your migration is into an account already created in the wrong region, plan for the regional migration first, or you will move all your records twice. Always check the org's data centre under *Setup → Company Settings* before the first row goes in. 16

Section 07

Validation and cutover

What to verify after the import job, in what order — and how to fail safely when something is wrong.

1 Read-only Source goes write-frozen 2 Final delta Export incremental changes 3 Import Load into Zoho 4 Validate Reconcile + spot-check 5 Cut over Users on new system
Cutover sequencing — five gated phases between source read-only and full user access.

Validation is the bridge between the import finishing and users being allowed in. The pattern that works on Zoho is three stages: a Sandbox dry-run on 5–10 percent of records with stakeholder spot-checks; a production load with real-time monitoring of Import History per Module; and a 30-day post-migration data-quality audit. Department reps verifying their own records is the most reliable signal — they know what *right* looks like.

Build a reconciliation queries spreadsheet that compares source and destination on each count. Anything outside a 0.5 percent variance gets investigated before users get login access.

  • Total records per Module imported vs source — Import History under *Setup → Data Administration → Import History* lists added, updated and skipped counts per file for 60 days post-import 122.
  • Total Deals per Pipeline per Stage vs source, plus sum of Amount per Pipeline — a non-trivial currency variance usually signals a stage-mapping error or a number-format drop during transform.
  • Total activities per Module (Tasks, Calls, Meetings) imported vs source — and a date-bucketed comparison to confirm Activity Date and Start Time round-tripped.
  • Lookup integrity per Module pair — count Contacts with a populated Account Lookup and compare against the source-derived expected count.
  • Owner distribution — group by Record Owner and confirm no Module landed with the import-running user owning the majority of records (the silent fallback signature).
  • Duplicate-check field integrity — count distinct Email on Contacts and Leads, distinct Account Name on Accounts; any duplicates indicate the dedup transform missed cases that Zoho's import then merged.

On top of reconciliation, run a manual spot-check protocol: pick 30 random records across Modules and verify each field against the source UI. Trace the full Lookup graph on five high-value Deals — Contact, Account, related Tasks, Calls, Notes. If a discrepancy shows up in three or more of the 30, halt the load, fix the root cause, and re-import by Record ID or External ID.

Zoho ships an Undo Import option directly inside Import History — entries from the last 60 days expose an Undo action that reverses the import for that file 122. The catch is that detailed undo metadata (added / updated / skipped lists) is retained for only 7 days after the import 122, so any rollback decision needs to happen inside that window.

After 7 days, your fallback is the same as on any CRM: export everything before the import, stamp every imported row with an *Import Batch ID* custom field, and bulk-delete by that batch ID if catastrophe strikes.

Recycle Bin and Restore sit alongside Undo Import: deleted records can be restored individually or in bulk for 60 days before permanent purge. Audit Log under *Setup → Security Control → Audit Log* tracks every Add, Update, Delete action and is exportable for up to three years of history 129.

Cutover sequencing: (1) source goes read-only; (2) final delta export captures everything that changed during the test-import window; (3) delta is imported via the same Data Migration flow; (4) reconciliation runs against the delta; (5) users get login access and a 48-hour hyper-care window; (6) source decommission is scheduled for 30 to 90 days out, never the same day.

Section 08

Migration partners and tools

Authorized Zoho Partners, iPaaS vendors, specialist migration shops — what each is good for and how to choose.

The Zoho Partner Program credentials Authorized, Advanced and Premium Partners through certifications, customer count and revenue tiers, and exposes them through the Find a Zoho Partner directory at zoho.com/partners 141. For Zoho CRM migrations specifically, partners with explicit Salesforce-to-Zoho, HubSpot-to-Zoho or ACT!-to-Zoho practices tend to ship cleaner than generalist implementation shops.

Zoho also runs an in-house migration assistance team at [email protected] that handles complex Salesforce or Pipedrive migrations directly, often at no incremental fee on Enterprise or Ultimate contracts 60. The trade-off is throughput — the in-house team is best for clean source schemas and lighter customisation; deeper Custom Module work, Blueprint rebuilds and historical activity preservation tend to land with the certified-partner channel.

On the ETL and iPaaS side, Fivetran, Airbyte, Stitch, Workato, Make and Integrate.io all sit alongside Zoho CRM migrations. Their role is rarely the migration itself — it is the staging layer that lands source data into a warehouse, the transformation layer that converts picklist values and resolves owner emails, and the ongoing-sync layer that takes over once the one-time migration is complete.

Make and Workato are common picks where the migration is bundled with workflow rebuilds; Fivetran and Airbyte are more common where the warehouse is the long-term source of truth.

Managed-migration cost ranges vary widely. A clean Pipedrive-to-Zoho or HubSpot-to-Zoho move of under 25,000 records with no historical activities and standard Modules only often lands in the $2,500–$8,000 range with a setup fee plus per-Module pricing. A Salesforce-to-Zoho project with Custom Modules, Blueprint rebuilds, historical activities and integration re-pointing typically runs $20,000–$100,000, with the upper end driven by record count, custom-field complexity, historical-data depth, and the number of integrations that need rebuilding rather than re-pointed.

For teams that want to outsource the migration end-to-end, FlitStack specialises in Zoho CRM migrations and handles the Layout-Pipeline-Stage sequencing, picklist-value alignment, External ID upsert wiring, Created-Time-to-Legacy-Date custom-field pattern, owner-resolution pre-checks, and the reconciliation and spot-check validation described in Sections 5 and 7 of this guide. Pricing is fixed-fee based on record count and source platform, with separate line items for Custom Modules, historical activity depth and Blueprint rebuilds so the scope is transparent before signature.

This is one of several legitimate paths — the right choice depends on whether the team wants a Premium Partner, Zoho's in-house migration team, an iPaaS-first approach, or a specialist vendor. Explore FlitStack →

Section 09

Frequently asked questions

The questions every Zoho CRM migration team works through before they sign the scope.

References

Sources

  1. 1 Zoho CRM (application) — Wikipedia
  2. 2 We ditched HubSpot at $2M revenue and saved $12K/year — r/CRMSoftware
  3. 4 How to Migrate from Salesforce to Zoho CRM — zoflowx
  4. 9 Data Migration: An Introduction — Zoho CRM
  5. 10 Standard Modules & Fields — Zoho CRM
  6. 11 Custom Modules — Zoho CRM
  7. 16 Zoho One Changes have taken my business offline — r/Zoho
  8. 22 Importing Data — Zoho CRM
  9. 26 Importing Into Zoho CRM — Zoho Community
  10. 37 Edition-wise Data Storage limits in Zoho CRM
  11. 39 Feature Availability — Zoho CRM Plus
  12. 43 Upsert Records — Zoho CRM
  13. 51 Upsert Records Using External ID — Zoho CRM
  14. 60 Migrating Data — Zoho CRM ([email protected])
  15. 62 Zoho CRM Feature Availability and Limits
  16. 64 Rollup Summary fields — Zoho CRM
  17. 65 Creating Formula Fields — Zoho CRM
  18. 67 Picklist Values — Zoho CRM
  19. 70 Types of Custom Fields — Zoho CRM
  20. 76 Zoho CRM Sandbox Testing Environment
  21. 77 Creating and Using Sandbox — Zoho CRM
  22. 82 FAQs on Activities (Calls, meetings and tasks) — Zoho CRM
  23. 83 Rich Text For Notes in Zoho CRM
  24. 86 Import past emails into Zoho CRM — Zoho Community
  25. 90 Adding history for events — Zoho Community
  26. 91 Attachment limits — Zoho CRM
  27. 99 ZohoCRM Attachment Storage — r/Zoho
  28. 100 Manage File Storage in Zoho CRM (WorkDrive)
  29. 102 Import Created Time and Modified Time — Zoho Community
  30. 110 Zoho Create Date workaround — HubSpot Community
  31. 113 Troubleshooting Data Import and Export — Zoho CRM
  32. 122 Viewing Import History — Zoho CRM
  33. 128 Monitoring Audit Logs — Zoho CRM
  34. 129 Export Audit Log — Zoho CRM
  35. 141 Find a Zoho Partner — Zoho
  36. 151 Zoho CRM Calendar Sync setup — Zoho Community
  37. 152 Multiple Sales Pipeline — Zoho CRM
  38. 156 Merging Duplicate Records — Zoho CRM

Need help running this migration?

FlitStack AI runs Zoho CRM migrations end-to-end.

Fixed-fee pricing, a hands-on migration engineer, full field mapping and validation. The work described in this guide — done for you.