Highrise to HubSpot migration with full activity history

A brokerage left Highrise for its own HubSpot portal, with 97,558 emails and 9,808 notes kept on their original dates.

Industry: Real estate brokerage

16,042contacts migrated
307companies migrated
9,808notes, on original dates
97,558emails, on original dates

The situation

A US real estate brokerage operating under a larger umbrella organization needed to leave Highrise for its own HubSpot portal. The umbrella organization’s own conversion had gone badly, so migrating directly from the source was the only safe path.

What I built

  • A resumable Highrise exporter in Python that wrote raw JSONL backups before any transformation, so the pull could survive interruption and be re-run without data loss.
  • A segmentation pass to decide what actually moved, keyed on the Highrise author rather than territory, then expanded to include every contact and company referenced by a kept note or email.
  • Idempotent batch upserts into HubSpot, keyed on a unique highrise_id property, so re-runs never duplicated a record.
  • Activity history loaded through HubSpot’s Import API and associated back to existing records, with the original timestamps preserved.

Scale

From Highrise, the export pulled 19,951 contacts, 546 companies, 11,490 notes and 170,714 emails. After segmentation, 16,042 contacts, 307 companies, 9,808 notes and 97,558 emails landed in HubSpot, all associated and dated to their original Highrise timestamps.

Data quality handled on the way

  • Disabled automatic company creation during the load to stop phantom companies, and removed stray ones.
  • Repaired malformed phone values.
  • Dropped 200 duplicate-email rows, keeping the first owner.
  • Collapsed roughly 645 duplicate-content emails with no data loss.
  • Skipped records with empty bodies.

Stack

PythonHighrise APIHubSpot CRM APIHubSpot Import APIJSONLCSV

Related service: CRM Data Migration.

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