All articles

Custom Software10 min read

CRM Data Migration: From Spreadsheets, HubSpot or Zoho to a Custom CRM

Migrating to a custom CRM means inventorying what you have, mapping old fields and stages to the new model, cleaning and de-duplicating, loading into staging, reconciling counts, rehearsing, and cutting over with a rollback plan. The main risks are duplicates, lost history and broken relationships.

Written byUsama AsifPublished

Migrating CRM data to a custom CRM takes nine steps: inventory what you hold, decide what to carry over, map old fields and stages to the new data model, clean and de-duplicate, load into a staging environment, reconcile counts and samples, rehearse the cutover, move the final changes and go live with a rollback plan. The biggest risks are duplicates, lost activity history, broken links between records and automations that do not travel.

A CRM migration is mostly a data-quality project with a software project wrapped around it. The code that loads records is the easy part. The hard part is that the existing system holds years of inconsistent entries, and the new system, being custom, has stricter rules. This guide is for teams moving from spreadsheets, or from a hosted CRM such as HubSpot or Zoho, into a custom CRM. Before you start, it helps to have decided what the new system should hold; the custom CRM requirements checklist covers that. And if you are still deciding whether to leave your current CRM, read custom CRM vs Salesforce, HubSpot and Zoho first.

Why move, and what it costs you if you do it badly

Typical reasons for moving: your process no longer fits the product's objects and stages, the CRM must share live data with your ERP or accounting system, per-user fees have grown, or you want to control the data and the roadmap. A poorly executed migration undoes the benefit: reps stop trusting the new system because their contacts are missing, managers cannot reconcile pipeline totals, and old and new systems run in parallel for months. Treat the migration as a project with an owner, a schedule and an acceptance test.

Step 1: inventory what you hold

List every source and measure it.

SourceWhat to record
SpreadsheetsNumber of files, owners, sheets, rows, columns, where the latest copy lives
HubSpot / Zoho / other CRMObjects used (contacts, companies, deals, tickets, custom objects), record counts, custom fields, pipelines, users
Email and calendarWhether activities are logged in the CRM or live only in inboxes
Other systemsAccounting, e-commerce, support, marketing tools holding customer data
AttachmentsQuotes, contracts and files, with total size

Counts matter because they become your reconciliation targets later. Write them down on day one, with the date.

Step 2: decide what comes across

Not everything should migrate. Decide per object:

  • Migrate fully: active contacts, companies, open deals, open tickets.
  • Migrate summarised: closed deals older than a cut-off date, kept as history with key fields.
  • Archive, do not migrate: very old leads, bounced emails, test data, records marked as spam.
  • Rebuild, do not migrate: automations, workflows, dashboards and reports. These are configured in the old product, rarely export in a usable form, and are best redesigned in the new system from your current requirements.

A shorter, cleaner load is faster and gives users more reason to trust the new CRM.

Step 3: map the old model to the new one

Create a mapping sheet with one row per old field: old name, type, sample values, new object and field, transformation rule, and owner. Pay particular attention to:

  • Picklists. Old values such as "Hot", "hot" and "HOT lead" need to map to one new value, and unmapped values need a rule.
  • Stages. Map each old deal stage to a new stage, including what happens to deals in obsolete stages.
  • Owners. Match old users to new users. Records owned by people who have left need a rule (a manager, a queue).
  • Relationships. Contacts to companies, deals to contacts, tickets to accounts. In hosted CRMs these links are held as associations, and exporting an object to a file may not include them; check what your product's export or API provides and plan to extract associations separately.
  • Dates and time zones. Date formats differ between systems and spreadsheets; decide one standard and convert on load.
  • Currency and numbers. Decimal separators, currency codes and rounding.
  • Consent and source. Marketing consent flags and lead source fields should travel with the contact, with a recorded date, because losing them can create legal exposure. We design to support your data-protection obligations; compliance remains your organisation's responsibility.

Step 4: extract, clean and de-duplicate

Extract. From spreadsheets, consolidate the latest versions into one controlled set and stop people editing the old ones in the meantime. From HubSpot or Zoho, use the product's export tools or API to take a full copy; both products provide CSV export and an API, but export size limits, rate limits and which fields are included differ by product and plan, so verify against the current documentation before you plan the timing.

Clean. Standardise phone formats, trim spaces, fix obvious typos, separate first and last names, normalise country and city names, and remove test records.

De-duplicate. Pick match keys in priority order, for example email, then phone number, then company name plus city. Decide merge rules: which record survives, how conflicting values are resolved, and which activities are kept. Automated matching is good at exact and near-exact matches; leave a manual review list for fuzzy matches, and have a sales lead approve it. Records that cannot be matched should be listed for your team to resolve rather than silently dropped.

Step 5: load into staging, not production

The custom CRM should have a staging environment that is a copy of production in structure. Load the cleaned data there first, with the loader scripts the migration will use for real. Keep the original source IDs on every migrated record in a dedicated field. These IDs let you trace any record back to its origin, re-run a partial load, and handle the delta later.

Step 6: reconcile and sample

Compare counts per object between source and staging: contacts, companies, open deals, deal value by stage, tickets. Differences should be explained by your rules (for example, duplicates merged), not by chance. Then sample: pick fifty records across owners, and let their owners check every field, association and note. Ask the sales lead to sign off the counts and the sample in writing. Do not skip this; it is the migration's acceptance test.

Step 7: handle history and attachments

