CRM migration
Field-level mapping, validation, and rollback between Zoho CRM and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Zoho CRM
Source
Twenty CRM
Destination
Compatibility
10 of 11
objects map 1:1 between Zoho CRM and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Try the reverse
Overview
Moving from Zoho CRM to Twenty CRM is a structural migration: Zoho separates Leads, Contacts, and Accounts as distinct modules, while Twenty collapses those into Person and Company objects with a unified contact model. We split Zoho Leads and Contacts into Twenty Persons, map Zoho Accounts to Twenty Companies, and resolve Deals against the correct Company at migration time. Subform data (line items, related records) requires separate API extraction from Zoho because CSV exports drop these rows entirely. We use Twenty's GraphQL API for all writes, batching mutations and handling the metadata-driven schema discovery that custom objects require. Zoho Blueprints, workflow rules, and custom modules are configuration, not data; we document them for the customer's admin to rebuild in Twenty rather than migrate as code.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Source platform
Zoho CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Zoho CRM.
Destination platform
Twenty CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Twenty CRM.
Data migration guide
The complete Twenty CRM migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
Zoho CRM migration guide
Understand the data you're exporting from Zoho CRM before mapping it.
Destination checklist
Twenty CRM migration checklist
Pre- and post-cutover tasks for moving onto Twenty CRM.
Source checklist
Zoho CRM migration checklist
Exit checklist for unwinding your Zoho CRM setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Zoho CRM object lands in Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Zoho CRM
Lead
Twenty CRM
Person
1:1Zoho Leads map to Twenty Person records. We extract Lead_Status, Lead_Source, and any custom fields and store them as Twenty Person fields or custom fields created via the /metadata API before import. The Zoho Lead-to-Contact conversion logic does not apply in Twenty; all imported Leads become Persons directly without a conversion step.
Zoho CRM
Contact
Twenty CRM
Person
1:1Zoho Contacts map to Twenty Persons. The Contact-to-Account relationship in Zoho maps to the Person's relationship with a Twenty Company record. We sequence Company import before Person import so that the Company link resolves at insert time rather than requiring a follow-up update pass.
Zoho CRM
Account
Twenty CRM
Company
1:1Zoho Accounts map directly to Twenty Companies. We use the Account_ID as the external identifier for deduplication and preserve the account's industry, website, phone, address, and any custom fields. Multi-address accounts in Zoho are stored as separate address records; we collapse the primary address into the Company record and store additional addresses as custom fields or note attachments.
Zoho CRM
Deal
Twenty CRM
Opportunity
1:1Zoho Deals map to Twenty Opportunities. The Opportunity's link to a Company (Account) must resolve before Opportunity insert. We map Zoho's dealstage and pipeline to Twenty's pipeline stage field and handle multi-pipeline setups by creating separate pipeline configurations in Twenty before migration begins.
Zoho CRM
Product
Twenty CRM
Product (Custom Object)
1:1Zoho Products map to a Twenty Product custom object created via the /metadata API before migration. Product_Code, Unit_Price, and Quantity_Unit migrate as fields. Products must import before any Quote or Sales Order migration because line items reference products by ID.
Zoho CRM
Subform: Quote Line Items, Sales Order Line Items
Twenty CRM
Custom Object + Lookup
1:manyZoho nests line items as related records rather than inline fields. Standard CSV exports drop subform rows entirely. We issue separate API calls for each subform relationship (Quotes/Products, SalesOrders/Products), reconstruct the parent-child hierarchy, and upsert both layers into Twenty with the lookup resolved at insert time. If the source Zoho plan lacks API access, we alert the customer that subform data will require manual re-entry.
Zoho CRM
Task, Event, Call
Twenty CRM
Activity
1:1Zoho Tasks, Events, and Calls map to Twenty Activity records. We preserve the linked-to-record association by resolving the WhoId (Person) and WhatId (Opportunity, Company) references at migration time. Activity timestamps are set from the original Zoho created_at value, not the import date, to preserve the timeline ordering sales reps rely on.
Zoho CRM
Note
Twenty CRM
Note
1:1Zoho Notes migrate to Twenty Note records. We resolve the parent record link (Person, Company, or Opportunity) and write the note body as rich text. Notes attached to multiple records create multiple Note entries rather than a single shared note.
Zoho CRM
Attachment
Twenty CRM
Attachment
1:1Zoho attachments are stored as separate file records linked to parent modules. They do not appear in CSV exports and must be fetched via the Attachments API endpoint. We download files, upload them to Twenty's file storage, and create the attachment link record pointing to the parent Person, Company, or Opportunity. File size limits and storage provisioning are confirmed before migration begins.
Zoho CRM
Custom Module
Twenty CRM
Custom Object
1:1Zoho custom modules migrate to Twenty custom objects. We introspect the custom module's field metadata via GET /settings/fields in Zoho, create the equivalent Twenty object via the /metadata API, and then import the data. Schema varies per tenant; custom field types (picklist, multi-select, date, currency) are mapped to their Twenty equivalents. Custom module discovery is always the first step in the migration plan because downstream objects may have lookups to custom modules.
Zoho CRM
User (Owner)
Twenty CRM
User
1:1Zoho User records carry name, email, role, and territory. We extract Users during discovery and build an email-to-ID mapping table. At migration time, we either match by email to an existing Twenty workspace user or flag missing users for the customer's admin to provision before record import resumes. Inactive Zoho users assigned as record owners are reassigned to an active admin user to avoid orphaning records.
| Zoho CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Lead | Person1:1 | Fully supported | |
| Contact | Person1:1 | Fully supported | |
| Account | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Product | Product (Custom Object)1:1 | Fully supported | |
| Subform: Quote Line Items, Sales Order Line Items | Custom Object + Lookup1:many | Fully supported | |
| Task, Event, Call | Activity1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Attachment | Attachment1:1 | Fully supported | |
| Custom Module | Custom Object1:1 | Fully supported | |
| User (Owner) | User1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Zoho CRM gotchas
API access requires Professional tier or above
Subform fields do not export cleanly via CSV
API credit consumption is non-linear
Export download links expire in 7 days
Owner (User) assignments require pre-mapped user IDs
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and plan tier confirmation
We audit the source Zoho CRM account across plan tier (Free/Standard/Professional/Enterprise/Ultimate), API entitlement, module inventory (standard and custom), subform relationships, pipeline structure, workflow rules, and active user count. We confirm whether API access is available for bulk extraction or whether CSV-based methods are required. The discovery output is a written migration scope covering record counts per module, custom field inventory, subform dependency map, and a recommendation on which modules to migrate versus re-enter manually.
Metadata schema creation in Twenty
We create the destination schema in Twenty before any data import. This includes using the /metadata API to create custom objects matching Zoho custom modules, adding custom fields to standard Twenty objects (Person, Company, Opportunity) for any Zoho fields that have no direct equivalent, and configuring pipeline stage values to match the Zoho deal pipeline structure. Schema creation happens in a staging Twenty workspace for validation before production migration begins.
Data extraction from Zoho in dependency order
We extract Zoho data in dependency order: Users first (for owner mapping), then Companies, then Persons (Leads and Contacts with Company link resolved), then Opportunities (with Company link resolved), then Products, then Quote and Sales Order parents, then subform line items, then Activities, then Notes and Attachments. Subform data is extracted via separate API calls for each related-record table. API credit consumption is monitored and spread across multiple 24-hour windows when the volume approaches the source plan's credit limit.
Data cleansing and transformation
We transform extracted data before loading into Twenty. This includes splitting Zoho Leads and Contacts into Twenty Persons, mapping Zoho Account links to Twenty Company lookups, collapsing multi-address Zoho Accounts into primary plus custom fields, transforming picklist and multi-select values to match Twenty's field type constraints, and encoding validation for non-ASCII character sets. We generate a transformation log that documents every field mapping decision so the customer can audit the data changes.
Twenty import via GraphQL API
We import into Twenty using its GraphQL API with batched mutations. Each import phase (Companies, Persons, Opportunities, Activities, custom objects) runs sequentially and emits a row-count reconciliation report before the next phase begins. Subform line items import after parent records are committed so that lookup references resolve at insert time. We use exponential backoff on rate-limit responses and implement idempotent upsert logic using external ID fields to handle retry scenarios without duplicating records.
Cutover, validation, and automation rebuild handoff
We freeze Zoho writes during cutover, run a final delta migration of any records modified during the migration window, then enable Twenty as the system of record. We validate record counts, spot-check field mappings on 25-50 records per module, and confirm that activity timelines preserve chronological ordering. We deliver a written inventory of Zoho Blueprints, workflow rules, and custom modules that require manual rebuild in Twenty, with notes on any feature gaps between Zoho's automation engine and Twenty's current capabilities. Post-migration hypercare support is available as a separate engagement.
Platform deep dives
Zoho CRM
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Zoho CRM and Twenty CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Zoho CRM: Starter: 500 req/min | Professional: 2,500 req/min | Enterprise: 10,000 req/min, plus a credit-based system for complex queries (1–3 credits per COQL fetch).
Data volume sensitivity
Zoho CRM exposes a bulk API — large-volume migrations stream efficiently.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Zoho CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Zoho CRM to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Zoho CRM
Other ways to arrive at Twenty CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.