Skip to main content
QuantLab Logo

MOFU Migration Playbook · 2026

CRM Data Migration from Spreadsheets: Step-by-Step Playbook

The 9-step playbook for moving a sales team from Excel or Google Sheets to a real CRM. Schema design, dedup strategy, history preservation, parallel run, rollback, and going live without losing the team's trust.

By Bill Beltz, founder of QUANT LAB USA INC · Published May 12, 2026

Quick answer: how do I migrate from spreadsheets to a CRM?

Nine steps: 1) Inventory every spreadsheet and identify owners. 2) Design the target schema. 3) Profile the source data for quality and gaps. 4) Build the ETL with a sales-side migration lead. 5) Three-pass dedup with rep validation. 6) Stage in a test environment. 7) Run CRM and spreadsheets in parallel for 2 to 4 weeks. 8) Train reps with group sessions plus 1:1s. 9) Cut over on a Friday afternoon with the team paused, validate Saturday, soft-launch Monday. Migrations fail on people, not on data — invest in change management.

Sales teams that run on spreadsheets do it for a reason. The sheet bends to the rep's workflow. The CRM rep hires impose a schema that the sales team did not design. Most CRM rollouts fail not because the CRM is bad but because the migration loses the team's trust.

This playbook is what we ship at QUANT LAB USA when we migrate sales teams onto a custom CRM or onto HubSpot/Pipedrive/Close. The mechanics are the same regardless of destination. See also our Salesforce migration checklist.

The 9 steps

  1. Inventory every spreadsheet and identify owners
  2. Design the target schema
  3. Profile the source data
  4. Build the ETL with a sales-side migration lead
  5. Three-pass dedup with rep validation
  6. Stage in a test environment
  7. Parallel run for 2 to 4 weeks
  8. Train reps with group sessions plus 1:1s
  9. Cutover with rollback plan

Step 1: Inventory every spreadsheet

Most sales teams have 3 to 30 spreadsheets in active use. Find them all. Talk to every rep, every sales ops person, every marketing lead. Ask: 'What spreadsheet do you open at the start of each day?' and 'What sheet do you use to pull weekly reports?' The answers will surprise you.

Catalog: owner, purpose, row count, last modified, columns, who else has access. Identify which sheets are canonical and which are derived. The derived ones can be auto-generated post-migration; the canonical ones are the migration source.

Step 2: Design the target schema

The CRM schema is the model your team will live in for years. Get it right. Standard objects for B2B sales:

  • Account / Company: the buying organization
  • Contact: individual people at the account
  • Opportunity / Deal: the active sales process
  • Activity: calls, emails, meetings, notes
  • Owner: the rep responsible

Add custom fields only when they earn their place. Each custom field costs cognitive load. We commonly start with 10 to 15 custom fields per object and grow from there. See our Custom CRM Development Guide for deeper schema patterns.

Step 3: Profile the source data

Before you transform anything, profile the source. Questions to answer per spreadsheet:

  • Total row count and unique-row count after trivial dedup
  • Column-level null rate
  • Date column formats (one column will have 5 different formats)
  • Status column values (one column will have 20 free-text variants)
  • Email validity (regex check)
  • Phone normalizable rate
  • Cross-sheet collisions (same email in 3 sheets, different status in each)

Output a 1-page profile per sheet. Share with the migration lead. Decisions about data treatment must be explicit, not implicit.

Step 4: Build the ETL

Build an ETL pipeline that is rerunnable. Migrations are not one-shot. Expect to run the ETL 5 to 15 times during validation. Each run should reset the staging environment.

Stack we use:

  • Python or TypeScript scripts for transformation
  • Source: gspread or pandas for Sheets/Excel
  • Destination: CRM API (HubSpot, Pipedrive) or direct Postgres for custom CRMs
  • Logging at every transformation step
  • Reject queue for rows that fail validation
  • Idempotent imports keyed on a stable external_id

Step 5: Three-pass dedup with rep validation

Dedup is where automated migrations fail. The three-pass approach:

  1. Pass 1 (high confidence): Exact email match. Auto-merge with the most-recent record winning on conflicting fields.
  2. Pass 2 (medium confidence): Fuzzy email match (whitespace, case), name match within company. Flag for review.
  3. Pass 3 (low confidence): Phone normalization match, name + company match. Always flag for review.

For passes 2 and 3, the migration lead reviews flagged matches. Approve, reject, or merge with custom field selection. Budget 2 to 8 hours of migration lead time per 10K records.

Step 6: Stage in a test environment

Never migrate directly to production. Stage in a copy environment that the migration lead and 1 to 2 reps can validate. Look for:

  • Record counts match expected (source minus dedups)
  • Sample contacts open correctly (5 random per rep)
  • Sample deals show correct stage
  • Activity history attached to correct contacts
  • Reports run without errors
  • Search returns expected results
  • Permissions enforce correctly

Iterate the ETL until the staging environment passes rep validation. Most migrations run staging through 3 to 8 cycles.

Step 7: Parallel run for 2 to 4 weeks

Once staging passes, promote to production but keep spreadsheets in read-write mode. Reps use both systems for 2 to 4 weeks. Daily sync from spreadsheets to CRM during this period catches any data the team enters into the sheet that did not get into the CRM.

Track usage. If reps are still entering data in spreadsheets after 2 weeks, something is missing in the CRM and you need to fix it. If usage is shifting to the CRM, schedule the cutover.

Step 8: Train reps

Two-format training:

  • Group walkthrough (60 minutes): daily workflow, key features, where to find things. Record it.
  • Per-rep 1:1 (30 minutes each): sit with each rep, open their pipeline, walk them through their first hour in the new system.

