Migrating Zoho CRM to Bitrix24: where data is lost
Moving data from Zoho CRM to Bitrix24 breaks not during export but when entities are joined. A flat file loses what lives as separate modules in Zoho CRM: contact — company — deal relationships, assignees, linking tasks and notes to parent records.
Import restores these relationships by name or email address, and they are not unique — hence duplicate records during migration and cards without an owner.
The costliest loss is deal history. In the source system, stages are stored as transitions with dates and authors, while in Bitrix24 only the current stage arrives.
The deal seems to be there, but it is unclear when it moved through the pipeline, who managed it, and at which step it fell through — conversion reporting after migration resets to zero and cannot be restored from logs.
Attachments that were not transferred and orphaned records are a consequence of the same cause: the record ID changes during import, and a file, comment, or task remains without a parent.
Formally, the data is there; in practice, some cards are unreadable: the attachment cannot be opened from the deal, the task cannot be found in the contact.
Each loss point is closed by a separate step: first reference data and companies, then contacts, only then deals — with ID preservation and a mapping log. We explain how Zoho data migration proceeds without breaks and duplicates.
What migration provides: an end-to-end history of deals and relationships
When migrating from Zoho CRM to Bitrix24, the task is not to "pour records over" but to reassemble a connected model.
Contacts, companies, deals, tasks, and attachments in the source system are separate entities with foreign keys, and with an "as is" import, the relationships between them break.
That is why we migrate not tables but a graph: first reference data and companies, then contacts with linking, then deals, and only after that activities, comments, and files.
The practical effect is measurable.
An end-to-end deal history is restored almost completely: each deal retains its stage, assignee, transition dates, and correspondence — so end-to-end pipeline analytics is calculated on historical data rather than starting from zero on the switchover day. Before work starts, we show a report: "migrated / matched / requires decision."
The reduction in manual operations is a consequence of the same connectedness.
Managers get a single customer card instead of re-entering details and tasks, while typical steps — a task per deal stage, a reminder about the next touch, call logging — are handled by automation rules.
We separately close an entire class of failures: duplicate contacts and companies, breaks in contact — company — deal relationships, lost attachments. These are not one-off errors but a systemic risk of any "live" migration.
Matching rules normalize phones and addresses, merge duplicates by a set of attributes, and transfer files while preserving their link to the deal; after each stage, the number of records and relationships is reconciled.
Migration options: full transfer, phased, parallel
The choice between a full transfer, module-by-module phased migration, and parallel operation of two systems is determined not by the contractor's convenience but by how many manual reconciliations the department can withstand and whether writes to the current system can be paused. Below are the situations in which each mode is appropriate and what it imposes on timelines.
| Option | When it fits | Limitations |
|---|---|---|
| Full data transfer | Relationships between modules are simple, the data profile is uniform, and the department is ready for a write downtime window | One cutover attempt: the cost of an error in matching reference data and assignees is maximal |
| Phased migration by module | Many related entities — deals, invoices, tasks, correspondence history; control is needed at each step | Longer by calendar; at stage boundaries, key synchronization is required between the migrated and old parts |
| Parallel operation of two systems | The department cannot be stopped; a reconciliation period on live deals is needed | Double entry and request routing rules while both systems are active |
Where compatibility most often breaks
Migration without stopping the department is not a separate option but an execution mode: it is achievable both with a phased scheme and with a parallel one. Both share one limitation — manual reconciliation.
The more entities are migrated, the more "old value — new value" pairs have to be confirmed by eye.
In practice: first we migrate reference data and pipelines, then deals and tasks, and finally attachments, correspondence history, and automations tied to old IDs.
This way, at each step it is clear what exactly did not match, and a rollback affects one module, not the entire database.
Work order: from schema audit to system handover
We build the work order so that discrepancies are found before the final migration, not after. First we capture the actual schema, not the one described in documentation: custom modules, required fields, relationships, and scenarios that populate data themselves.
- Data schema audit — a list of entities with field types and fill rules, including those created by integrations: we migrate such relationships or replace them with native Bitrix24 tools.
- Field mapping — for each source object, we assign a field in Bitrix24: standard, custom, or reference data. Plus transformation rules: types, phone and address normalization, multiple values.
- Trial migration to a copy — data goes to a test environment with production settings. This reveals real conflicts: duplicates by phone, length overflows, broken deal-to-contact links.
- Reconciliation of exports — number of records per entity, checksums for key fields, and selected full cards. We attribute a discrepancy to a cause: a rule, a platform limitation, or an error in the source data.
- Resolving discrepancies and re-running — we fix the mapping, add duplicate merging, and migrate again until checksums show zero discrepancies.
- Final migration — in a write-stop window or with a catch-up of changes accumulated during migration. We keep the migration log: it shows what was loaded and when.
- System handover to operation — the administrator knows where the change history is, how to check relationship integrity, and how to make a copy before further edits.
Each stage is closed with an artifact: a mapping, a reconciliation report, a migration log. They show what was checked and what the readiness decision is based on.
Handover package: settings, migration register, policies
The handover package is not a folder with exports but working documentation your team can use to continue without us.
We assemble it in parallel with migration: every setting created in Bitrix24 goes into the description, and every decision about historical data goes into the policy. A month after launch, this package can be used to run a reconciliation and prove that no record was lost.
- Field and pipeline schema — which stages, required fields, and fill rules are configured, how they relate to the previous structure, and why some fields are merged while others are moved into reference data.
- Record migration register — a row-by-row list of migrated entities with old and new IDs, creation date, assignee, and reconciliation status. It lets you selectively check any deal or contact.
- Relationship map — how contact, company, deal, and tasks are linked after migration, where relationships were restored automatically, and where manual markup was required.
- Data access rules — roles, departments, and territories: who sees their own pipeline, who sees the consolidated picture, and how export and database extraction are restricted.
- Policy for working with history — what to do with comments, emails, and call records: where they are stored, how they are searched, and by what logic they are attached to the card.
- Settings documentation — a description of automations, fields, permissions, and integrations in the form in which they can be handed over to a new administrator.
The package remains with you in its original form and is updated when changes occur. If any item needs clarification, we go through it together with your team during handover.
Case: migrating deal and attachment history without downtime
The client — a distributor with a sales department of several dozen people — worked in Zoho CRM. The database had accumulated about 240,000 records: deals, contacts, tasks, and attachments to them.
The difficulty was not volume but relationships: some deals referenced contacts through custom fields, and correspondence history lay in attachments to comments, which are lost during a regular export.
What it was like before migration
A trial run on a copy of the database showed the cost of direct export: deal-to-contact relationships broke for almost 40% of records, attachments were not exported at all, and contact duplicates accumulated over the years collapsed into one profile. Manual reconciliation of such volume would take weeks of analyst work and inevitably miss items.
What it was like after
Migration proceeded in two loops: historical data was loaded in batches, while current changes went in short cycles, so the pipeline remained up to date throughout the work.
Attachments were exported programmatically and linked to the same cards; relationships were restored by internal IDs, not by name matching. Manual reconciliation was required for 1.5% of records — disputed duplicates and broken links.
The department returned to normal work two days after the start: downtime was not planned and was not needed; managers simply continued working deals in the new system.
The share of restored relationships was 97%, the volume of migrated records matched the source to the last row, and rollback to a backup remained possible right up to the final cutover.
How is migrating reference data different from migrating deals?
Reference data and settings are the system's backbone: pipelines and stages, users and roles, custom fields, counterparties, product catalog, templates.
Deals and emails reference them by IDs, so the backbone is migrated once and before the main flow — otherwise records will hang without an owner or lose their stage. Until it is fixed, the remaining steps do not start: this is a strict dependency between stages.
Data migration priorities are built around this dependency: first users and departments, then pipelines, stages, and sources, then counterparties and product items, and only after them deals and correspondence.
We make reference data migration idempotent: a repeated run updates the record by external key rather than creating a duplicate.
Migrating deal history is structured differently: it is a stream with attachments and correspondence, and checking it entirely in one run is risky.
We proceed in batches by dates or pipelines; after each batch we reconcile amounts, stages, and assignees, and resolve discrepancies before starting the next one. This scheme allows rollback — a batch is removed using the migration log without affecting already accepted data.
The cost of an error also differs: a failure in reference data spreads across all deals at once, so we check the backbone before loading history — on a test set and a copy.
An error in a deal is local: it is visible in a specific batch and is fixed selectively, without stopping migration.
Common technical questions about data migration
Migration is limited not by the number of records but by the difference in data models. Below are the questions that most often come up during coordination.
What happens to fields that have no counterpart in Bitrix24?
Nothing disappears silently: some fields go into custom fields, some into the record comment, and the rest we export as a table. We agree on the mapping before the start.
Are attachments and correspondence migrated for deals?
We place files in Bitrix24 storage and link them to the same deals and contacts; emails and comments go into the record feed with the author and date. Correspondence conducted in an external mailbox and not saved in the CRM cannot be restored.
How are company and contact relationships preserved?
The loading order is companies, then contacts, then deals, with linking by external IDs. A contact with several companies retains all links; duplicates by email and phone are resolved according to an agreed rule.
Is record change history migrated?
We do not migrate the edit log in its original form: its structure is tied to the previous model. We migrate the result — current values and comments. For reviewing old deals, we export the history as a separate archive.
Can we work in the old system after migration?
Yes, during the reconciliation period. We populate Bitrix24, reconcile the number and amounts of deals, attachments, and relationships, and keep the previous system in read-only mode. We close access after the reconciliation act.
Tell us about the task — we will come back with a migration plan
A data migration estimate is accurate when we see your environment from the inside, not from a description. To prepare for migration, it is enough to send a snapshot of the current system and answer a few questions — some items can easily be gathered together on a call.
- Pipeline and stage structure: which entities are involved (contacts, companies, deals, tasks), how they are related, which fields are required, and which duplicate each other.
- Volume of records per entity — how many rows, whether there are duplicates, empty relationships, and records without an owner. This determines the number of matching passes and the loading order.
- List and nature of attachments: files, documents, images, email attachments. It is important to understand types and size — not everything migrates one-to-one; some items require a separate decision.
- Requirements for history: whether we preserve deal dates and stages, correspondence, calls, comments, event authorship, and chronology in full or only the current state.
- Target structure after migration: which pipelines, fields, and assignees are needed for work, and which entities go to the archive.
- Access rules and roles: who owns the data and what confidentiality restrictions to consider during export.
- Desired timelines and cutover window — when it is acceptable to pause work in the current system for final reconciliation.
We will discuss the task and come back with a data migration estimate and migration plan: stages, checksum reconciliation order for each entity, rollback order, and the points where you confirm the result.
Usually half an hour of conversation and one data snapshot from Zoho are enough to specify the scope of work and timelines.

