← Back to Blog
IntegrationMarch 10, 202622 min read

CRM Data Migration Best Practices: How to Move Your Data Without Losing It

A comprehensive guide to CRM data migration covering pre-migration audits, data cleaning, field mapping, migration tools, testing strategies, and rollback planning. Avoid costly data loss with proven best practices.

↓ Read article

You have 14,000 contacts in your current CRM. Five years of deal history. Custom fields your sales team depends on daily. Notes from hundreds of client conversations. And now you need to move all of it to a new platform without losing a single record, breaking a single relationship, or disrupting your team's ability to sell for more than a weekend.

CRM data migration is one of those projects that sounds straightforward until you are in the middle of it. Export from system A, import into system B -- how hard can it be? The answer, as anyone who has attempted it knows, is that the migration itself is the easy part. The hard part is everything that happens before and after: auditing what you actually have, cleaning five years of accumulated data debt, mapping fields that do not align between platforms, testing that relationships survived the transfer, and having a plan for when something goes wrong.

This guide walks through the entire CRM data migration process from pre-migration audit to post-migration validation. We are drawing on our own experience at Sunrise Digital Labs, where we built and maintain a custom Pipedrive API integration that handles contact syncing, deal creation, deduplication, and error handling in production. We have seen firsthand what field mapping issues look like at the API level, and that perspective informs the practical advice throughout this guide.

Why CRM Data Migrations Fail

Before diving into best practices, it helps to understand the common failure modes. Most CRM migrations do not fail because of a technical limitation in the import tool. They fail because of preparation gaps.

Incomplete Data Audits

Teams skip the audit step because they assume they know what is in their CRM. Then they discover 3,000 duplicate contacts, 800 records with no email address, and custom fields that were created by someone who left the company two years ago. These surprises mid-migration cause delays, rework, and data loss.

No Field Mapping Document

The source CRM calls it "Company." The target CRM calls it "Organization." The source has a single "Full Name" field. The target expects "First Name" and "Last Name" separately. Every platform structures its data model differently, and without a detailed mapping document, fields get dropped, merged incorrectly, or imported into the wrong location.

Skipping the Test Migration

Running a test import with a subset of your data catches problems that are invisible in a spreadsheet review. Relationship links between contacts and deals, picklist values that do not match, date format mismatches, character encoding issues with international names -- these only surface when you actually run the import against the target system.

No Rollback Plan

If you discover a critical issue three days after go-live and you have already decommissioned the old system, you are in trouble. Every migration needs a defined rollback window and the ability to restore the previous state.

Phase 1: Pre-Migration Data Audit

The audit is where you establish what you are actually working with. This is not a cursory glance at your record count. It is a systematic inventory of every entity type, field, relationship, and data quality issue in your current CRM.

Inventory Your Data Objects

Start by listing every object type that contains data you need to migrate. For most CRM platforms, this includes:

  • Contacts / People -- individual person records with names, emails, phone numbers, and custom fields
  • Companies / Organizations -- business entities linked to contacts
  • Deals / Opportunities -- sales pipeline records with stages, values, and close dates
  • Activities -- calls, meetings, emails, and tasks linked to contacts or deals
  • Notes -- free-text notes attached to contacts, deals, or organizations
  • Products -- line items associated with deals
  • Custom objects -- any platform-specific entities your team has created

For each object type, document the total record count, the number of required versus optional fields, and the date range of the data.

Assess Data Quality

This is where most teams uncover surprises. Run these checks against your source data:

Duplicate detection. How many contacts share the same email address? How many organizations have slight name variations ("Acme Corp" vs "Acme Corporation" vs "ACME")? According to Salesforce's data quality guidance, standardizing data entry and conducting regular data profiling and cleansing are foundational steps that organizations often skip, leading to compounding quality issues over time.

Completeness check. What percentage of contact records have an email address? A phone number? A linked organization? Records missing critical fields may not be worth migrating, or they may need enrichment before import.

Orphaned records. Are there deals linked to contacts that no longer exist? Activities associated with deleted organizations? These broken relationships will cause import errors or create phantom records in the new system.

Stale data. When was each record last updated? Contacts who have not been touched in three years may be cluttering your pipeline without adding value. Migration is an opportunity to archive stale records rather than carrying them forward.

Document Your Custom Fields

Custom fields are the most migration-sensitive part of any CRM. Every platform handles custom fields differently. Pipedrive uses API key-based custom field identifiers -- for example, a "Lead Source" field might have an internal key like 95350fde35ea9eec6d5524c2b1d883eaa6137645. In our own Pipedrive integration at Sunrise Digital Labs, we map these keys explicitly in configuration:

