Reviewing data before a Zoho migration
Zoho Authorized Partner · Tally, Excel & CRM migrations

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
By source

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.

receipt_long

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
table_chart

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
hub

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
mail

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
Before anything moves

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.

content_copy

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.

key

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.

history

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.

rule

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.

attach_file

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.

gavel

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.

The sequence

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.

01

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.

02

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.

03

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.

04

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.

05

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.

Failure modes

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.

Reconciling record counts after a trial data load

Zoho migration — common questions

help

Can 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.

help

What 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.

help

Should 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.

help

How 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.

help

Will 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.

help

Can 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.

help

Do 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.

help

What 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.

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.

call