Group-only training fails for 30 to 50% of reps. The 1:1s catch the workflow-specific issues. Pay your time for the 1:1s — it is the cheapest insurance on adoption.

Step 9: Cutover with rollback plan

Cutover on Friday afternoon. Team pauses entering new data into spreadsheets. ETL runs the final sync. Validation checks fire. Migration lead spot-checks 10 records per rep.

Spreadsheets go read-only Friday evening. Saturday morning: validate again. Monday morning: soft launch — team starts using the CRM as their primary system. Spreadsheets remain read-only for 30 days as a rollback option.

If a rollback is needed: revert CRM to read-only, return spreadsheets to read-write, debug the issue, replan the cutover. Never delete the source data during the rollback window.

Migration timeline reference

Data complexityCalendar weeksEngineering cost
Single sheet, <5K contacts, low dedup need2 to 4$5K to $15K
Multiple sheets, 10K to 50K contacts, light dedup4 to 6$15K to $30K
Many sheets, 50K to 200K contacts, complex dedup, activity history6 to 10$30K to $60K
Enterprise — multiple regions, languages, regulatory constraints10 to 20$60K to $150K

Post-migration: data hygiene

Migration is not the end. Data quality decays within 3 to 6 months without active hygiene. Build in:

  • Field validation rules (required, format, dropdown)
  • Monthly dedup review by sales ops
  • Auto-archive of contacts with no activity in 12+ months
  • Quarterly schema audit (are fields still earning their place?)
  • CRM adoption metrics (records updated per rep per week)

For ROI math on a clean CRM rollout, use our CRM ROI calculator.

FAQ

How long does a spreadsheet-to-CRM migration take?

2 to 8 weeks of calendar time for the migration itself, depending on data volume, dedup complexity, and how messy the source data is. The actual ETL work is usually 1 to 3 weeks of engineering. The other time is spent on team alignment, change management, and parallel-run validation. Cutover day takes 2 to 6 hours of hands-on work plus standby for issues.

How much does CRM migration cost?

Light migrations (under 5K contacts, single source spreadsheet): $5K to $15K. Standard mid-market migration (10K to 100K contacts, multiple spreadsheets, light dedup): $15K to $40K. Complex migrations (multiple sources, deep dedup, historical email/activity preservation, custom field mapping): $40K to $120K.

Should I migrate to a SaaS CRM or a custom CRM?

Most teams should pick a SaaS CRM (HubSpot, Pipedrive, Close) as the first migration target. Custom CRM becomes the right answer when the SaaS CRM cannot model your sales motion, or when per-seat economics break above 30 to 50 reps. We have built custom CRMs for clients whose Salesforce bill hit $300K a year and whose data model the platform fought.

What is the biggest risk in spreadsheet-to-CRM migration?

Trust loss with the sales team. If a rep opens the CRM on day one and their pipeline looks different from what they had in the spreadsheet, they will abandon the CRM and go back to the spreadsheet. The fix: parallel run for 2 weeks, validate at the individual rep level, and let reps confirm their data before cutover. Bad migrations fail on people, not on data.

How do I handle duplicate contacts?

Three-pass dedup. Pass 1: exact match on email (high confidence). Pass 2: fuzzy match on email domain + name (medium confidence, flag for review). Pass 3: phone normalization + company match (low confidence, review). Reps validate the ambiguous matches. Auto-merging without human review burns trust.

Can I preserve email history during migration?

Yes, if your source has it or you have backup access. The pattern: export email threads from Gmail/Outlook with the contact email as the join key, transform into CRM-compatible activity records, import with proper timestamp preservation. Volume can be heavy — 100K contacts often imply 1M to 5M activity records. Plan storage and import API rate limits accordingly.

Should I migrate everything or start fresh?

Migrate the last 12 to 24 months of active records. Archive older inactive data in cold storage that the CRM can reference if needed. Migrating 10 years of legacy spreadsheet data into a new CRM is usually a mistake — it pollutes search, slows reporting, and confuses reps. Active book of business plus 12 to 24 months of context is the right scope.

What if my spreadsheets are inconsistent across reps?

Treat each rep's sheet as its own source. Map each one to the canonical schema separately. Reconcile naming conventions (Status: 'Open' vs 'In Pipeline' vs 'Active' all collapse to one value). This adds 30 to 50% to the engineering time but is unavoidable if the source data is heterogeneous. Plan for it.

How do I roll back if the migration goes wrong?

Keep the source spreadsheets intact during the entire migration. Cutover does not mean deletion. Run the CRM in parallel with read-only spreadsheet access for at least 30 days. If the migration is unrecoverable, you have not lost the source data. Most rollbacks happen because of trust failure, not data corruption.

Should I assign a 'migration lead' from sales?

Yes — non-negotiable. The migration lead validates data at the rep level, owns the parallel-run validation, and represents the team in the daily standup. Without a sales-side owner, engineering ships a technically clean migration that the team rejects. Pay the migration lead overtime if needed; it is the cheapest insurance in the project.

How do I train reps on the new CRM?

Two formats. A 60-minute group walkthrough that covers the daily workflow. Then per-rep 30-minute 1:1s where you sit with each rep, open their actual pipeline, and walk them through their first day in the new system. Group training alone fails for 30 to 50% of teams; the 1:1s recover that.

What about ongoing data hygiene after migration?

Implement field validation rules (required fields, format constraints, dropdown values). Schedule monthly dedup reviews. Auto-archive contacts with no activity in 12+ months. Most CRM data quality decay starts in month 3 to 6 after launch — set the hygiene cadence early.

Plan your migration with someone who has done this.

Free 30-minute migration scoping call. Tell us about your spreadsheets, your team, and your target CRM. We will sketch the plan and a fair budget.

Or call Bill at (770) 652-1282
All blog postsUpdated May 12, 2026