Niro Digital

CRM and sales

Excel to CRM migration: a seven-gate plan that keeps your customer history

//August 21, 2026 · 13 min read · Updated October 15, 2026

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.

GateGo conditionIf it fails
1. Snapshot and freezeA read-only backup exists and restoresFix the backup before editing anything
2. Audit columnsEvery row has values for the CRM's mandatory import fieldsFill or remove rows before mapping
3. Standardise and deduplicateFormats follow explicit rules; duplicates removed by a written rule setRework until the rules apply cleanly
4. Map to the import templateEvery spreadsheet column maps to a CRM field; custom fields already existResolve unmapped fields
5. Test importA small sample imports cleanly into a sandboxRead the skip file and loop back
6. VerifyRecord counts and spot-checks match the sourceFix the named rows and retest
7. Full import with rollbackPost-import checks pass and rollback is confirmedRoll 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.

FieldInconsistentStandardised
Phone077-1234-567+44 77 1234 567
Phone031 555 123+386 31 555 123
Emailj.doe@companyj.doe@company.com (corrected at source)
Date05/04/20242024-04-05 (use the order the CRM expects)
Statusnew / NEW / NewNew
CompanyACME Corp. / Acme CorporationAcme 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 fieldTarget CRM field/objectCustom field needed?If no matching import field
Contact namePerson/contact record — name fieldNoCreate a custom field before import, or deliberately drop the column and record the decision
CompanyCompany/organisation record, linked to the contactNoCreate a custom field before import, or deliberately drop the column and record the decision
EmailContact record — email fieldNoCreate a custom field before import, or deliberately drop the column and record the decision
PhoneContact record — phone fieldNo, but phone-type fields can require an extra mapping stepCreate a custom field before import, or deliberately drop the column and record the decision
Lead statusLead or deal record — status/picklist fieldYes if the options are not already in the CRMCreate the custom field before import, map each option individually, or deliberately drop the column and record the decision
NotesNote object — in Pipedrive, linked to an existing person, organisation, deal, lead, or projectNoCreate a custom field before import, or deliberately drop the column and record the decision
Follow-up dateContact or lead/deal record — date fieldYes if no standard date field existsCreate 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

GateOwnerCompletion dateEvidence checkedFailure foundNext action
1. Snapshot and freezeA read-only backup exists and restores
2. Audit columnsEvery row has values for the CRM's mandatory import fields
3. Standardise and deduplicateFormats follow explicit rules; duplicates removed by a written rule set
4. Map to the import templateEvery spreadsheet column maps to a CRM field; custom fields already exist
5. Test importA small sample imports cleanly into a sandbox
6. VerifyRecord counts and spot-checks match the source
7. Full import with rollbackPost-import checks pass and rollback is confirmed
Hand-over decisionYou 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.

Keep reading

Blog

All posts
  1. // · AI automation · 10 min read

    Make, Zapier or n8n: which fits your process, and when to write code

    Make, Zapier and n8n count usage differently, keep your data in different places and suit different people. Choose by the process, the data and who maintains it, and switch to custom code when the workflow becomes core to how you work.

  2. // · Advertising · 10 min read

    Lead generation campaigns: what to set up before the first euro

    A paid lead generation campaign is a chain from the ad to a sales conversation. Most of the money is lost after the form, so six things have to be in place before you spend anything on ads.

  3. // · Advertising · 10 min read

    Blue-collar recruitment ads: what to set up before launch

    Paid social ads can bring in applications from drivers, operators and production workers. Whether those applications are useful, you decide before launch, with seven things you set up before the first euro of ad spend.

Start here

Tell us the constraint

Operations, workers or customers. One sentence is enough, we'll reply within one working day.

One more field on the next page, your name, and it's sent. No newsletter. A person replies.