Activity history is what makes a CRM valuable to a rep. Decide whether to migrate calls, notes, emails and tasks, and for how many years. Notes and tasks usually migrate cleanly. Email logging depends on how the old system captured it; if emails are stored as copies in the CRM, they can be carried over, whereas if they were only linked to a mailbox, the new CRM may need to re-link through the mail provider's API. Attachments migrate as files with their parent record IDs; check total size and storage. Where history cannot be carried over, keep a read-only archive of the old system for a defined period so no one loses access to the past.

Step 8: rehearse the cutover

Run the full migration at least twice in staging, timing it. The second run should be boring. Write a cutover plan with a freeze time, the sequence of loads, who checks what, and the criteria for a go decision.

  1. Freeze. Announce when users must stop entering data in the old system.
  2. Final extract and load. Take the last copy and load it, using source IDs to handle records that changed since the rehearsal.
  3. Verify. Re-run the count checks and the sampling.
  4. Switch. Point web forms, integrations and email logging at the new CRM, and redirect users.
  5. Hold the old system read-only. Keep it available, not editable, until the new one is accepted.

Step 9: go live with support and a rollback plan

In the first week, have a named person to answer questions and a channel for reporting missing or wrong data. Fix and re-run corrections from the source IDs. Agree in advance what rollback means: if a critical failure occurs in the first hours, you return to the old system and repeat the cutover, which is only possible if the old system stayed intact. Collect feedback after two weeks and update the mapping for anything missed.

The main risks and how to manage them

RiskWhat it looks likeMitigation
DuplicatesTwo records for one customer; split historyMatch keys, merge rules, human review list
Lost relationshipsContacts without companies, deals without contactsExtract associations separately; reconcile counts of links
Lost historyNotes and emails missingDecide scope early; keep a read-only archive
Owner mismatchRecords belonging to nobodyMapping rule and a queue for orphaned records
Field mismatchPicklist values missing or wrongMapping sheet with unmapped-value rules
Consent lossMarketing flags droppedCarry consent and source fields with dates
Automations missingReminders and routing no longer happenRebuild and test before cutover
Integrations pointing at the old CRMWeb forms and email still feeding the old systemSwitch all feeds in the cutover plan
API limitsExtraction slower than plannedCheck limits early; extract in batches
User distrustReps keep spreadsheetsInvolve reps in sampling; fix reports quickly

Who does what

The migration needs a business owner (usually the sales manager) who decides mappings and merge rules, a technical lead who writes and runs the loaders, and two or three reps who check samples. Your vendor should provide the loader scripts, the staging environment and the reconciliation reports; you provide data and decisions. Timeline Digital includes migration in the scope of CRM builds and checks counts with your sales lead before go-live. There is no fixed timeframe: the schedule is set from your requirements in the Plan step. The free pilot of 2 to 3 key modules is ready in about 2 days, and with 1,200+ developers we have the capacity to deliver a complete system in as little as 2 weeks. The full project starts after you approve the pilot, and the scope, milestones and terms are agreed after it. Long-term support under a service level agreement (SLA) follows launch.

Timeline Digital is a custom software development company founded in 2013 and headquartered in Islamabad, Pakistan. This guide was written by Usama Asif to describe general CRM migration practice; export and API details of third-party products change, so confirm them against the vendor's current documentation.

Frequently asked questions

How do I migrate from HubSpot or Zoho to a custom CRM?

Inventory the objects and record counts, decide what to carry over, map fields, stages and owners to the new model, clean and de-duplicate, load into staging with source IDs, reconcile counts and samples, rehearse the cutover, then go live with a rollback plan. Export tools and APIs differ by product and plan, so check current documentation.

Can I migrate from spreadsheets to a custom CRM?

Yes, and it is often the simplest case because there is no old software to work around. The effort is in consolidating the latest versions, standardising formats, and de-duplicating by email, phone and company before loading into staging for sign-off by your sales lead.

Will I lose my activity history and emails?

Not if you plan for it. Notes and tasks usually migrate cleanly. Emails depend on how the old system stored them. Decide the scope early, and where history cannot be carried over keep the old system as a read-only archive for a defined period.

Do automations and reports migrate?

Generally not in a usable form. Workflows, dashboards and reports are configured in the old product, so they are rebuilt in the new CRM from your current requirements. That is a chance to drop outdated rules, but it must be done and tested before cutover.

How do I avoid duplicate records in the new CRM?

Choose match keys in priority order such as email, phone and company name plus city, define which record survives and how conflicting values are resolved, run automated matching, and give a sales lead a manual review list for uncertain matches. Unmatched records should be listed for resolution rather than dropped.

How long does a CRM data migration take?

It depends on data quality, volume and history scope rather than on the loading code, with at least two rehearsals in staging. At Timeline Digital there is no fixed timeframe: the schedule is set from your requirements in the Plan step, and the free pilot of 2 to 3 key modules is ready in about 2 days.

What is a source ID and why keep it?

A source ID is the record’s identifier in the old system, stored in a dedicated field on the migrated record. It lets you trace any record to its origin, re-run partial loads, and apply last-minute changes at cutover without creating duplicates.

Topics in this article

  • CRM Data Migration
  • Custom CRM
  • HubSpot Migration
  • Zoho Migration
  • Data Cleansing
  • Custom Software

Start a conversation

Tell us how your business works.

Describe what is slowing your team down. We will help you work out what to build, and how a free pilot lets you judge our work before the full project.

Prefer WhatsApp? Start a chat

What happens next

  1. You send a short brief

    The problem, the people involved and any target date. A senior engineer replies within 4 business hours.

  2. We understand your workflow

    A first call about how your business works today. An NDA can be signed before you share details.

  3. You test a free pilot

    You choose 2 to 3 key modules and we build them first, so you judge real software before the full project.