
Zoho Data Migration
Moving the data is the mechanical part. The work is deciding, before anything moves, which three records are the same customer and which history is worth carrying at all.
Migrations do not usually fail on the load. They fail because a unique key was never agreed, so the second import doubled everything; or because duplicates were merged by name and took their transaction history with them; or because nobody reconciled the totals and the gap surfaced at the next audit instead of during the project.
Where people migrate from
- receipt_longTallyMasters and balances yes; voucher history rarely
- table_chartExcel and SheetsEasy to load, hard to agree what the columns mean
- hubAnother CRMRecords transfer; automation gets rebuilt
- mailMailboxesThe mail is fine; the DNS and aliases are the risk
What comes across, and what should not
“Everything” is the answer people expect and almost never the right one. Each source has a natural boundary, and honouring it produces a cleaner system than dragging the whole history along.
From Tally
The most common move we handle, and the most misunderstood. Tally holds ledgers, not customers — the same buyer may exist as three ledger names across two companies. Masters, opening balances and outstanding invoices transfer well; years of voucher-level history usually should not, and we will normally recommend keeping Tally read-only for the prior years rather than forcing it across.
- Transfers check_circle
- Customer and vendor masters, item masters, opening balances, open invoices and bills
- Stays behind do_not_disturb_on
- Historic voucher detail — cheaper and safer to retain in Tally for reference
From Excel and Google Sheets
Technically the easiest and practically the most revealing. A spreadsheet has no schema, so a column called 'Status' may hold four different vocabularies depending on who typed it. Most of the work is agreeing what the columns mean before a single row moves.
- Transfers check_circle
- Everything, once the columns are mapped to real fields and values are normalised
- Stays behind do_not_disturb_on
- Free-text columns that encoded three different things at once — these get split
From another CRM
Salesforce, HubSpot, Pipedrive, Freshsales or something built in-house. Records and fields move predictably. What does not move is the automation, the reports and the permission model — those have to be rebuilt as Zoho equivalents, which is implementation work rather than migration work.
- Transfers check_circle
- Accounts, contacts, deals, activity history, notes and attachments
- Stays behind do_not_disturb_on
- Workflows, reports and role structure — rebuilt, not transferred
Mailboxes and calendars
Moving to Zoho Mail from Google Workspace, Microsoft 365 or a hosting-panel mailbox. The mail itself migrates reliably; the parts that catch people out are DNS cutover timing, aliases and forwards nobody documented, and shared mailboxes that were actually one person's account.
- Transfers check_circle
- Mail, folders, contacts and calendars
- Stays behind do_not_disturb_on
- Rules and filters set up individually by each user — these get rebuilt
Six decisions that have to be made by you, not by a tool
These are the ones that determine whether the migration produces a clean system or a faster version of the mess. No software can answer them, and a migration that skips them has simply deferred the cost.
Which duplicates are actually the same customer
'ABC Traders', 'ABC Traders Pvt Ltd' and 'A B C Traders, Kochi' may be one account or three. Somebody at your end has to decide, because no tool can know. Getting this wrong quietly destroys the sales history attached to the record that gets merged away.
What the unique key is going to be
The single most consequential decision, and the one most often skipped. Without a field that uniquely identifies a record — GSTIN, customer code, email — every subsequent import creates new records rather than updating existing ones. This is the root cause of almost every 'the import created four hundred duplicates' call we take.
How much history is worth carrying
All of it feels like the safe answer and rarely is. Carrying dead records forward makes search slower, reports noisier, and your user-facing data worse from day one. The useful question is which history anyone will actually query, and the honest answer is usually two to three years.
What the picklist values are going to be
Free-text source data contains every spelling anybody ever used. Deciding the canonical list before import — and mapping the variants onto it — is the difference between a report that groups correctly and one that shows eleven versions of the same status.
Whether attachments come too
Documents, signed contracts and photographs attached to old records are often the reason the old system cannot simply be archived. They can be brought across, but it is a distinct piece of work with its own volume and cost, and it needs to be agreed rather than assumed.
What the old system becomes afterwards
Read-only reference, decommissioned, or still running for one function nobody moved. This should be an explicit decision with a date, because 'we will switch it off later' reliably becomes two systems maintained forever.
Five steps, and nothing skipped
The trial load and the reconciliation are the two that get dropped under time pressure, and they are the two that catch everything.
Extract and profile
We pull the data and look at what is genuinely in it — row counts, fill rates, how many distinct values a supposedly-fixed column actually holds, how bad the duplication is. This report usually surprises people and it is what the mapping decisions get made against.
Map and decide
Field-by-field mapping, the unique key, the canonical picklists, the duplicate rules, the history cut-off. Your decisions, our recommendations, written down. Nothing moves until this is agreed.
Trial load
A full-volume load into a sandbox or a restricted org. Real data at real volume, not a sample — because the problems that matter (a date format that breaks at row 40,000, a text field that exceeds its limit) only appear at scale.
Reconcile
Counts and totals checked against the source: number of customers, sum of outstanding, number of open deals. If the two do not agree, the migration is not finished, whatever the load log says.
Final load and cutover
A delta load of everything that changed since the trial, then a clean switch with an agreed freeze window. Both systems stay available for a defined period, and the old one is decommissioned on a date rather than whenever somebody remembers.
Migration runs alongside configuration rather than before it — the field structure has to exist before data can land in it. The implementation page sets out how the two interleave.
Seven ways migrations go wrong
Every one of these is something we have been called in to repair after the fact. Repairing them costs more than doing the migration properly did, which is the whole argument for the trial load.
- error
No unique key was mapped, so a re-run doubled every record instead of updating it.
- error
Duplicates were merged automatically by name, silently discarding the transaction history on the losing record.
- error
Dates arrived in the wrong format, so a year of records landed in the wrong financial period.
- error
Opening balances were imported before the chart of accounts was final, so the trial balance never reconciled.
- error
Attachments were assumed to be included, discovered to be out of scope after the old system was switched off.
- error
The cutover happened mid-month, so one month's reporting exists in two systems and matches neither.
- error
Nobody reconciled totals, and the gap was found at the next audit rather than during the project.

