Monday CRM to Zoho CRM migration is a data-model translation problem. CSV works for small flat datasets; API-based migration is the only safe path for preserving Account → Contact → Deal relationships at scale.
There is no native migration path from Monday CRM to Zoho CRM. Monday stores everything as boards, items, and Connect Boards links — a flexible spreadsheet-like structure — while Zoho CRM enforces a relational schema with validated lookup fields between Accounts, Contacts, and Deals. CSV exports strip Connect Boards relationships entirely, making manual rebuilding error-prone at scale. API-based migration is the only safe path for preserving Account → Contact → Deal chains and activity history. Every migration requires managing Monday's complexity-point rate limits, Zoho's daily credit system and Bulk Write constraints, and loading records in strict dependency order to prevent silent relationship loss.
Read this first
Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.
Monday's API is GraphQL-based, and personal token permissions mirror the user's UI access
If your Monday token user cannot see a private board, the extractor won't see it either. Zoho CRM uses OAuth 2.0 plus REST and Bulk APIs.
Content types in the bottom three rows (Workdocs, automations, timeline/Gantt views,
Content types in the bottom three rows (Workdocs, automations, timeline/Gantt views, subitems) are either abandoned or require custom structural work in Zoho. Budget for these explicitly — they are not covered by a standard field mapping pass.
CSV exports from Monday CRM flatten Connect Boards links into text strings (or blanks)
You'll need to manually rebuild Account → Contact → Deal relationships in Zoho using VLOOKUP-style matching on email or company name. For anything beyond a few hundred records, this becomes error-prone and time-consuming.
Some third-party posts quote older Monday complexity ceilings
Verify rate limits against current official API documentation before planning throughput. The numbers have changed over time.
Zoho's token endpoint regional URLs differ by data center
accounts.zoho.com (US), accounts.zoho.eu (EU), accounts.zoho.com.au (AU), accounts.zoho.in (IN). Using the wrong regional endpoint returns an AUTHENTICATION_FAILURE error even if your credentials are correct. Match the token endpoint to the data center where your Zoho org is hosted.
Build error logging into every API call
Log the Monday item ID, target module, lookup key, phase, raw vendor error, and retryability. This lets you replay failed records without re-running the entire migration.
Zoho's recycle bin retains deleted records for 60 days
Records in the recycle bin still count against your module record limits until permanently deleted. After a rollback, empty the recycle bin before re-running the migration if you are near edition limits.
This is a simplified outline
A production migration script needs OAuth token refresh logic, exponential backoff for rate limits, comprehensive error logging, a dry-run mode that validates transforms without writing to Zoho, and retry queues for failed records.
All API-specific numbers in this guide — credit allocations, complexity limits, row caps,
All API-specific numbers in this guide — credit allocations, complexity limits, row caps, concurrency limits — are verified against vendor documentation at time of publication. API limits change. Verify current values against the Monday API documentation and Zoho CRM API limits documentation before planning throughput.
The runbook
Work top to bottom. Tick steps as you go — your progress is saved in this browser.
01 Discovery Agree scope, pipeline design and success criteria before touching data.
Objective A scope covering every object in the revenue model, with sales leadership signed up to the pipeline design.
Keep these open
-
Inventory every object in monday CRM
Count accounts, contacts, leads, deals or opportunities, activities, notes, emails, files, products and quotes. Activity and email history is usually the largest object by an order of magnitude and the one people forget to size.
Data Profiler Get real record counts instead of estimating from memory -
Map the current pipeline and agree the target model
Document every pipeline, stage, probability and required field, then agree the Zoho CRM model with sales leadership. Migrating a broken pipeline faithfully is a wasted opportunity; redesigning it mid-migration is a wasted migration.
Stage changes alter historical conversion rates. Agree how you will restate reporting before you change the model.
-
Catalogue integrations and automation
List every system touching monday CRM: marketing automation, quoting, billing, ERP, data enrichment, dialler, BI. Each is a separate cutover task with its own owner, and each can silently write bad data into your new CRM.
-
Capture the reporting that must survive
Interview the people who actually live in the dashboards — forecast, pipeline coverage, rep activity, cohort conversion. Every one of these needs the underlying fields to migrate, which frequently expands the scope.
-
Build the business case and pick the go-live date
Model licence delta, implementation effort and productivity dip. Then choose the date deliberately: mid-quarter is disruptive, quarter-end is worse. Most teams land on the first week of a new quarter.
COI & ROI Calculator Build the 36-month business case you will need for sign-off -
Import automation trigger limit
Zoho only displays the option to trigger automation and process management if there are fewer than 10,000 rows in the import file. If your import exceeds 10K rows, workflows won't fire automatically.
-
Record count comparison
Total items per Monday board must match total records per Zoho module (minus intentionally excluded records).
monday CRM → Zoho CRM specifics
- Enterprise, 50K+ records, custom objects, zero-downtime
- → Managed service or dedicated engineering team
- Big bang
- Everything moves at once. Simpler, but higher risk. Requires a maintenance window.
- Parallel run
- Both systems live simultaneously during transition. See Why Running Two CRMs in Parallel Beats a Hard Cutover for the trade-offs.
- Bulk Write field gaps
- Formula fields, Auto Number, Created/Modified timestamps, Tags, and Campaign associations cannot be set via Bulk Write. Timestamps will reflect import time, not original creation time, unless you use a custom DateTime field.
- Concurrency limits
- Zoho limits simultaneous API calls per org per app. The sub-concurrency limit is 10 for all editions.
Don't move on until
- Object counts confirmed for accounts, contacts, deals and activities
- Target pipeline and stage model agreed with sales leadership
- Reporting requirements captured from the people who use the reports
02 Data Audit CRM data is usually dirtier than anyone expects. Find out how dirty.
Objective A profiled export with duplicates, ownership gaps and relationship integrity all quantified and triaged.
Keep these open
-
Export and profile every object
Profile null rates, distinct values and type consistency across all objects. Pay attention to fields sales reps were supposed to fill in: an 80% null rate on a field your forecast depends on is a business finding, not a data one.
Data Profiler Profile the monday CRM export for nulls, outliers and type drift -
Quantify duplicates and agree the merge policy
Measure duplicate accounts (same company, different spellings and suffixes) and contacts (same email, or same person at a renamed company). Agree survivorship rules before merging: which record wins, which fields, and what happens to the activity history on the loser.
Merging before you have agreed survivorship rules destroys history irreversibly. Decide first, merge second.
Data Cleaner Strip empty rows, stray whitespace and dead columns -
Verify relationship integrity
Check every deal has a valid account, every contact a valid account, every activity a valid parent. Referential breaks are the defect that turns a clean-looking load into a CRM where the pipeline report does not tie to the account list.
-
Resolve ownership and the user map
Build the monday CRM user → Zoho CRM user map, including leavers. Every record needs a valid owner: records assigned to deactivated users either fail to load or land unassigned, and unassigned pipeline is pipeline nobody works.
Records owned by deactivated users are a top cause of load failures. Decide the reassignment target before you start.
-
Scan for PII and regional compliance
CRMs hold marketing consent, lawful basis and unsubscribe state. Confirm these fields migrate intact and that consent provenance survives — losing consent records is a regulatory problem, not a data-quality one.
PII & Compliance Scanner Find regulated fields before they land in a new system -
Clean, normalise and archive the pre-state
Normalise country and state values, phone formats, currencies and casing, and standardise all timestamps to UTC. Keep an untouched copy of the raw export — it is your only reference if a mapping decision turns out wrong.
monday CRM → Zoho CRM specifics
- Picklist audit
- Export Zoho module data and check for blank picklist fields where Monday had values.
Don't move on until
- Duplicate rate quantified per object with a merge policy agreed
- Every record has a valid owner mapped to a target user
- Relationship integrity verified — no orphaned deals or contacts
03 Field Mapping Map objects, relationships and picklists — in that order.
Objective A signed mapping spec that covers objects, relationships, picklist values and currency handling.
Keep these open
-
Map objects and their relationships first
Establish how monday CRM objects correspond to Zoho CRM objects before any field work. Leads-versus-contacts, accounts-versus-organisations and deal hierarchies differ structurally between CRMs, and a field map built on the wrong object model has to be redone.
Schema Mapper Opens pre-loaded with the monday CRM → Zoho CRM field pair -
Generate and then hand-review the field map
Auto-match both schemas, then review every row. Look hardest at anything named "type", "source", "stage" or "status", where names match and meanings do not.
-
Map every picklist value, including retired ones
Enumerate all values on both sides — deal stages, lead sources, industries, statuses — and map each explicitly, including values no longer offered but still present on old records. Unmapped values either fail the row or land as blanks that quietly break segmentation.
Historical records often carry picklist values that were retired years ago and no longer appear in the UI.
-
Decide currency, amount and date handling
If you sell in multiple currencies, confirm how Zoho CRM stores amounts, exchange rates and dated conversion rates. Recalculating historical deal values at today's rate silently rewrites your revenue history.
Multi-currency deals re-converted at current rates will not tie to your historical reporting or your finance system.
-
Determine the load order
Sequence the load so parents exist before children: users, then accounts, then contacts, then deals, then activities and notes. Keep source IDs in custom fields so relationships can be rebuilt by lookup rather than guesswork.
-
Freeze the spec and sign off
Version-control the mapping, walk RevOps and sales leadership through the decisions that change reporting, and get written sign-off before the pilot.
-
Resolve Connect Boards links
Extract linked item IDs from the value JSON of Connect Boards columns. Build your ID mapping table.
Data Format Converter Reshape the export into the format Zoho CRM's importer expects -
Map picklist values
Monday Status/Dropdown labels must match Zoho picklist values exactly. Create a mapping dictionary. If your Monday board uses "In Progress" and your Zoho Deal Stage picklist expects "Negotiation/Review", the value imports as blank.
-
Handle Owner assignment
Map Monday People column (user emails) to Zoho CRM user IDs via the Users API.
monday CRM → Zoho CRM specifics
- Parse column_values
- Monday returns column values as JSON blobs. The text field gives human-readable values; the value field gives raw JSON. Use value for structured data (dates, statuses, Connect Boards IDs).
Don't move on until
- Object and relationship model mapped and reviewed
- Every picklist value explicitly mapped, including dead values
- Load order determined so parents always exist before children
04 Test Migration Pilot with related records, not a flat sample.
Objective A pilot load whose relationships, ownership and roll-up reporting all verify against source.
Keep these open
-
Configure the Zoho CRM sandbox to match the agreed model
Build the pipelines, stages, custom fields, record types and user roles first. Load into a default configuration and you will only discover the configuration defects at full scale.
-
Select a connected pilot slice
Take complete account trees — 50-100 accounts with all their contacts, deals, activities and files — rather than a flat random sample. Relationship defects are the whole point of a CRM pilot and a flat sample cannot expose them.
-
Run the load in dependency order with full logging
Load users, accounts, contacts, deals, then activities, logging every request against its source ID. Note which failures are transient (rate limits, timeouts) and which are structural (validation, missing parent).
-
Verify relationships and roll-ups
Confirm every deal sits on the right account with the right owner and stage, and that pipeline totals per account and per rep match monday CRM exactly. Roll-up mismatches almost always mean a relationship or currency defect upstream.
Migration Validation Tool Diff the pilot batch against source before scaling up -
Measure throughput and project the full load
Record actual records-per-hour under Zoho CRM's API limits and extrapolate, remembering activity history usually dominates volume. If the projection exceeds your window, split the load or trim activity scope now.
-
Let reps work the pilot data
Put two or three reps in the sandbox against their own accounts. They spot missing context, wrong owners and unusable notes far faster than any reconciliation script, and their buy-in is what makes adoption work.
monday CRM → Zoho CRM specifics
- Field-level spot check
- Pull 50 random records from each module. Verify every field matches the source.
Don't move on until
- Relationships intact across the whole pilot slice
- Pipeline roll-ups match source for the pilot accounts
- Reps have worked pilot records and confirmed they are usable
05 Cutover Switch the revenue system with the pipeline intact.
Objective All in-scope CRM data live in Zoho CRM, integrations repointed, and reps selling on day one.
Keep these open
-
Pre-load history ahead of the freeze
Load closed deals, historical activities and inactive accounts while monday CRM stays live. Only open pipeline and the final delta need to move inside the window.
-
Publish the cutover runbook
A timed sequence with owners and abort criteria: freeze, final export, delta load, integration switch, smoke test, go/no-go, rep enablement. Pick a window that avoids quarter-end and month-end close.
-
Freeze monday CRM and take the final delta
Set monday CRM read-only and export everything changed since the pre-load. Reps updating deals during an unenforced freeze is the classic way to lose the most recent — and most valuable — pipeline changes.
A rep who updates a deal in the old CRM during the freeze will lose that update permanently.
-
Load the delta and reconcile the pipeline
Run the delta, then verify open pipeline value and count per rep against monday CRM before anything else. If the pipeline number is wrong on day one, reps stop trusting the system and never fully come back.
Migration Validation Tool Confirm the final delta landed before you reopen -
Repoint every integration and verify with real records
Switch marketing automation, quoting, billing, enrichment, dialler and BI connections, then push a live record through each path. An unrepointed integration writing into the old CRM causes divergence that gets harder to reconcile every day.
Two-way integrations left pointing at the old CRM will keep writing there. Disable them before you switch, not after.
Cron Expression Builder Schedule the delta syncs that run through the freeze -
Go/no-go, then enable the reps
Call the decision explicitly against the exit criteria. Run enablement on real data with their own accounts on screen, and keep monday CRM read-only rather than cancelled until validation closes.
-
Identify the rollback scope
If only Phase 4 (Deals) failed, you may not need to roll back Phases 1–3 (Accounts, Contacts). Use the stored Monday item IDs in your External ID / legacy key field to identify exactly which records belong to this migration run.
monday CRM → Zoho CRM specifics
- Rollback plan
- Before go-live, take a full Zoho CRM backup. If validation fails after go-live, follow the rollback procedure below.
- Before go-live
- Take a full Zoho CRM backup via Setup → Data Administration → Export. Store all module CSVs. Note the exact timestamp.
- Bulk-delete imported records without triggering workflows
- In Zoho CRM, bulk deletion via the UI triggers Blueprint and workflow evaluation. To avoid this, use the REST API DELETE endpoint with the IDs of imported records. The DELETE endpoint does not trigger workflow rules. Process deletions in batches of 100 to stay within the concurrency limit.
- Re-run from the failed phase only
- Because you stored source IDs, you can re-run a single module's load without reprocessing phases that already succeeded.
Don't move on until
- Historical load complete and reconciled before the freeze
- All integrations repointed and verified end to end
- Reps logged in with pipeline visible and correct
06 Validation Prove the revenue numbers tie out, then close the project.
Objective Reconciled data, forecast parity with pre-migration reporting, and signed acceptance.
Keep these open
-
Reconcile every object
Compare counts and values across accounts, contacts, deals, activities and files, plus field-level spot checks on a random sample. Produce a single report suitable for audit and for finance.
Migration Validation Tool Reconcile monday CRM and Zoho CRM record-for-record -
Tie the pipeline and forecast to baseline
Rebuild forecast, pipeline coverage and win-rate reporting and compare to pre-migration figures. Every variance needs an explanation — most trace back to stage or currency mapping decisions made in Field Mapping.
Stage-model changes will legitimately shift historical conversion rates. Restate the baseline rather than chasing the difference as a defect.
-
Verify ownership, visibility and permissions
Confirm every record has the right owner and that sharing rules, territories and role hierarchy give each rep exactly the visibility intended. Over-broad visibility in a CRM is a data-protection issue as much as a config one.
-
Re-profile for field completeness
Compare loaded null rates against the source profile per field. A field that arrived empty while counts matched is the failure counts alone cannot detect.
Data Profiler Prove field completeness held up through the load -
Test automation and integration write-back
Fire every workflow, assignment rule, sequence and notification, and confirm each integration writes correctly in both directions. Automation is rebuilt rather than migrated, so it is unproven until observed.
-
Sign off and schedule decommission
Get written acceptance against the Discovery criteria, keep monday CRM read-only for 30-90 days with a final archive export taken, then diarise cancellation so the contract does not auto-renew.
-
Verify dependent records are cleared
If you loaded Contacts that reference Accounts you are deleting, delete child records (Contacts, Deals) before parent records (Accounts). Zoho will block deletion of an Account that still has associated Contacts.
-
Disable Monday creation rights
After the final sync, prevent new record creation in Monday CRM to stop data drift.
-
Rebuild automations
Monday CRM automations don't migrate. Monday's API does not expose board automation management. Recreate them as Zoho CRM Workflow Rules, Blueprints, or Deluge functions. Zoho Bulk Write does not trigger workflows, so automation parity is a separate implementation task.
monday CRM → Zoho CRM specifics
- Relationship verification
- For every sampled Contact, confirm the Account lookup is correct. For every Deal, confirm both Contact and Account lookups resolve.
- Train users
- Zoho CRM's module-based navigation is fundamentally different from Monday's board-based UI. Budget 1–2 weeks for team onboarding.
Don't move on until
- Full reconciliation report complete across all objects
- Forecast and pipeline reports tie to pre-migration baselines
- Acceptance signed and monday CRM decommission scheduled
Field mapping reference
The field-by-field mapping for each object. Use this as the starting point for your mapping spec.
Monday Column Type Migration Outcome
| monday CRM field | Zoho CRM field | Notes |
|---|---|---|
| Name (item title) | ✅ Lossless | Direct string mapping |
| ✅ Lossless | Direct mapping | |
| Phone | ✅ Lossless | Direct mapping |
| Date | ✅ Lossless | Normalize to YYYY-MM-DD |
| Numbers | ✅ Lossless | Verify decimal precision for currency |
| Text (long text) | ✅ Lossless | None |
| Status (label) | ⚠️ Transform required | Every label must be pre-mapped to a Zoho picklist value; unmatched labels import as blank |
| Dropdown | ⚠️ Transform required | Same label-matching requirement as Status |
| People | ⚠️ Transform required | Must resolve Monday user emails to Zoho CRM user IDs via Users API |
| Connect Boards | ⚠️ Transform required | Must resolve Monday item IDs to Zoho record IDs using an ID mapping table |
| Formula | ⚠️ Transform required | Calculated values can be exported as static snapshots; live recalculation must be rebuilt in Zoho |
| Rating | ⚠️ Transform required | No native equivalent; map to closest typed field |
| Timeline | ⚠️ Partial loss | Monday Timeline stores a date range; split into start_date and end_date fields in Zoho |
| Mirror (mirrored column) | ⚠️ Partial loss | Mirror columns reflect data from another board; extract the source value, not the mirror |
| Dependency | ⚠️ Partial loss | Record-to-record dependency logic has no native CRM equivalent in Zoho; consider Notes or custom fields |
| Location | ⚠️ Partial loss | Monday stores as a single location string; split into street/city/state/country if needed |
| Files / Attachments | ⚠️ Partial loss | Bulk Write API does not support attachments; each file requires a separate REST API call |
| Item updates (rich text) | ⚠️ Partial loss | Rich text, inline images, and @mentions must be sanitized before import; formatting is lost |
| Monday Workdocs | ❌ No equivalent | Workdocs are a document editor within Monday with no structural equivalent in Zoho CRM; migrate content to Zoho's knowledge base or an external wiki |
| Board-level automations | ❌ No equivalent | Monday automations are not exposed via API and do not migrate; rebuild as Zoho Workflow Rules or Blueprints |
| Timeline view / Gantt | ❌ No equivalent | View-only constructs; no data to migrate |
| Subitems | ❌ No direct equivalent | Subitems are separate items requiring a dedicated API query; Zoho has no native subitem concept |
Board Module
Requires Zoho custom modules subject to edition-specific field and module limits
| monday CRM field | Zoho CRM field | Notes |
|---|---|---|
| Accounts | Accounts | Direct mapping. Company name, domain, industry fields. Deduplicate by normalized name/domain first. |
| Contacts | Contacts | Map Account via lookup to Accounts module. |
| Leads | Leads or Contacts | Unconverted leads → Zoho Leads. Qualified leads already moved to Contacts → Zoho Contacts + Deal. Do not recreate already-converted leads as Leads. |
| Deals | Deals (Potentials) | Map stage, value, expected close. Link Contact and Account lookups. |
| Activities | Tasks / Events / Calls | Split by activity type. Not the full email history. |
| Emails & Activities notes/emails | Zoho Notes | Separate extraction path required. |
| Custom boards (Client Projects) | Custom Module | Subject to edition limits. Consider Zoho Creator for complex structures. |
Risk matrix
Per-object risk for this pair. Plan extra validation around anything marked high.
| Object | Risk | Notes |
|---|---|---|
| Account→Contact→Deal Relationships | high | Connect Boards links lost in CSV; require API extraction and ordered loading |
| Picklist/Status Values | high | Monday freeform labels must exactly match Zoho picklist values or import as blank |
| Attachments and Notes | high | Bulk Write API doesn't support them; requires individual REST API calls per file |
| Activity History | medium | Monday Activities board excludes emails and standard notes; separate extraction required |
| Custom Board Data | medium | Requires Zoho custom modules subject to edition-specific field and module limits |
| Subitems | medium | Not exported to Excel; require dedicated API queries as separate items |
| Rich Text Updates (@mentions) | medium | Monday HTML and inline images must be sanitized to plain text or basic HTML for Zoho Notes |
| Owner/User Mapping | low | Monday People column emails map to Zoho user IDs via Users API |
| Deal Values/Currency | low | Direct numeric map with decimal precision verification |
| Orphaned Records | medium | Deleted parent items leave ghost Connect Boards links pointing to non-existent IDs |
The hard parts
What makes this specific migration difficult, beyond the mechanics.
Relationship Reconstruction
Connect Boards links don't export to CSV and must be rebuilt via API by loading Accounts, Contacts, and Deals in strict dependency order.
Schema Translation
Monday's flexible columns (Status, People, Connect Boards) don't map 1:1 to Zoho's typed picklist, lookup, and owner fields.
Complexity-Based Rate Limits
Monday's 10M complexity points per minute exhaust quickly with nested queries across boards with 30+ columns.
Bulk Write Constraints
Zoho's Bulk Write API doesn't support attachments, notes, formula fields, or timestamps — requiring separate REST API calls.
Duplicate Reconciliation
Monday's auto-account-association from email domains creates inflated or fragmented Account records needing deduplication before import.
Tools used in this playbook
All free, all run entirely in your browser — nothing is uploaded.
FAQ
Can I migrate from Monday CRM to Zoho CRM using CSV export?
Only for small, flat datasets under ~5,000 records. Monday's board export is capped at 10,000 items and strips Connect Boards relationships. You'll need to manually rebuild Account-Contact-Deal links in Zoho using VLOOKUP matching, which is error-prone at scale.
What are the Monday.com API rate limits for data extraction?
Monday's GraphQL API allows 10,000,000 complexity points per minute per account. Nested queries grow exponentially in complexity, so extracting large boards with many columns can exhaust this limit quickly. Use cursor-based pagination with 500 items per page and built-in throttling. Daily call limits are also being rolled out by plan tier.
Does the Zoho CRM Bulk Write API support attachments and notes?
No. Zoho's Bulk Write API does not support Attachments, Notes, file uploads, or record images. You must use the standard REST API to upload each attachment individually — one API call per file per record. Formula fields, Auto Number, and Created/Modified timestamps are also not supported via Bulk Write.
What order should I load data into Zoho CRM during migration?
Load in dependency order: Accounts first, then Contacts (with Account lookups), then Deals (with Contact and Account lookups), then Activities (linked to Contacts/Deals). Loading child records before parent records exist causes silent relationship loss — the record imports but the lookup field is null.
Can Zapier or Make handle a full Monday CRM to Zoho CRM migration?
They are better for ongoing sync or a parallel-run bridge, not bulk historical migration. These platforms process records one at a time via trigger-action automations, so using them as the primary migration engine for years of CRM history is usually the wrong fit.