CRM data migration to HubSpot, with your history intact

A migration is only finished when the history arrives too: every note and email attached to the right record, on its original date. That’s the part I focus on.

Short answerBack up the raw source first, decide what actually moves, load records on a unique source ID so re-runs can’t duplicate, then attach the activity history with its original timestamps and check every count against the source.

What I migrate

  • Contacts and companies, with owners and custom fields mapped to HubSpot properties.
  • Activity history such as notes and emails, associated to the right records and dated correctly.
  • Cleanup on the way through: duplicates, malformed phone numbers, stray companies and empty records.

How a migration runs

  1. Raw backup first. A resumable export writes the untouched source data to disk before anything is transformed, so nothing depends on one clean run.
  2. Decide what moves. Segment the data so only what you need lands in HubSpot, then pull in every record that a kept note or email refers to.
  3. Prepare HubSpot. For example, switch off automatic company creation during the load so it doesn’t produce phantom companies.
  4. Load safely. Batch upserts keyed on the source ID, so any step can be re-run.
  5. Attach the history. Notes and emails loaded and associated back to their records with original timestamps.
  6. Verify. Counts reconciled against the source before you sign off.

A recent example

A US real estate brokerage needed to leave Highrise for its own HubSpot portal after an earlier conversion by its parent organization had gone badly. The migration landed 16,042 contacts, 307 companies, 9,808 notes and 97,558 emails, all associated and dated to their original Highrise timestamps. Along the way it dropped 200 duplicate-email rows and collapsed roughly 645 duplicate-content emails without losing data. Read the write-up.

Common questions

Will my notes and emails keep their original dates?
They can. On my last Highrise migration, 9,808 notes and 97,558 emails were loaded through HubSpot’s Import API and associated to their contacts and companies with the original Highrise timestamps.
How do you avoid creating duplicates?
Every record carries its ID from the old system in a unique HubSpot property, and every load is an upsert on that ID. Running the migration again updates records instead of copying them. Duplicates that already exist in the old CRM are cleaned up during the move.
Do we have to move everything?
No. Deciding what is worth moving is part of the work. On the Highrise project, 19,951 contacts were extracted and 16,042 were migrated after segmentation, along with every contact and company referenced by a note or email that was kept.
Which CRMs can you migrate from?
Any CRM with an API or a complete export. My most detailed recent migration was from Highrise to HubSpot.

Have a system that needs to talk to HubSpot?

Book a free 30-minute call. Bring the messy version and I’ll help you work out what to fix first.

Book a call