function getConfig(): PipedriveConfig {
  return {
    pipelineId: Number(process.env.PIPEDRIVE_PIPELINE_ID) || 1,
    stageNewColdInboundId:
      Number(process.env.PIPEDRIVE_STAGE_NEW_INBOUND_ID) || 6,
    fieldLeadSourceKey:
      process.env.PIPEDRIVE_FIELD_LEAD_SOURCE_KEY ||
      "95350fde35ea9eec6d5524c2b1d883eaa6137645",
    optionWebsiteId: Number(process.env.PIPEDRIVE_OPTION_WEBSITE_ID) || 38,
  };
}

This matters for migration because custom field keys in the source system will not match the target system. You need to create the custom fields in the new CRM first, document their new identifiers, and build an explicit mapping between old and new keys.

Phase 2: Data Cleaning

Once you have a complete picture of your data landscape, the next step is cleaning before you migrate. Importing dirty data into a clean system just makes the new system dirty.

Deduplicate Contacts and Organizations

Deduplication is the single highest-impact cleaning step. The approach depends on your data volume:

  • Under 1,000 records: Manual review with spreadsheet sorting is feasible. Sort by email, then by company name, and visually identify duplicates.
  • 1,000-10,000 records: Use your CRM's built-in deduplication tools or export to a spreadsheet and use formulas (VLOOKUP on email, fuzzy matching on names) to flag likely duplicates.
  • Over 10,000 records: Consider a dedicated deduplication tool or write a script that applies matching rules programmatically.

When merging duplicates, decide which record is the "master" -- typically the one with the most complete data, the most recent activity, or the one your sales team is actively working.

Standardize Field Formats

Before migration, normalize your data formats:

  • Phone numbers: Choose a consistent format (E.164 international format like +14155551234 is recommended for maximum compatibility). HubSpot, for example, requires the "+[country code][number]" format for phone number imports.
  • Dates: Standardize to ISO 8601 (YYYY-MM-DD) to avoid ambiguity between US and international date formats.
  • Addresses: Separate street, city, state/province, postal code, and country into distinct fields if they are currently in a single text block.
  • Names: Split "Full Name" into "First Name" and "Last Name" if the target system requires separate fields. Handle edge cases like hyphenated names, suffixes, and single-name records.
  • Picklist values: Map every dropdown/option value from the source system to the corresponding value in the target system. Watch for values that exist in one system but not the other.

Decide What Not to Migrate

Migration is your chance to leave behind the data you no longer need. Common candidates for exclusion:

  • Contacts marked as "Do Not Contact" or unsubscribed
  • Deals closed-lost more than two years ago with no subsequent activity
  • Test records and internal accounts
  • Duplicate or superseded notes
  • Activities older than your reporting window

Document every exclusion decision so the team understands what was intentionally left behind versus accidentally dropped.

Phase 3: Field Mapping

Field mapping is the bridge between your source and target systems. It is the most detail-oriented phase of the migration and the one where small mistakes create the biggest problems.

Build a Comprehensive Mapping Document

Create a spreadsheet with these columns:

Source FieldSource TypeTarget FieldTarget TypeTransformationNotes
Full NameTextFirst Name / Last NameTextSplit on first spaceHandle single-name records
Deal ValueCurrencyAmountCurrencyNoneVerify currency code
StagePicklistDeal StagePicklistMap valuesSee picklist mapping tab
Lead SourceCustom fieldLead SourceCustom fieldMap key + valuesSource key: 95350f...
Created DateDateTimeCreate DateDateTimeFormat to ISO 8601Preserve original timestamp

Handle Relationship Mapping

CRM data is inherently relational. Contacts belong to organizations. Deals link to contacts and organizations. Activities attach to deals. When migrating, you need to preserve these relationships, which means importing in the correct order:

  1. Organizations / Companies first -- these are the parent entities
  2. Contacts / People second -- link them to their organizations using a lookup field
  3. Deals / Opportunities third -- link to both contacts and organizations
  4. Activities and Notes last -- attach to the correct deals, contacts, or organizations

If you import deals before their associated contacts exist in the target system, the relationship links will break. Most CRM import tools require a unique identifier (email address for contacts, organization name or ID for companies) to establish these associations. The HubSpot import documentation emphasizes the need for common columns across files when importing multiple related object types simultaneously.

Map Picklist and Option Set Values

