Skip to main content
← Back to blog
Product·8 min read

Migrating from HubSpot to Prax CRM in a weekend

A practical 6-step playbook for teams switching off HubSpot — what to export, what to map, where the gotchas hide, and why it doesn't have to take a quarter.

Migrating off HubSpot has a reputation. People imagine quarter-long projects, RevOps consultants, frozen pipelines, and a launch day that ruins someone's quarter. It doesn't have to be that.

We've migrated three teams to Prax CRM in the last year — two agencies (~30 reps each) and one services business (~80 reps). All three did the cutover over a single weekend. Here's the playbook.

Step 1 — Inventory what you actually use

Before exporting anything, sit down with one rep and one admin and answer:

  • Which HubSpot objects do you actually touch weekly? (Contacts, Companies, Deals usually. Tickets, Marketing emails, Workflows often not.)
  • Which custom properties are load-bearing? (You'll find 60% of them are stale.)
  • What's your workflow that breaks if it disappears? (Lead routing, deal-stage automation, email templates.)

The list is shorter than you think. Most teams use 20% of HubSpot. The other 80% is what you're paying for and not getting value from.

Step 2 — Export the right things

From HubSpot's Reports → Export, pull:

  • Contacts — name, email, phone, company, lifecycle stage, owner, created date, custom fields you decided are load-bearing.
  • Companies — name, domain, industry, owner.
  • Deals — name, amount, stage, close date, owner, associated contact + company, custom fields.
  • Activity / engagement — only if you genuinely reference it. Most teams don't.

Skip Workflows, Lists, Forms, Marketing emails, Sequences. None of them transfer. Plan to rebuild the 3 or 4 you actually use.

Step 3 — Map HubSpot fields to Prax CRM fields

Most of the mapping is obvious; a few aren't.

HubSpot                      →  Prax CRM
─────────────────────────────────────────────
Contact                      →  Lead (initial)
                                Customer (after a Deal closes)
Company                      →  Company
Deal                         →  Sale
Lifecycle Stage (lead/MQL/SQL)
                             →  Disposition + status
Deal Stage                   →  Sale status
Owner                        →  agentId
Source                       →  source / utmSource
Activity (call/email/note)   →  Reminders + Activity Log

The non-obvious one: HubSpot's "Lifecycle Stage" collapses into our disposition + status fields. We treat dispositions as snapshot tags ("New Lead", "Qualified", "Disposed") and let the lead timeline tell the rest of the story.

Step 4 — Bulk import

From Admin → Lead Assignment → Import (CSV), drop in your transformed CSV. The import is idempotent — if you re-run with the same email or phone, the existing row is updated rather than duplicated. That's a feature: do a dry-run import on a subset, fix the mapping, then re-run on the full export.

Dedupe behaviour: leads dedupe by lowercase email first, then phone. Companies dedupe by name. Sales dedupe by orderId. Get those columns right and re-imports are safe.

Step 5 — Rebuild the 3 or 4 things that mattered

The HubSpot features people rebuild the most often:

  1. Lead routing. Use Prax's lead-assignment tab; set per-source defaults on workspace API keys.
  2. Email templates. Drop them into Email → Templates. The variable syntax is {{name}}, not HubSpot's personalisation tokens.
  3. Deal-stage notifications. The activity log already records every stage change. Wire the email wrapper for the stages you care about.
  4. Reports. Most teams find Prax's built-in dashboards cover what they used HubSpot reports for.

Step 6 — Cutover weekend

Friday afternoon → Sunday evening is the standard window. Order:

  1. Friday 5pm: freeze HubSpot edits. Tell the team "don't touch HubSpot until Monday".
  2. Friday 6pm: take final exports. Do the field mapping.
  3. Saturday: dry-run import on a test workspace. Fix mapping bugs.
  4. Saturday afternoon: import into the real workspace.
  5. Sunday: invite the team, walk one rep through their day, fix UX gaps in the access matrix.
  6. Monday morning: HubSpot stays read-only for a month as a backup. New work goes into Prax CRM.

On the first Monday, every rep should be able to find their leads, log their first call, and update a deal stage in under 5 minutes of being shown around. If something takes longer than that, the access matrix is wrong.

What we wish someone had told us

A few things from real migrations that aren't obvious until you've done one:

  • Don't migrate dead leads.Filter HubSpot to "owner != deleted" and last-activity within 12 months before exporting. The remaining 30% of contacts is your real pipeline.
  • Migrate Deals BEFORE Contacts. Counterintuitive — but if you have foreign-key references from Deals → Contacts, importing Deals first means the reverse-link survives a Contact re-import.
  • Send the team a short Loom video, not a doc. 5 minutes of someone walking through "here's where your leads live, here's where your deals live, here's where to log a call". People watch the video. They don't read the doc.
  • Keep HubSpot read-only for 30 days. You won't need it. But knowing it's there if you do gives the team confidence to commit to the new tool.

The savings

The teams we've migrated stopped paying HubSpot Marketing + Sales Pro and replaced it with Prax CRM Growth at $39/seat. For a 30-rep team that's $14k/month → $1.2k/month, an order of magnitude. The savings paid for the weekend's effort before the first Monday.

The bigger win was that nobody's pricing went up when their contact list grew past a HubSpot tier boundary. Per-seat pricing scales linearly with team size; per-contact pricing scales linearly with success.

Ready to run it?

Start the trial; do the dry-run import this weekend. If you get stuck on the mapping, email support@praxcrm.com and we'll review the CSV before you commit. Start free →

See it for yourself.

14-day free trial. No credit card. Every module on every plan.