Nobody talks about data migration the way they talk about the CRM itself.
The CRM gets the pitch deck, the demo, the enthusiastic kickoff meeting. The data migration gets a line item in the scope document and a vague reassurance that it will "all come across cleanly."
It often doesn't. And a CRM that starts life with duplicate contacts, broken associations, wrong field mappings, and missing deal history is a CRM your team will distrust before they have had a chance to use it properly. You don't get a second first impression with your own data.
This is the checklist that prevents that. What to do before any migration starts, how to map your fields correctly, and how to validate that what arrived is actually what you sent.

Before You Touch Anything: The Pre-Migration Audit
The most common migration mistake is starting the import before reviewing the source data. Messy data migrated correctly still produces a messy CRM, just in a different system.
Open your current system and look at what's actually there. Not what you think is there. The four things to look for:
Duplicates. The same contact or company appearing under multiple records, often with slightly different email addresses, phone number formats, or name spellings. These need to be merged before migration, not after. Importing duplicates into HubSpot and then merging them later is significantly more work. And any automation that fires during the window where duplicates exist can produce incorrect results.
Incomplete records. Contacts missing email addresses can't be used in email automation or tracked in HubSpot meaningfully. Companies with no associated contacts are difficult to attribute activity to. Decide upfront whether incomplete records should be migrated, held back until completed, or excluded.
Inconsistent formatting. Phone numbers in five different formats. Company names in title case, UPPERCASE, and random lower case. Date fields formatted as text strings. These create problems in segmentation, personalisation, and any automation that reads property values as a condition. Standardise formatting in the source data before you export.
Outdated records. Contacts you haven't interacted with in three or more years, unsubscribed contacts who have explicitly opted out, closed deals from companies that no longer exist. Migrating everything regardless of relevance inflates your contact count, skews your reporting, and makes segmentation less useful. Be deliberate about what you're bringing across.
Understanding HubSpot's Object Structure
Before mapping fields, you need to understand what you're mapping them to.
HubSpot organises data into four core objects: Contacts, Companies, Deals, and Tickets. Each has its own properties and associations. A contact associates with a company, a deal associates with both.
This matters because a single row in your spreadsheet often needs to be split across multiple objects in HubSpot. A row containing a contact name, email, company name, deal value, and deal stage needs to become a contact record, a company record, a deal record, and the correct associations between all three, not just a flat import.
HubSpot allows importing multiple object types in a single file using a record ID column for each object. This is more efficient than separate imports and then manually building associations. But it requires the file to be structured correctly before you start.
The Field Mapping Process
Field mapping is the step where you decide where each piece of data in your source system lands in HubSpot. Get it right and the migration is clean. Get it wrong and you spend weeks finding out that a critical property is empty because it mapped to the wrong field, or that a field that exists in your old system has no equivalent in HubSpot and needs a custom property created before the import runs.
Step 1: Export your source data and list every column header.
For each field note: what it contains, what format the data is in, whether it's consistently populated, and whether it's required for any process your team runs.
Step 2: Map each source field to a HubSpot property.
For each field in your source data, identify the corresponding HubSpot property. Some will map directly - First Name maps to First Name, Email maps to Email, Company Name maps to Company Name. Others will require decisions.
Common mapping decisions for small businesses:
- Notes or free-text fields from a legacy CRM may not have a direct HubSpot equivalent. These can be imported as the Body field of a Note activity associated with the contact, or as a custom single-line or multi-line text property. Decide before the import which approach suits the way your team will use that data.
- Custom stages or categories from another system need to be mapped to the closest HubSpot equivalent: Deal Stage, Lifecycle Stage, or a custom property. If the stages don't map cleanly, create a custom dropdown property in HubSpot before the import so the original values are preserved.
- Phone number fields - HubSpot has specific phone number properties (Mobile Phone Number, Phone Number) that accept formatted numbers. If your source data has multiple phone number fields, decide which maps to which HubSpot property and whether any should be combined.
- Lead source or acquisition channel - if your source system has a field indicating how a contact was acquired, this can map to HubSpot's Original Source property, or to a custom property if your source values don't match HubSpot's source categories. Note that HubSpot's Original Source is set automatically when a contact is created via a tracked channel, importing a value to this field will override the automatic detection for historical contacts.
Step 3: Identify gaps - fields that exist in HubSpot but have no data, and fields in your source data that have no HubSpot equivalent.
For HubSpot properties that will be empty after migration (because your source system didn't capture that data), decide whether those properties need to be populated before automation is built, or whether they'll be filled in over time as the team uses the platform.
For source data fields that have no HubSpot equivalent, create custom properties in HubSpot before the import. Do this via Settings > Data Management > Properties, selecting the correct object type and property type (single-line text, multi-line text, dropdown, number, date, etc.) for the data.
Step 4: Produce a written field mapping document.
Before the import runs, produce a document that maps every source field to its destination HubSpot property, notes the data type, and flags any fields requiring manual review. This document is the single source of truth if questions arise during or after the import, and if you're working with a CRM setup service, it's the document that prevents the "I thought that was included" conversation.
The Import Itself: What to Do and What to Avoid
Use HubSpot's import tool, not a third-party import service, for standard object imports. HubSpot's native import (found under Contacts, Companies, Deals, or in the Import centre) handles the mapping interface, runs duplicate checking at the time of import, and creates the associations between objects correctly when the import file is structured with the right columns.
Run a test import before the full migration. Take a sample of 50 to 100 records, representative of the range of data in your full dataset, and import them first. Check that every field mapped correctly, that associations were created between contacts and companies, and that any required properties are populated. Fix any issues in the source data and update the mapping document before running the full import.
Don't import unsubscribed contacts without the correct opt-out status. HubSpot's Email Subscription settings control which contacts can receive marketing emails. If your source system has contacts who have unsubscribed or opted out, those records need to arrive in HubSpot with the correct subscription status, not as standard contacts who will then be inadvertently included in the next email send. HubSpot allows you to manage subscription statuses during import via the import settings.
Deduplication happens before and after. Run deduplication in your source data before the import. After the import, HubSpot's Manage Duplicates view (found in Contacts > Actions > Manage Duplicates) identifies likely duplicate records automatically based on email address and similar name patterns. Review this view in the days after a migration and merge any matches that the pre-import deduplication missed.-4.jpeg?width=350&height=346&name=_%20(6)-4.jpeg)
Post-Migration Validation Checklist
Before the CRM is handed to the team, run through this validation list:
Contact records
- All contacts have a valid email address or are flagged as having none.
- Phone numbers are formatted consistently.
- Lifecycle stage is populated for all records.
- Original source is populated for historical contacts where available.
- Unsubscribed contacts show the correct subscription status.
Company records
- Company name is populated for all records.
- Associated contacts are correctly linked.
- Industry, size, and other standard fields are populated where available.
Deal records
- Deal name, amount, and close date are populated.
- Deal stage is mapped to the correct HubSpot pipeline stage.
- Associated contacts and companies are correctly linked.
- Deal owner is assigned.
Associations
- Each contact is associated with their correct company.
- Each deal is associated with the relevant contacts and companies.
- No orphaned deals (deals with no contact association) unless deliberately excluded.
Reporting check
- Run a contact report filtered by lifecycle stage and confirm the distribution matches expectations from the source data.
- Run a deal pipeline report and confirm deal count, total value, and stage distribution match the source.
- Check the lead source breakdown in HubSpot's Traffic Analytics to confirm original source data imported correctly.
When to Bring In a CRM Setup Service
If your source data is a single spreadsheet with consistent formatting and no complex associations, a self-managed migration using HubSpot's native import tool and this checklist is achievable.
If your data involves multiple source systems, a legacy CRM, custom objects, or large volumes of historical activity - the risk of going it alone is real. The cost of getting migration wrong is almost always higher than the cost of getting it right the first time.
-Mar-19-2026-03-45-25-2630-AM.jpeg?width=380&height=304&name=_%20(4)-Mar-19-2026-03-45-25-2630-AM.jpeg)
Conclusion
Data migration isn't the exciting part of a CRM setup. But it's the part that determines whether the team trusts the platform from day one or spends the first six months compensating for a foundation that wasn't solid.
Clean the data before you export. Map the fields before you import. Validate the results before you hand over the keys. And document every decision so that whatever questions arise six months from now, the answers already exist.
If your migration is more complex than a spreadsheet, we can manage the whole process. Contact us.
Want to know more? Subscribe to our YouTube channel for deep-dives and HubSpot tutorials from our experts. Follow us on Facebook to stay in the loop with the latest HubSpot updates.
Happy optimising!