How to migrate from Highrise to HubSpot without losing your email history

By Ali Ismail · October 27, 2026 · 3 min read

Short answerExport the raw Highrise data to disk before touching it, decide what actually moves, upsert records into HubSpot on a unique Highrise ID, then load notes and emails through HubSpot’s Import API with their original timestamps and check every count against the source.

Moving contacts out of Highrise is the easy part. The part that goes wrong is the history: years of notes and emails that end up unattached, duplicated, or stamped with the date of the import instead of the date they happened. Here is the approach I used on a recent migration that moved 16,042 contacts, 307 companies, 9,808 notes and 97,558 emails into HubSpot, each attached to the right record and dated to its original Highrise timestamp.

1. Back up the raw data before you transform anything

Write a full export of the Highrise data to disk first, in its original shape, before any cleanup or mapping. I used a resumable Python exporter that wrote raw JSONL files as it went, so an interrupted pull could pick up where it stopped.

This matters for two reasons. A large pull can be interrupted partway, and you don’t want to start over each time. And once the raw copy exists, every later step can be re-run from it without going back to Highrise.

2. Decide what actually moves

Not everything in an old CRM deserves a place in the new one. On this project the export held 19,951 contacts, 546 companies, 11,490 notes and 170,714 emails, and the business only needed part of it.

Pick a rule that matches how the business works. Here it was the Highrise author of each record, not territory. Then expand the selection: every contact and company referenced by a note or email you’re keeping has to come along too, or that history arrives with nothing to attach to.

3. Prepare HubSpot before the first load

  • Create a unique property for the Highrise ID on contacts and companies, for example highrise_id. This is what makes the rest of the migration safe to repeat.
  • Switch off automatic company creation for the duration of the load. Otherwise HubSpot can create companies from contact email domains, and you end up with phantom companies alongside the real ones you’re importing.
  • Map fields to properties and create any custom properties you need before loading data into them.

4. Load records as upserts on the Highrise ID

Load contacts and companies in batches as upserts keyed on the unique Highrise ID. If a batch fails halfway, or you need to fix a mapping and run it again, the re-run updates existing records instead of creating duplicates.

Clean up while you load rather than afterwards. On this project that meant:

  • repairing malformed phone values,
  • dropping 200 duplicate-email rows and keeping the first owner,
  • removing stray companies, and
  • skipping records with empty bodies.

5. Load the history with its original dates

Notes and emails are the part that’s easiest to get wrong. I loaded them through HubSpot’s Import API, associated each one back to its existing contact or company, and preserved the original Highrise timestamp so the timeline in HubSpot reads the same as it did in Highrise.

Watch for duplicate content. On this project the same email often appeared more than once, and collapsing roughly 645 duplicate-content emails kept the timelines readable without losing a single unique message.

6. Verify against the source

Before anyone signs off, reconcile counts by object between the source selection and HubSpot: contacts, companies, notes and emails. Spot-check a handful of records end to end, comparing the Highrise timeline with the HubSpot timeline for the same person.

A checklist you can reuse

StepWhat to check
Raw backupFull export on disk, re-runnable without the source
ScopeSelection rule written down, referenced records included
HubSpot prepUnique source ID property, auto company creation off
RecordsUpserts on the source ID, cleanup rules applied
HistoryNotes and emails associated, original timestamps kept
VerificationCounts reconciled, sample timelines compared

If you’re planning a move off Highrise or another CRM and want the history to survive it, that’s exactly the work I do.

Need this done for you?

Move off your old CRM with every record, association, and activity date intact.

CRM Data Migration

Written by Ali Ismail, who runs TechPad and builds HubSpot integrations, migrations and automation.

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