Decide what is moving and what is staying
Export everything before you build an import file, and keep the untouched originals in a read-only folder so every cleaning step can be reversed. Count records by type and by owner. Those counts become the baseline you reconcile against after cutover.
Write a retention rule and apply it consistently. A typical rule for a small team: import every open deal, every deal closed in the last 24 months, and every contact and company with activity in that window; archive the rest as files. Record the exceptions. Leaving a record out of the new CRM is not the same as deleting it, so keep the archive.
Plan history separately. A contact CSV rarely carries email threads, attachments or a contact's links to several companies. Pipedrive's export, for example, covers leads, deals, organizations, people, products, activities, projects, notes and files in XLSX or CSV, and keeps each export file for 28 days, so download it promptly.
| Object | Count before export | Typical decision |
|---|---|---|
| Companies / organizations | Total, by owner, without a domain | Import those with activity in the retention window |
| Contacts / people | Total, without email, likely duplicates | Merge duplicates in the source, then import |
| Deals | Open by stage and currency; closed by year | Import all open deals and recently closed ones |
| Activities and notes | Open tasks; notes on open deals | Import open tasks and active-deal notes; archive the rest |
| Files and attachments | Count and total size | Archive in shared storage; link from the record if needed |
| Users and owners | Active and inactive | Map every owner to an active destination user |
| Custom fields | Number of fields and share of records filled | Drop fields filled on under 10% of records unless a report uses them |
Map meanings, not just column names
A field called “status” can mean lead qualification, deal stage or customer lifecycle. Mapping all three to one destination field produces a clean-looking import with misleading reports. For each column, write what it means, its destination, its allowed values and what a blank should do.
Keep the old system's record ID on every imported record, in a dedicated field such as a custom text field named legacy_crm_id. Names are weak keys: two contacts can share a name and companies rebrand. Keep a crosswalk of source ID to destination ID after the pilot; it is how you investigate exceptions and run later updates.
Use each destination's own identifiers for updates. HubSpot matches on Record ID, a custom property that requires unique values, email for contacts and company domain for companies; an association import without identifiers for both records creates duplicates instead of links. Pipedrive updates existing records by its System ID, which you get by adding the ID column to a list view and exporting. An ID from the old CRM is not a Pipedrive System ID, so store it separately.
Check import limits before you split files. Pipedrive's spreadsheet importer accepts XLS, XLSX or CSV files up to 200,000 rows and under 50 MB. HubSpot accepts single-sheet CSV, XLSX or XLS files with a header row; free accounts are limited to 20 MB per file and 500,000 rows per day, paid accounts to 512 MB per file and 10,000,000 rows per day.
| Source field | Meaning / transformation | Destination / validation |
|---|---|---|
| deal_status = quote | A proposal has been sent, not merely drafted | Stage “Proposal sent”; reject values with no mapped stage |
| owner = sam@example.test | Map the source user to an active destination user | Owner; send unmapped owners to an exception list |
| value = 1200; currency = EUR | Keep value and currency together | Numeric amount + currency; reconcile totals per currency |
| company_id = C-014 | Relationship to the company's source record | Resolve through the ID crosswalk, not the display name |
| phone = 020 7946 0018 | Add the country code so the number dials from anywhere | +44 20 7946 0018; flag numbers with no country |
| close_date = 03/04/2026 | Confirm whether the source writes day/month or month/day | ISO date 2026-04-03 or 2026-03-04; reject ambiguous rows |
Choose a pilot that is deliberately inconvenient
Ten tidy contacts prove nothing. Pick 20 to 50 records that include each of these: a duplicate contact, an owner who has left, a blank required field, an international phone number, a contact linked to two companies, a closed-lost deal, a deal with notes and an attachment, and a deal in a second currency. Learn the import screens on invented records first.
Check both the import summary and the records themselves. A row can import successfully and still link to the wrong company. Ask the deal owner to find the next task, open the related company and explain the history without opening the old export.
Log every error with its source ID, the failure, the fix and the reviewer. Do not re-import the whole file to fix five rows: confirm how the destination updates existing records first, or you will create duplicates. Pipedrive lets you revert a spreadsheet import within 48 hours, so run the pilot early enough to use that window if the mapping is wrong.
Plan the last update before switching systems
The old CRM keeps changing while you prepare. Pick a cutover window (Friday afternoon to Monday morning works for most small teams), freeze edits in the old system at a set time, take the final export and tell the team exactly where new work goes from that moment. Never run two systems that both claim to be the record of truth.
Name one person who approves the switch and write the stop conditions in advance: any open deal without an active owner, open-pipeline totals that differ from the baseline without an explanation, or a failed critical integration such as the website form. Keep the old system read-only for at least one billing cycle so people can look up history.
Pause automations in the destination before loading production data, or test them against the pilot. Depending on the product and settings, an import can fire workflows, assignment rules or emails to customers. Switch them back on one at a time after reconciliation.
| Step | When | Done when |
|---|---|---|
| Announce the freeze time and where new work goes | One week before | Every user has confirmed |
| Pause destination automations and integrations | Friday, before import | List of paused items saved |
| Freeze the old CRM and take the final export | Friday, 3 pm | Export files stored read-only |
| Import in order: companies, contacts, deals, activities, notes | Friday evening | Import summaries saved |
| Reconcile counts and pipeline totals | Saturday | Every difference explained |
| Go/no-go decision | Sunday | Approver signs off in writing |
| First working day with an admin on hand | Monday | Exception list has owners |
Reconcile the work, not just the row count
Compare counts by object, owner and stage against the inventory baseline. Compare open-deal value separately for each currency. Then open a sample of 25 records across owners and check the company link, dates, notes and next activity by hand. Explain every intended difference: records excluded by the retention rule, merged duplicates and items left in the archive.
Make the first working day the real test. Each user should open overdue tasks, current proposals and new inquiries, and the manager should run the weekly report. Give every problem an exception owner and a deadline, and keep a short launch log so you can tell a data problem from a workflow change.
If HubSpot and Pipedrive have to run side by side for a while, set up a sync instead of repeating spreadsheet imports. Migration is a one-time cutover; ongoing synchronization is a question of which system owns each field and how conflicts are resolved.
How long a small-team CRM migration takes
For a team of up to about ten users and a few thousand records, plan two to four weeks of calendar time. The data load itself usually takes hours. The days go into cleaning duplicates, agreeing the mapping, rebuilding automations and reports that never migrate, and checking the pilot.
Assisted routes shorten the load, not the decisions. Pipedrive's Import from other software option uses Import2 and is free for up to 1,000,000 records; HubSpot offers Smart Transfer for moving from supported CRMs. Both still need the mapping, owners and pipelines decided first. Our step-by-step guides cover each direction between HubSpot and Pipedrive.
| Phase | Planning estimate | Finished when |
|---|---|---|
| Inventory and cleanup | 3–5 days | Baseline counts recorded; duplicates merged in the source |
| Field and stage mapping | 2–3 days | Every column has a meaning, a destination and a rule |
| Pilot | 2–3 days | Awkward records pass the owner's check |
| Rebuild automations, reports and forms | 2–5 days | Each one is rebuilt or deliberately retired |
| Cutover | One weekend | Go/no-go approved |
| Reconciliation and fixes | 1–2 weeks | Exception list is empty |
Template and next steps
A field-mapping sheet, a pilot acceptance list, a cutover plan with a named go/no-go owner and a reconciliation log. Adapt the fields to your own process and keep passwords, card details and other sensitive account data out of shared worksheets.
Frequently asked questions
How long does a CRM migration take?
For a small team with up to about ten users and a few thousand records, plan two to four weeks of calendar time: about a week for inventory, cleanup and mapping, two or three days for a pilot, a weekend cutover and one to two weeks of reconciliation. The data load itself often takes hours; cleaning duplicates and rebuilding automations and reports takes the days.
What data should I migrate to a new CRM?
Migrate what people use to sell and serve customers: all open deals, deals closed in the last one to two years, contacts and companies with recent activity, open tasks, and the notes behind active deals. Archive the rest as exported files instead of deleting it. Drop custom fields that are rarely filled in unless a report depends on them, and keep the original exports untouched.
How do I avoid duplicates when importing data into a CRM?
Merge duplicates in the source first, then import with a unique identifier on every row. HubSpot matches on Record ID, email for contacts and company domain for companies; Pipedrive updates existing records by its System ID. Import companies before the contacts and deals that link to them, and never re-import a whole file to fix a few rows, because unmatched rows are created as new records.
Can you undo a CRM data import?
In Pipedrive, yes: a spreadsheet import can be reverted within 48 hours. For any other CRM, find its undo or bulk-delete route before the first production import. Either way, run a pilot of 20 to 50 deliberately awkward records first, keep the untouched source exports, and log each imported batch with its date and record count so a bad batch is easy to find.
Should I clean CRM data before or after migration?
Before. Merge duplicate contacts and companies, standardize phone and date formats, map every owner to an active user and remove obvious junk in the source export, not in the new CRM. Cleaning first keeps matching rules reliable and makes the reconciliation counts meaningful. Leave judgment calls, such as retiring old custom fields, to the mapping sheet, where each decision is written down.
Sources
Prices and plan limits come from each vendor's own pricing pages and documentation, checked on the dates shown. Vendors change packaging often, so confirm the final figure in your own quote.
- HubSpot: set up your import file — checked Oct 29, 2026Unique identifiers, associations, file formats and import limits.
- Pipedrive: importing data with spreadsheets — checked Oct 29, 2026File types, row and size limits, and reverting an import within 48 hours.
- Pipedrive: updating data with a spreadsheet — checked Oct 29, 2026Matching rows to existing records by System ID.
- Pipedrive: exporting data — checked Oct 29, 2026Exportable objects, formats and the 28-day file window.
- Pipedrive: importing from a previous CRM with Import2 — checked Oct 29, 2026Assisted import from other software, free up to 1,000,000 records.