Zoho migration — common questions
helpCan you migrate our data from Tally to Zoho Books?
expand_more
Yes, and it is the move we handle most often. What transfers cleanly is masters — customers, vendors, items — along with opening balances and open invoices and bills. What we usually advise against is forcing years of voucher-level history across: it is slow, it rarely reconciles perfectly, and it makes your new system worse from day one. The better pattern is to keep Tally read-only for prior years and start Zoho Books clean from an agreed opening date. One thing to expect: Tally organises around ledgers rather than customers, so the same buyer may exist under several ledger names and somebody at your end has to decide which are the same party.
helpWhat is the most common thing that goes wrong in a migration?
expand_more
No unique key. If the import mapping has no field that uniquely identifies a record — a customer code, a GSTIN, an email — then every row is treated as new, and a re-run doubles your data instead of updating it. It is the root cause of nearly every 'the import created hundreds of duplicates' call we take, and it is entirely preventable by deciding the key before the first load rather than after the third.
helpShould we bring all our historical data across?
expand_more
Usually not. Carrying everything feels like the safe option, but dead records make search slower, reports noisier and the new system's data quality worse on its first day. The useful question is not 'what can we move' but 'what will anyone actually query', and the honest answer is generally two to three years of transactional history plus all live masters. Older data stays accessible in the source system, which is cheaper than migrating it and safer than deleting it.
helpHow long does a Zoho migration take?
expand_more
For a single-source move with clean data, one to two weeks running alongside configuration. Multi-source migrations, or ones where the source data needs significant de-duplication, run three to six weeks. The variable is almost never the technical load time — it is how long the decisions take: which duplicates are the same customer, what the unique key is, where the history cut-off sits. Projects that stall are stalled on those, not on the tooling.
helpWill we lose our data if something goes wrong?
expand_more
No, because nothing is done destructively. The source system stays untouched and available throughout — we extract from it, we do not move out of it. Loads are run into a sandbox or restricted org first, at full volume, and reconciled against source totals before anything goes near the live environment. The old system is decommissioned on an agreed date after cutover, not during it.
helpCan you migrate our email to Zoho Mail?
expand_more
Yes — from Google Workspace, Microsoft 365, or a hosting-panel mailbox. The mail, folders, contacts and calendars migrate reliably. The parts that catch people out are around the mail rather than in it: DNS cutover timing, aliases and forwards nobody has documented, and 'shared' mailboxes that turn out to be one employee's personal account with the password written down somewhere. We audit those before the switch rather than discovering them after it.
helpDo our workflows and reports come across too?
expand_more
No, and it is worth being clear about this because it is often assumed. Migration moves records. Automation, reports, dashboards and the permission model have to be rebuilt as Zoho equivalents — that is implementation work rather than migration work, and it is scoped separately. The upside is that it is a good moment to ask which of those rules anyone still wants, because a surprising number of them exist only because nobody turned them off.
helpWhat happens to attachments and documents?
expand_more
They can come across, and it needs to be an explicit decision rather than an assumption. Attached contracts, signed POs and photographs are frequently the actual reason a legacy system cannot simply be archived, and they carry their own volume, their own transfer time and their own cost. We size this during profiling so it is in the scope rather than discovered after the old system has been switched off.
Related pages
Zoho Implementation
The five stages, and the decisions configuration makes on your behalf.
Zoho Integration
Connecting Zoho to the systems you are keeping, rather than migrating away from.
Zoho Books
GST-ready accounting, inventory and invoicing — the usual destination from Tally.
Zoho Partner in Kerala
Our statewide practice — the Kerala page has the local detail.
Talk to us about a migration
Tell us what you are moving from, roughly how many records, and whether attachments matter. Those three answers are usually enough for us to say what the shape of the job is and where the risk sits.
- check_circle
Your source system stays untouched and available throughout
- check_circle
A full-volume trial load before anything goes near live
- check_circle
Totals reconciled against source before we call it finished
- check_circle
An agreed decommission date, so you do not end up running two systems
We migrate for businesses across India and the GCC, and for Kerala and its fourteen districts from our base in Malappuram. Call +91 99467 89916 or email admin@techgeum.com.