Every dropdown, checkbox, and multi-select field needs explicit value mapping. The source CRM might have a "Lead Status" field with values like "New," "Contacted," "Qualified," and "Unqualified." The target CRM might use "Open," "Working," "Converted," and "Disqualified." You need a row-by-row mapping for every picklist field, and you need to create any new values in the target system before importing.

For Dynamics 365 / Power Apps environments, Microsoft's documentation on importing data into model-driven apps describes how unmapped option set values are handled during import -- the system will add mapped values but drop unmapped ones, which can silently lose data if you have not reviewed every picklist value.

Phase 4: Choosing Your Migration Approach

The right migration method depends on your data volume, technical resources, complexity of field mapping, and tolerance for downtime.

Approach 1: CSV/Spreadsheet Import

Best for: Small to medium migrations (under 50,000 records) with straightforward field mapping.

Export your source data to CSV files, apply your field mapping transformations in a spreadsheet, and import into the target CRM using its built-in import tool. Pipedrive, for example, supports XLS, XLSX, and CSV imports with a 50MB file size limit and a maximum of 50,000 rows per spreadsheet. The platform's import wizard handles field mapping through a visual interface and generates a "skip file" for any records that fail validation.

Advantages:

  • No coding required
  • Visual mapping interface in most CRMs
  • Easy to review and correct data in spreadsheets before import
  • Good audit trail through the spreadsheet files themselves

Disadvantages:

  • Manual and time-consuming for large datasets
  • Relationship linking requires careful use of identifier columns
  • Hard to automate for repeatable or phased migrations
  • File size limitations vary by platform

Approach 2: Third-Party Migration Tools

Best for: Medium to large migrations where you need automation but do not want to write custom code.

Dedicated migration platforms like Import2, Trujay, and Data2CRM specialize in CRM-to-CRM transfers. They maintain pre-built connectors for popular platform pairs and handle field mapping, deduplication, and relationship preservation through a guided interface.

Advantages:

  • Pre-built logic for common CRM pairs (Salesforce to HubSpot, HubSpot to Pipedrive, etc.)
  • Automated relationship mapping
  • Built-in deduplication
  • Progress tracking and error reporting

Disadvantages:

  • Per-record pricing can be expensive for large datasets
  • Limited customization of transformation logic
  • You are trusting a third party with your customer data
  • May not support highly custom fields or objects

Approach 3: API-Based Migration

Best for: Large or complex migrations that need custom transformation logic, incremental syncing, or integration with other systems.

Write a migration script that reads from the source CRM's API and writes to the target CRM's API. This gives you full control over data transformation, error handling, retry logic, and relationship mapping.

At Sunrise Digital Labs, our production Pipedrive integration uses this approach. We built retry logic with exponential backoff, timeout handling, and specific retry conditions for rate limiting and server errors:

const TIMEOUT_MS = 10_000;
const MAX_RETRIES = 1;
const RETRY_DELAY_MS = 1_000;

function isRetryableStatus(status: number): boolean {
  return status === 429 || status === 502 || status === 503 || status === 504;
}

This kind of resilience is essential for API-based migrations. CRM APIs enforce rate limits, and a migration script that fires thousands of requests without respecting those limits will get throttled or blocked. The Pipedrive API documentation covers rate limiting, authentication, and available endpoints for bulk operations.

Advantages:

  • Full control over every aspect of the migration
  • Can handle complex transformation logic
  • Supports incremental or phased migrations
  • Can be reused and adapted for ongoing sync
  • Built-in error handling and logging

Disadvantages:

  • Requires development resources
  • Longer setup time
  • Needs thorough testing of the migration script itself
  • Must handle API rate limits and pagination

Approach 4: Platform-Native Migration Tools

Best for: Migrations into enterprise CRM platforms that provide their own migration tooling.

Microsoft provides the Configuration Migration tool for moving data across Dynamics 365 environments. It handles schema definition, data export to .zip files, and multi-pass importing that resolves data dependencies automatically. The tool includes built-in duplicate detection based on uniqueness conditions you define per entity.

Salesforce offers Data Loader for bulk operations and the Data Import Wizard for smaller datasets. HubSpot provides a guided import workflow supporting CSV, XLSX, and XLS files with specific formatting requirements per property type.

Phase 5: Testing Strategy

Testing is where you validate that your field mapping, transformation logic, and import configuration actually work with real data. Never run your first import directly into production.

Run a Sandbox Migration First

