CRM and sales
Excel to CRM migration: a seven-gate plan that keeps your customer history
A gate-by-gate plan for moving a messy spreadsheet into a CRM without losing customer history, from snapshot and cleaning to test import, verification and a rollback you have confirmed.
An Excel to CRM migration copies the records in your spreadsheet (contacts, companies, deals and notes) into the CRM through its import tool, one column per CRM field. It loses customer history when it runs as one large import. It keeps that history when you run it as seven gates. Each gate has a go condition, a check that must pass before you continue; if it fails, you go back and fix the step that failed, or hand the job to a professional.
The seven gates are snapshot and freeze, audit columns, standardise and deduplicate, map to the import template, run a small test import, verify the result, and run the full import with a rollback plan. The plan assumes the CRM is already chosen. Pipedrive and HubSpot appear only where their own import documentation names a capability or a limit, so this is not a button-by-button tutorial. No plan guarantees that a given file imports cleanly; the gates make the failures visible before they reach the sales team.
The seven-gate plan at a glance
A verification gate is a stop-and-check point: you continue only when the evidence in front of you says the step worked. The table condenses the whole route. Failures loop back to the previous gate; a separate hand-over test turns an uncleared gate into a decision to get professional help.
| Gate | Go condition | If it fails |
|---|---|---|
| 1. Snapshot and freeze | A read-only backup exists and restores | Fix the backup before editing anything |
| 2. Audit columns | Every row has values for the CRM's mandatory import fields | Fill or remove rows before mapping |
| 3. Standardise and deduplicate | Formats follow explicit rules; duplicates removed by a written rule set | Rework until the rules apply cleanly |
| 4. Map to the import template | Every spreadsheet column maps to a CRM field; custom fields already exist | Resolve unmapped fields |
| 5. Test import | A small sample imports cleanly into a sandbox | Read the skip file and loop back |
| 6. Verify | Record counts and spot-checks match the source | Fix the named rows and retest |
| 7. Full import with rollback | Post-import checks pass and rollback is confirmed | Roll back, then re-run from the failing gate |
What an import can and cannot carry
Before cleaning anything, settle what the import will actually move. A spreadsheet can carry only the data that fits in its columns, and each CRM decides which objects its importer will accept. Pipedrive's documentation states that a spreadsheet import can add or update eight object types in bulk: people, organisations, leads, deals, projects, activities, notes, and products. Notes are the constrained one: a note must be linked to an existing person, organisation, deal, lead, or project, and cannot be imported standalone. HubSpot's import tooling and API can populate CRM records and activities including contacts, companies, and notes.
Treat email thread history and attachments as not covered unless your vendor's import documentation says they are. Neither has a natural spreadsheet column, and they are the two items sales teams most often expect to appear later. Check the documentation before you promise the sales team that full history will appear in the new system. If the spreadsheet is only one of several systems holding customer history, a standard platform import may never be complete; web app development covers software built around how your operations actually work.
Gate 1: Snapshot and freeze your spreadsheet
Make the backup before you touch anything. Save the master file under a versioned name — for example leads-master-2026-08-21.xlsx — and set it read-only. Open the backup from a separate location and confirm the rows you expect are present. All cleaning then happens on a second working copy, never on the master. The gate clears when a read-only backup exists and you have restored from it once. If you cannot restore it, do not proceed; a backup you cannot restore is not a backup.
Gate 2: Audit columns against the CRM's mandatory fields
Mandatory import fields are the columns your CRM refuses to proceed without. Pipedrive makes the rule explicit: people require a person name, organisations require an organisation name, and products require a product name. Leads and deals each require at least one lead or deal field plus a person name or organisation name. Projects require at least one project field plus a deal title, person name, or organisation name; activities have no mandatory fields.
Open the working copy and filter each required column for blanks. If a row is missing a mandatory field and you cannot fill it from another source, remove that row from the import file and keep it in the backup — do not invent a value. If mandatory fields are missing, Pipedrive creates no items from that file and generates a skip file, a list of what was not imported and why. That turns a failed import into a visible, diagnosable one rather than a silently partial import.
Gate 3: Standardise formats and deduplicate by rule
Vague cleaning is how imports go wrong. Replace it with field-level rules you can apply with filters, not by eye. The table shows the shape of the rules; the CRM's import template defines the exact accepted formats.
| Field | Inconsistent | Standardised |
|---|---|---|
| Phone | 077-1234-567 | +44 77 1234 567 |
| Phone | 031 555 123 | +386 31 555 123 |
j.doe@company | j.doe@company.com (corrected at source) | |
| Date | 05/04/2024 | 2024-04-05 (use the order the CRM expects) |
| Status | new / NEW / New | New |
| Company | ACME Corp. / Acme Corporation | Acme Corporation |
Use one international phone format, valid email domains, one date format in the order the CRM expects, picklist values that match the CRM's options exactly, and one canonical company name per entity. Choose the canonical name by an explicit rule — for example, the most recent version in your records — not by whatever looks right in the moment.
Then deduplicate by rule, not by eye. Define what counts as a duplicate: the same email address, or the same company name and postcode for organisations. Decide which row wins: the most recently updated row, or the one with the most populated fields. Write those two rules down, apply them with a filter or Excel's built-in Remove Duplicates, and keep the removed rows in a separate archive rather than deleting them permanently.
Gate 4: Map columns to the CRM import template
An import template is the structure your CRM expects — its columns, field names, and which fields are mandatory. Use the vendor's sample template as the target, not your own best guess. Pipedrive publishes downloadable sample import spreadsheets in XLSX and CSV, with mandatory fields marked by a red asterisk and a reference tab named "READ ME All default Pipedrive fields". Pipedrive accepts XLS, XLSX, and CSV files for bulk import.
Map every spreadsheet column to a CRM field. Pipedrive fields fall into three types — default, system, and custom — and not all can be mapped during import: some system fields are restricted or set automatically. For multiple-option custom fields, the custom field must already exist in the account before import, and each option must be mapped individually; address and phone-type fields each require an extra mapping step. Leave no column unmapped unless you are deliberately dropping it, in which case write the omission down. If a field your team relies on has no sensible home in the template, that is a signal to stop and look at custom CRMs.
Before you upload, check the file against the importer's limits. Pipedrive takes one tab per import with a header row, at most 200,000 rows and a file under 50 MB. HubSpot also takes one sheet with a header row and fewer than 1,000 columns. On HubSpot's free tools a file can be up to 20 MB; on a paid subscription, up to 512 MB and 1,048,576 rows.
Encoding is how a file stores each letter, and it matters as soon as names carry accents. HubSpot requires UTF-8, the encoding that keeps letters such as the č in Kovač or the ü in Müller intact, whenever the file holds non-English characters. If you save the working copy as CSV, choose the UTF-8 option, then open the file once and confirm those names still read correctly.
The table below is an example for the spreadsheet fields this guide covers. Check every row against your chosen CRM's import template before importing.
| Spreadsheet field | Target CRM field/object | Custom field needed? | If no matching import field |
|---|---|---|---|
| Contact name | Person/contact record — name field | No | Create a custom field before import, or deliberately drop the column and record the decision |
| Company | Company/organisation record, linked to the contact | No | Create a custom field before import, or deliberately drop the column and record the decision |
| Contact record — email field | No | Create a custom field before import, or deliberately drop the column and record the decision | |
| Phone | Contact record — phone field | No, but phone-type fields can require an extra mapping step | Create a custom field before import, or deliberately drop the column and record the decision |
| Lead status | Lead or deal record — status/picklist field | Yes if the options are not already in the CRM | Create the custom field before import, map each option individually, or deliberately drop the column and record the decision |
| Notes | Note object — in Pipedrive, linked to an existing person, organisation, deal, lead, or project | No | Create a custom field before import, or deliberately drop the column and record the decision |
| Follow-up date | Contact or lead/deal record — date field | Yes if no standard date field exists | Create a custom field before import, or deliberately drop the column and record the decision |
Gate 5: Run a small test import
Use a non-production environment only if your CRM documents one. Otherwise, use the smallest representative test import that your CRM's documentation permits, and confirm how to remove or isolate those test records before importing.
In Pipedrive, importing is not available to every user by default — only users with the correct global permission enabled can import — so confirm your access before the dry run. HubSpot's guidance includes a file-requirements and technical-limits section; read it before exporting a large file.
The point is to find failure modes on rows like the worst of your data, not to confirm that the easy rows pass. If rows fail, the skip file lists what was not imported and why, which gives you a repair list.
Gate 6: Verify the test results
Verification is the step most people skip. Count the records in the test environment and compare the number against the source spreadsheet. Then spot-check a random sample — not the first ten rows — field by field: phone, email, status, owner, linked company. The go condition is a match on counts and no unexplained differences in the spot-check. If the test failed, the skip file names the rows that need fixing; loop back to the relevant earlier gate rather than proceeding. A test that fails and is ignored is worse than no test.
Gate 7: Run the full import with a rollback plan
Rollback is the ability to return to the pre-import state, and the two CRMs this guide names handle it differently. In Pipedrive, a user with global admin permissions can revert an import from the import history tab within 48 hours.
HubSpot's past-imports page offers deletion, not a revert. Its records view lists every record the import created or updated, and you work through each object separately, such as contacts and companies. Delete only the records the import created: an updated record existed before the import, and deleting it deletes its history. Values the import overwrote come back only from the Gate 1 snapshot.
Confirm your path before the full run, and run it only when Gate 6 passes. If your CRM documents no revert, your path is the Gate 1 snapshot plus a way to find and remove the partial result. With Pipedrive, do the post-import checks inside the 48-hour window, while the revert is still available.
After it completes, walk a short post-import checklist: verify record counts against the spreadsheet, spot-check random records rather than the first page, confirm mandatory fields have values, and check a sample of linked records such as people to organisations and notes to people. If something is wrong, stop, use the rollback path, and re-run from the failing gate with corrected data.
The hand-over test: when to stop and book a professional
Hand the job to a professional if you cannot account for rejected test rows, cannot confirm a recovery path before the full import, or cannot resolve required-field and mapping problems from the CRM’s documentation.
For this job, the relevant Niro Digital service is web app development. Niro Digital does not publish price ranges: the work gets a fixed price after a scoping call, which ends with a written scope and one number, so you can judge whether professional help fits before committing to anything. You can reach Niro Digital at info@nirodigital.com or +386 70 630 880.
Working checklist
| Gate | Owner | Completion date | Evidence checked | Failure found | Next action |
|---|---|---|---|---|---|
| 1. Snapshot and freeze | A read-only backup exists and restores | ||||
| 2. Audit columns | Every row has values for the CRM's mandatory import fields | ||||
| 3. Standardise and deduplicate | Formats follow explicit rules; duplicates removed by a written rule set | ||||
| 4. Map to the import template | Every spreadsheet column maps to a CRM field; custom fields already exist | ||||
| 5. Test import | A small sample imports cleanly into a sandbox | ||||
| 6. Verify | Record counts and spot-checks match the source | ||||
| 7. Full import with rollback | Post-import checks pass and rollback is confirmed | ||||
| Hand-over decision | You can account for every rejected test row, you have confirmed a recovery path before the full import, and you can resolve required-field and mapping problems from the CRM’s documentation |
If the verification gate shows more risk than you want to carry alone, book a strategy call.
Sources
Keep reading
Blog
Start here
Tell us the constraint
Operations, workers or customers. One sentence is enough, we'll reply within one working day.