Every major CRM platform offers sandbox or test environments. Use them. Import a representative subset of your data -- not just 10 records, but enough to cover:

  • Records with all fields populated
  • Records with minimal data (only required fields)
  • Records with special characters in names (accents, apostrophes, CJK characters)
  • Records with relationships (contacts linked to organizations and deals)
  • Records with custom field values spanning every picklist option

Validate Record Counts

After importing into the sandbox, compare record counts by object type:

Object TypeSource CountImported CountDifferenceStatus
Organizations2,3402,3400Pass
Contacts14,20014,187-13Investigate
Deals8,4508,4500Pass
Activities42,10041,890-210Investigate

Any difference needs investigation. Common causes include duplicate detection rules in the target system rejecting records, required fields missing from certain records, or character encoding issues causing validation failures.

Spot-Check Relationships

Randomly select 20-30 records and verify that their relationships survived the migration:

  • Does each contact still link to the correct organization?
  • Do deals show the right associated contacts and organizations?
  • Are activities attached to the correct parent records?
  • Do deal stage histories and timestamps match the source data?

Verify Custom Field Data

For every custom field in your mapping document, verify that values transferred correctly. Pay special attention to:

  • Picklist fields -- did every option value map to the correct target value?
  • Date fields -- did timezone conversions alter any dates?
  • Currency fields -- did decimal precision change?
  • Multi-select fields -- did all selected values transfer, or only the first one?

Test Automations and Workflows

If the target CRM has workflows or automations configured, the import might trigger them. A "New Contact" workflow that sends a welcome email would fire for every imported contact unless you disable it first. Before importing, list every active automation in the target system and decide which ones to temporarily deactivate.

Phase 6: Rollback Planning

Hope for the best, plan for the worst. A rollback plan is your safety net if the migration introduces data quality issues that are not immediately apparent.

Maintain the Source System

Do not decommission or delete the source CRM until you have validated the migration thoroughly. Keep it in read-only mode for at least 30 days after go-live. This gives your team a reference point for verifying data and a recovery source if needed.

Take a Pre-Migration Snapshot

Before importing anything into the target CRM, export its current state. If this is a new CRM instance with no existing data, this step is trivial. If you are migrating into a CRM that already has records, a full export preserves the pre-migration baseline.

Define Your Rollback Window

Establish a specific timeframe -- typically one to two weeks after go-live -- during which you can revert to the source system. During this window:

  • Both systems remain accessible
  • The team knows which system is the "source of truth"
  • New data entered in the target system is at risk of loss if a rollback is needed (so minimize new data entry during this period if possible)
  • Someone monitors error logs and data quality metrics daily

Document the Rollback Procedure

Write out the exact steps to revert. Who makes the decision? How do you switch users back to the old system? What happens to data entered in the new system during the rollback window? Having this documented before go-live prevents panic-driven decisions.

Phase 7: Post-Migration Validation

The migration is not complete when the import finishes. Post-migration validation is where you confirm that the data is not just present but usable.

Run Data Quality Reports

Build reports in the target CRM that check for:

  • Contacts with missing email addresses or phone numbers
  • Organizations with no associated contacts
  • Deals with missing stage assignments or zero values
  • Activities with no linked parent record
  • Duplicate records that survived deduplication

Validate Pipeline Integrity

If you migrated deal data, verify that your sales pipeline looks correct:

  • Deal counts per stage match expectations
  • Total pipeline value aligns with the source system
  • Deal histories and stage change dates are accurate
  • Won/lost ratios have not shifted due to data mapping errors

Conduct User Acceptance Testing

Have your sales team use the new CRM for a full day of normal work. Ask them to specifically check:

  • Can they find their key accounts?
  • Do contact details match what they remember?
  • Are recent notes and activities visible?
  • Do custom views and filters work with the migrated data?

Feedback from actual users catches issues that automated validation misses. A field might have migrated correctly by the data but display poorly in the UI, or a naming convention might confuse the team.

Monitor for 30 Days

Data issues can take weeks to surface. A report that runs on "Deals closed this quarter" might produce wrong numbers because close dates shifted during migration. An automation that fires on deal stage changes might behave unexpectedly with imported historical data. Active monitoring during the first month is essential.

Dynamics CRM Data Migration: Special Considerations

For organizations migrating to or from Microsoft Dynamics 365, there are platform-specific considerations worth highlighting. Dynamics CRM data migration involves the Microsoft Power Platform's data infrastructure, which structures data differently from SaaS-first CRMs like Pipedrive or HubSpot.

The Dataverse Data Model

Dynamics 365 stores data in Microsoft Dataverse (formerly Common Data Service), which uses a relational data model with strict entity definitions. Custom fields are called "columns" and custom objects are called "tables." This terminology difference matters when building your field mapping document.

Import Tools for Dynamics 365

Microsoft provides multiple import paths as documented in their Power Apps import guide:

  • Excel Import -- supports .xlsx, .csv, and .xml formats with a maximum file size of 8 MB (32 MB for .zip files). The system auto-maps columns when header names match, but you can manually adjust mappings.
  • Configuration Migration Tool -- designed for moving data between Dynamics 365 environments, with built-in schema validation and multi-pass import to resolve entity dependencies.
  • Dataverse Web API -- for programmatic migrations with full control over the data transformation pipeline.

Dynamics-Specific Pitfalls

  • Lookup columns require special handling during import. If your source data includes references to other records (a contact's "Parent Account"), you must ensure the referenced records are imported first and use their Dataverse identifiers in the lookup column.
  • Option sets (picklists) must be mapped explicitly. Unlike some platforms that create new values on the fly, Dynamics 365 requires that option set values exist in the system before import, or they will be dropped.
  • Business rules and plugins may fire during import, creating unexpected side effects. Disable them during the migration and re-enable after validation.

Frequently Asked Questions

How long does a typical CRM data migration take?

Timeline depends on data volume and complexity. A simple migration of under 10,000 records from one mainstream CRM to another can be completed in one to two weeks, including cleaning and validation. Migrations involving 100,000+ records, complex custom objects, or multiple source systems typically take four to eight weeks. The largest factor in timeline is usually data cleaning, not the actual import.

Should we migrate historical data or start fresh?

This depends on your business requirements. Active deals, current contacts, and recent activities (last 12-24 months) are almost always worth migrating. Historical closed deals are valuable if your team relies on pipeline analytics and trend reporting. Data older than three to five years rarely justifies the effort unless you have regulatory retention requirements. A practical middle ground is migrating all contacts and organizations but only deals and activities from the last two years.

Can we run both CRM systems in parallel during migration?

Yes, and we recommend it for complex migrations. Run the old and new systems simultaneously for one to two weeks after the initial import. During this period, your team uses the new system as the primary platform but can reference the old system to verify data. The risk of parallel operation is that new data entered in one system will not appear in the other unless you set up a temporary sync, so keep the parallel window short.

What is the biggest risk in CRM data migration?

Broken relationships are the highest-impact failure mode. If the links between contacts, organizations, and deals are lost or scrambled during migration, your team loses context that took years to build. A contact that used to be associated with five deals and thirty activities becomes an isolated record with no history. This is why relationship validation is the most critical step in post-migration testing.

How do we handle data that exists in the old CRM but has no equivalent field in the new one?

You have three options: create a custom field in the target CRM to hold the data, concatenate it into a notes field as a text dump, or decide to drop it. The right choice depends on how the data is actually used. If your sales team actively filters or reports on a custom field, create the equivalent in the new system. If it is informational context that someone might read occasionally, a notes field works. If no one has looked at the field in a year, dropping it is often the right call.

Working With a Migration Partner

CRM data migration is one of those projects where the stakes are high and the margin for error is small. Your CRM data represents years of customer relationships, deal history, and institutional knowledge. Losing it -- or corrupting it -- has immediate operational consequences.

At Sunrise Digital Labs, we specialize in CRM integrations and data migration projects. Our team has hands-on experience with the Pipedrive API, building production integrations that handle deduplication, retry logic, and field mapping at the code level. If you are planning a CRM migration and want to make sure your data arrives intact, we would be glad to help you plan and execute it. For a broader understanding of how CRM integration works across platforms, our guide on what CRM integration is and how to approach it covers the full landscape.

Get in touch with our team to discuss your migration project.

Sources

  1. Salesforce -- Quality Over Quantity: 5 Steps to Cleaner, More Effective Data
  2. Pipedrive Blog -- CRM Data Migration: 5 Methods for Transferring Your Customer Data
  3. Pipedrive Support -- Importing Data into Pipedrive with Spreadsheets
  4. HubSpot Knowledge Base -- Set Up Your Import File
  5. HubSpot Knowledge Base -- Import Objects
  6. Microsoft Learn -- Import Data in Model-Driven Apps (Dynamics 365 / Power Apps)
  7. Microsoft Learn -- Move Configuration Data Across Organizations (Power Platform)
  8. Pipedrive API Reference
CRM IntegrationData MigrationPipedriveSalesforceHubSpot

Have a Project in Mind?

We build custom software, SaaS products, and web applications. Let's talk about what you need.

Get in Touch