Playbook · CRM Migration

The CRM Migration playbook.

Everything an architect or engineer needs to move a company from one CRM to another — HubSpot ↔ Salesforce, or two orgs merged after an acquisition — end-to-end: Blueprint → Build → Enable → Maintain. It's the highest-blast-radius project we run. Start with the five-minute audio brief, then open the repo.

4Phases
$75kThe thin-blueprint tax
SF ↔ HSBoth ways + merger
0Surprises at cutover
Watch or listen first · 5 min

The audio brief.

One narrator, five minutes, the whole shape of the project — now with the deck that runs alongside it. Play it before you open anything else; it's the fastest way to get into the right mindset for a migration. In a hurry? Change the speed under the deck — it sticks next time.

0:00 / 0:00
Speed
1 / 1
Chapter 1 Narrated brief · generated with ElevenLabs · Download ↓
Chapters
The whole idea

A migration almost never fails on the mechanics of moving data. It fails on what you didn't discover in the Blueprint. Scope everything up front — and surprise no one at cutover.

The Shape

Four phases, one motion.

Every migration moves through the same four phases. The weight sits in phase one — get the Blueprint right and the other three go smoothly.

The First Fork · Before You Scope

Which mode are we playing on?

Before a single object moves, settle one question: what kind of migration is this? It sets the whole plan — the discovery depth, the timeline, and what you show up recommending. There are three modes. Name it out loud with the customer up front.

Lift & Shift
Move it, don't touch it
  • Push everything across as-is and figure out the rest later
  • Fastest on paper — but you're carrying the old mess into the new house
  • We can do it. We just don't lead with it (see below)
Migrate & Optimize
Our default
  • Use the migration as the forcing function to fix what's been broken for years
  • GTM lifecycle, attribution, routing, hygiene — done properly on the way over
  • Barely more work: we're already moving the data and rebuilding the config
Merger / Acquisition
Two of everything
  • Reconciling two orgs — stages, scoring, definitions, licensing, dupes
  • Accept some duplication in V1; pick the one couch, keep two gravy boats for now
  • Its own bag of nuances — sandbox becomes crucial (see Build)

The opinion we lead with

We never actually recommend lift-and-shift. We're already moving every record and rebuilding the config — so enhancing the go-to-market lifecycle, tightening attribution, and laying in the automations and CRM best practices we'd want for a friend is barely extra work. Show up recommending the enhanced version and let the customer opt down — don't offer them the cheap version and hope they upgrade.

The optimization rides on playbooks you already have

"Optimize" doesn't mean inventing anything. It's our existing motions running inside the migration — GTM Lifecycle, Attribution, Lead Routing, Territory Design. If the customer takes our recommended defaults, it adds zero time. What burns the clock is bikeshedding — arguing whether a stage is called "Negotiation" or "Economic Buyer Confirmed." Give an opinion, let them push back, move on.

Sequencing the extras

Each optimization workstream is quoted post-Blueprint and runs during the build — e.g. attribution ≈ two weeks, kicked off once the Blueprint is signed. They don't stall the migration; they ride alongside it. Only genuine strong opinions from the customer (a lifecycle they want to redesign, not just rename) extend the timeline — and that's a Blueprint conversation, not a build one.

Start Here

Kick off a migration in one paste.

Don't dig through the GitHub repo. Copy this prompt, drop in the customer name, and send it to your Claude. It clones the template, reads the AGENTS.md, and walks the scoping checklist with you.

paste into Claude
# CRM Migration — kick off
Clone the LeanScale CRM Migration template repo for my customer [Customer Name].

Then read AGENTS.md and run the kickoff checklist:
  0. Set the MODE (lift-shift / optimize / merger) and the DIRECTION (HubSpot↔Salesforce). Default: optimize.
  1. Confirm access to the source and target systems (HubSpot and/or Salesforce).
  2. Inventory EVERY integrated tool — treat each as its own mini-project, not a reconnect.
  3. Flag components that need a specialist (CPQ, marketing automation, billing / RevRec).
  4. Scope every function — sales, marketing, CS, finance, product, data — and find the hidden dependencies.
  5. Draft the Blueprint — field-by-field map, object sequence, and the cutover plan.
  6. Produce the Blueprint Review — a two-column source→target mapping I can present for the green light.

Ask me anything you need before you start.

What you get

A customer-specific repo

The clone becomes part of the customer's brain — the source and target schemas, the field map, the tool inventory, and every cutover decision live here and inform their agent going forward.

Inside it

Skills + an AGENTS.md

Per-platform skills for both Salesforce and HubSpot, the scoping checklist, and the gotcha library from every migration we've run. The AGENTS file makes kickoff a guided walkthrough, not a scavenger hunt.

1
Phase 1

Blueprint.

This is where a migration is won or lost. On MediaFly, nearly every fire traced back to something the Blueprint never found. Scope thin and you pay for it at the end — one month there, we logged 400 hours on a project we'd priced at 100.

The case study

MediaFly acquired Epitium and merged the two orgs. The mechanics were doable. What hurt was everything scoping missed — a tool everyone thought would "just reconnect," a specialized system nobody had built, and a whole function of the business we never looked at. ~$75k of overrun — a whole extra engineer — that a thorough Blueprint buys back.

1.0 · How to Run It

The hard part isn't the data. It's alignment.

The mechanics of a migration are knowable. The esoteric part — the thing that quietly sinks projects — is stakeholder alignment: getting everyone to agree on how the system behaves in the new world. That's where the hours go, so run the Blueprint to collapse that, not feed it.

1
Open on the end state, not the current state
Ask one question first: "What does your ideal end state look like?" Consolidated automations, better marketing coverage, whatever it is. Then show them where they are today and how they adapt to get there. It frames everything that follows.
2
Show up opinionated. Don't run open-ended discovery
"Tell me about your flows" and "what objects do you want in Salesforce?" open a can of worms — half the time they don't even know. Be two questions deep on your own, then show up with a plan and a design for them to poke holes in. "You're doing a migration — here's how we'll do it." Let them push back. That's faster than a dozen workshops.
3
Get an explicit green light before the build clock starts
Nothing moves to Build until the customer signs off the Blueprint. Say it plainly: "We can't start until we get a green light." If they're not ready, we're still in Blueprint — that's fine, it just pushes the timeline out.

The project-slot discipline

A migration stuck waiting on stakeholder alignment holds a project slot — sometimes for months, sometimes before the Blueprint even concludes. That's the customer's choice of how to spend their time, not a delivery failure. We push them, hard. But we don't own an outcome we don't control: if they can't decide how to price and package, that's not on the CPQ consultant. Frame the whole engagement so the clock we're accountable for starts at green light.

1.1 · Integrated Tools

Inventory every tool. None of them "just reconnect."

Every integrated tool is its own mini-project — not a checkbox. Gainsight, HubSpot, Apollo all told us the rehook-up was easy, "a couple hours." Every single one had errors and nuances that drew it out for weeks.

1
List every tool touching the CRM — and who owns it
Enrichment, CS platform, marketing automation, billing, dialers, data warehouse. If it reads from or writes to the CRM, it's on the list.
2
Get to someone technical on each vendor's side
The CSM's "super easy, we just swap the instance ID" was never true — it was always the full implementation plus more. Push past the account rep to their solutions engineer and ask what actually has to be rebuilt.
3
Assign one engineer per one or two tools for cutover
Cutover day is a blackout: each engineer owns monitoring and troubleshooting their assigned tools. No one spread across everything.
1.2 · Flag the Specialists

Which components need a specialist.

The single biggest root cause of a bad migration is the wrong personnel on a specialized component. A generalist can't scope what they've never built — they don't know what they don't know. In the Blueprint, name the components that need a specialist and staff them.

If · CPQ, RevRec, or marketing automation is in scope
Bring in a specialist to scope it
These aren't "an admin can figure it out" systems. The person who scopes the cutover has to have lived in it before.
Else · a generalist scopes a black box
The 11th-hour cleanup path
What actually happened on MediaFly — a generalist scoped CPQ, missed what it silently owned, and we were fixing it up to the last day.
Why CPQ is the canonical trap
  • CPQ builds your custom objects — quote object, approvals, price rules, product rules. The new org has none of it.
  • You migrate the old quote object to the standard quote object, and re-set opportunity products, formula fields, and roll-ups from scratch.
  • All the Apex and calculations that came with CPQ are effectively gone.
  • HubSpot is notoriously weak at standard CPQ — going that direction, this is a big chunk of the build.
Marketing automation is its own project

On MediaFly it surfaced as an afterthought — "can you fix our attribution reporting?" — which unpacked into no equivalent lead stages, no scoring, no shared MQL definition between the two orgs. It could have been a devoted project. Which is why you'll almost always run a GTM Lifecycle project inside a migration.

1.3 · Scope Every Function

Talk to every department — not just the obvious three.

Entire functions surfaced mid-project that were never in scope. Sales, marketing, and CS are the easy ones to remember. It's the others that bite.

Sales
Obvious
  • Pipelines, quotas, deal desk
  • Reps go in last — see Enable
Marketing
Obvious
  • Scoring, lifecycle, attribution
  • Nearly always its own workstream
Customer Success
Obvious
  • Health, renewals, CS platform sync
Finance
Missed
  • RevRec — formula & roll-up logic
  • Billing integration, ARR reporting
Product
The killer
  • Licensing / provisioning off the CRM
  • App Exchange product in both orgs
Data / RevOps
Missed
  • Warehouse syncs, reverse-ETL
  • Reporting that reads the schema

The war story that could have been a lawsuit

MediaFly hosted customer product licensing in both the Epitium Salesforce and their own App Exchange product — in both instances. We didn't learn it until the week of cutover. If we'd truly lost access to the old instance the day they said we would, their customers would have lost access to the tool. That's the class of dependency the Blueprint exists to find — before it can hurt anyone.

1.4 · Data & Duplicates

Duplicates come in three flavors — map the strategy for each.

Flavor 01

Same prospects, both systems

The clean case. Agree the merge strategy up front — survivorship rules, which fields win, how you match.

Flavor 02

Merger reconciliation

An account is churned in one org and active in the other. These are business decisions, not data-loader settings — reconcile them with the customer before you migrate.

Flavor 03

Sync-created dupes

HubSpot was syncing prospects to the old org that weren't in the new one, and its database wasn't complete versus Salesforce. The moment you connect, that mismatch spawns new duplicates. Reconcile inclusion lists and databases first.

1.5 · Normalize while you're in there

A migration is the one moment you get to clean house. Consolidate every pick list, unify page layouts and record pages, and standardize naming. Do it once, deliberately — not field-by-field under fire at cutover.

Blueprint output

A signed-off package: the tool inventory (with vendor technical contacts), the specialist flags, the function-by-function scope, the data-reconciliation plan, and — the heart of it — the field-by-field mapping that Build runs against. Nothing moves to Build until the customer approves it.

1.6 · The Deliverable

The Blueprint Review — one artifact to get the green light.

This is what you show up with. Not a questionnaire — a compare-and-contrast map: everything they have today on the left, exactly what it becomes on the right, and the handful of things that won't come over flagged in red. Tabs for the optimization layers (lifecycle, attribution) show current → recommended → mapped, with names they can tweak. They poke holes in this — and that's the green light.

HubSpot · todaySalesforce · new world
CompaniesAccounts
ContactsContacts Contacts-only model — recommended unless a heavy PLG motion needs Leads
DealsOpportunities
Line itemsOpportunity Products
TicketsCases
Native lead score email clicks, form fills, eventsRewire — or keep scoring in HubSpot and sync the score into Salesforce

How to run it: present the tab that matters to each group — objects for the admins, lifecycle for the VP of Marketing, routing for the VP of Sales. The red rows are the honest conversation: "just so you know, these don't come over cleanly — are you OK with that?" Get the nod on each, and you have alignment.

2
Phase 2

Build.

Build to the standard, but the discipline here is verification. The last vendor on MediaFly broke a customer's RevRec because nobody checked the field types — so we check everything, in the right order, with the right tool for each job.

2.1 · The Field-by-Field Audit

The field map is a data deliverable — a hard gate.

1
Audit every field — the field itself and its type
The last vendor would "migrate a field" but not migrate the type — or not migrate the field at all. Assume nothing carried correctly until you've checked it.
2
Map to the true equivalent in the target system
For each field: the right type, plus the equivalent field relationships and object relationships it should have in the other platform. A currency field is not a formula field is not a roll-up.
3
Make the mapping a signed data deliverable
Nothing moves forward until the field map is QC'd. This one discipline is what separates a clean migration from an 11th-hour scramble.

What "we didn't check" cost

MediaFly's RevRec broke entirely — the vendor pushed formula fields in as plain currency fields, and roll-up fields came in as currency fields too. None of the logic worked. In the background the client kept saying "this worked before, it doesn't now" — because the numbers looked right but nothing was computing.

2.2 · Using AI to Build

Sic Claude on the audit — but know its limits.

Claude is the right tool for the field-by-field audit and the bulk build. But there's one trap that makes a build look perfect while it's silently broken.

✓ What Claude does well
  • The audit itself — every field, its type, and the target equivalent
  • Formula fields and bulk field creation
  • The diff between source schema and target
✕ Where it silently fails
  • Roll-up fields can't be created via the API — Claude will make a formula field, but not a roll-up. Those go in by hand.
  • Vendors used AI to create fields, then backfilled the data — so everything looked good. But any net-new record coming in wasn't computing.
  • The rule: verify a net-new record actually calculates — never trust that backfilled data looking right means the logic works.
2.3 · Sequence the Objects

Migrate in pieces — not everything at once.

Doing everything at once is why MediaFly slipped: things broke slowly, then it was one person after another saying "we don't have this, we don't have that." Split the migration by object and move in order.

The migration sequence
Automations layered in along the way
FirstAccounts Contacts & Leads Opportunities Custom objects

Keep everything off page layouts — admin-only — until you're ready to deploy. The business keeps working in the old world; the new one is built quietly underneath.

2.4 · How You Move It

Don't burn the API when a change set will do.

On cutover, an engineer ran out of API credits mid-push, called Salesforce for emergency capacity, and got capped at a million. Most of that API load was unnecessary.

Config, flows, and sandbox assets
Change sets + data loader
Push flows and config with a change set; move data with the data loader (export → load). Old-fashioned, fast, and it doesn't touch your API budget. This is domain expertise, not luck.
If you genuinely need the API
Raise limits early + chunk it
Get the emergency API increase before cutover day, not during — and chunk the load into phases so you never hit the wall live.
2.5 · Where You Build It

Greenfield goes straight to prod. A merger needs a sandbox.

The build environment is decided by the mode. Don't over-engineer a greenfield build with a sandbox it doesn't need — and don't ever touch a live merged org without one.

Greenfield · a fresh Salesforce, native build
Build straight in prod
HubSpot → a brand-new Salesforce is almost all native config. There's nothing live to break, so a sandbox just adds friction. Keep it admin-only until deploy (see 2.3) and build in prod. Only layer in a sandbox if you're adding net-new custom automations worth staging first.
Merger · into an existing Salesforce instance
Sandbox is non-negotiable
You're mutating a live org other people depend on — stage and test in a sandbox first. And the reverse case is worse: HubSpot's sandbox is nearly useless — you can only promote a limited slice to prod (it used to be none), so a HubSpot company absorbing a Salesforce org is genuinely scary. Scope that early.

One more audit before you build

The target org already has its own life. Existing flows, process builders, workflow rules, and Apex classes will butt heads with the automations you're migrating in. Audit the target top-down — don't go off what the client says it has — then build accordingly.

3
Phase 3

Enable.

For a migration, enablement is a phased rollout: who gets into the new instance, in what order, and a cutover day run like a blackout. Get the order wrong and reps are QA-testing a system that isn't ready.

3.1 · Phased Deployment

Stakeholders first. Reps last. Always.

1
Stakeholders & vertical owners go in first
The people who own each vertical come in, check the business logic, and confirm it works as intended. This is where you catch what's missing.
2
End-to-end test
Once each area is confirmed, test the whole flow end to end — the first time the new instance is exercised as a system.
3
Pilot group of reps
A small group of reps runs their real workflows and hits the errors — before the whole team pulls over. It's a sub-phase of Build, just like any other rollout.
4
The whole team — last
Reps come in last, and they are never your QA testers. They test their regular workflows on a system that already works.

The anti-pattern

On DealHub we kept sending reps in to build quotes before the products or the mappings existed. Of course it looked broken — the system wasn't ready for them yet. Reps in an incomplete instance generate noise, not signal.

3.2 · QA Checklists by Component

A concrete checklist for every kind of thing.

QA-ing a fresh instance is a huge one. Don't wing it — give each component a checklist so the coverage is provable.

If present

CPQ checklist

Quote object, price & product rules, approvals, the Apex calculations — check each one produces the right number.

Always

Every automation, once

Test each flow / workflow exactly once against a real record. Watch for validation rules over- or under-firing.

Always

Every tool connection, once

Fire each integration once end-to-end — sync in, sync out — before anyone relies on it.

Always

Opportunity / deal basics

The always-true checks: stages advance, roll-ups compute, required fields gate, amounts and dates carry.

3.3 · Share the responsibility with the client

We triple-check — then we hand the client a specific double-check list of everything to verify in their day-to-day, not a "casual, loose" one. A precise list means real coverage and shared ownership if something slips.

Third-party apps repoint last

The moment you move everyone off, repoint the tools — it's naturally the last step. The exception is a live-data or enrichment tool a pilot needs on day one. Default: push tools at the end and backfill, rather than flip everything at once and leave the team in an incomplete system.

3.4 · The Parallel Run

Overlap the two systems. Don't detonate the old one.

The safest cutover isn't a switch-flip — it's an overlap. The new instance is fully built; the team keeps working in the old one; you run both in tandem and compare outputs before anyone depends on the new world. Aim for a month. You can do it in less, but a month gives the weird timing room to surface — things that only fire once a week or once a month need a full cycle to prove out.

1
Ops goes in first — and takes the most time
The people who own the data and the metrics come over first and stay the longest. They validate records, reconcile that the numbers match the old world, and run every process end-to-end. This is where mismatches surface — give it real runway.
2
A pilot of one or two elite reps — kept short
Bring in a couple of your best reps (or the CSMs running renewals) to run one or two real motions — build a quote, work an opp — and confirm there's no disruption and no extra clicks. This should be quick: they run their workflow, they sign off, done. Reps are never the long pole.
3
Full cutover — only once ops has signed off
When ops confirms the data and the reps confirm the workflows, everyone moves. If scope wasn't 100% nailed, this is where "oh, we also need this" appears — sometimes things they never even had in HubSpot. Hold the line to the Blueprint; net-new is a follow-up, not a cutover blocker.
Keep the data consistent both ways

During the overlap, sync bidirectionally — changes made in Salesforce flow back to HubSpot, so nobody's validating against stale data. The moved-over pod operates in the new world while everyone else stays put, and the two never drift apart.

Integrations run on both — mostly

Most third-party tools (Gong, enrichment) can dual-connect and run in tandem through the parallel window. The one hard caveat: HubSpot can sync to only one Salesforce instance — which bites on mergers. Some tools flip cleanly at cutover; others must wait and migrate slowly. Sequence them, don't assume.

Leave HubSpot as a ghost town — for now

After full cutover, don't kill HubSpot. Keep it alive on the full plan for a while — the once-a-month automations still need somewhere to land while you confirm nothing was missed. Only once QA and the checks are done do you downgrade to the free tier; only later do you shut it off entirely. And a renewal coming up in 30 days is not a reason to rush the cutover — that's how you skip the parallel run and pay for it.

3.5 · The Cutover Cadence

Cutover Friday. Run it like a blackout.

Wed · before
Pre-brief
Walk the broader team through what's changing before it lands.
Fri · 2pm
Cutover blackout
One engineer per one or two tools, each on monitoring & troubleshooting. Let it bake over the weekend.
Mon · after
Office hours
First live day — catch what surfaced when the team logged in.
Fri · +1 week
Office hours
Close out hyper-care. Every enablement also gets docs and an audio brief like this one.
3.6 · World-Class Enablement

Enablement is what kills the maintenance tail.

The more completely you enable, the less ad-hoc cleanup you're doing for months afterward — the boring maintenance that quietly eats a project. Over-invest here on purpose. Do it in layers.

Looms for everything · front-end users

Day-zero how-tos for someone with zero experience — how to create a contact, an account, a deal — and how to use Salesforce to interact with every other system in their stack. Record once, hand off forever. This is the single biggest lever on the maintenance tail.

Looms for everything · back-end users

A separate track for the admins: how to grant permissions, build automations, create fields, and update page layouts. Enable them to run the system so the hand-off is clean — you're not the permanent help desk for their own instance.

Before cutover

Tailored group demos

You can't cover an end-to-end instance in an hour. Run per-team sessions — sales director + team, CS director + team — and go deep on what they touch: the POC process, the opportunity lifecycle, the customer handoff. Specific beats comprehensive.

When you can

In-person sessions

If you can get on-site, do it — we've never had a bad one. Customers leave with real confidence and real goodwill toward LeanScale. It's the highest-trust enablement we run.

After cutover

Office hours, 1–2× a week

Great optics, and genuinely useful early. By week two or three nobody shows up — which is exactly the signal you want. It means the enablement landed and the system is sticking.

4
Phase 4

Maintain.

The tail of a migration is stabilization, not surprise. You will find broken things after cutover — so plan for it, size it honestly, and don't let the estimate pretend otherwise.

4.1 · The Honest Timeline

Quote it post-Blueprint — and bake in fix time.

The Blueprint is the big variable and the part you can't control, so frame every estimate post-Blueprint. With a green check on the Blueprint, a clean migration runs roughly:

~30d
Build & move
Build the new instance and migrate the data, in object sequence.
1–2w
Pilot & QA
Stakeholders, then the pilot group, then end-to-end QA against the checklists.
+2w
Fix what broke
You'll find broken things — so bake the time in. It doesn't mean you did it wrong; it means it's a migration. Call the whole thing ~2 months, and don't promise shorter.
4.2 · Sizing the Extras

Base migration, then add the specialized work.

Price the base migration on its own, then stack the specialized workstreams on top. Fortune-500-scale runs longer.

Base migration
The floor
  • Objects, fields, automations, cutover
  • None of the extras below
+ CPQ
Specialist
  • Rebuild quote object, rules, Apex
+ RevRec
Specialist
  • Formula & roll-up logic, billing sync
+ Attribution
Workstream
  • 60% of a full attribution build
+ Each tool
Per integration
  • 10 hrs to reconnect & verify, each
The lesson underneath all of it

A migration's smoothness is decided at setup. If you're rushing at the 11th hour, the Blueprint was thin. Get a proper setup from the start — highlight everything from the beginning — and the rest of the project goes smoothly.

Know Your Direction

Two platforms, three directions.

The method above is the same every time. What changes is what you gain and lose based on where you're coming from and where you're going. Read this before you scope.

The question underneath the whole choice

Does the system serve your process, or your process serve the system? On Salesforce you bend the system to fit how you work. On HubSpot you bend how you work to fit the system — there are workarounds and hacks, but that's the trade. Know which one you're signing up for before you move. And the honest LeanScale take: the most flexible, modern, AI-enabled CRM — the one you barely have to log into — is Salesforce. "We want something more AI-native" is usually an argument for it, not a reason to leave.

Salesforce → HubSpot
Expect to lose ground
  • CPQ — HubSpot is notoriously weak; big chunk of the work
  • Object model — you almost never use Leads in HubSpot; decide on contacts-only up front
  • Automations — the code node (custom logic in workflows) is license-gated; only ~1 in 5 clients have it, so complex SF automations are hard to reproduce
  • Custom objects — license-based and less flexible
  • Formula fields — restricted; don't behave the same
  • Reporting — a different beast; you can't get as granular
  • You'll rebuild the go-to-market motions either way
HubSpot → Salesforce
More headroom, new mess
  • You gain flexibility — custom objects, formula & roll-up fields, granular reporting
  • But you inherit HubSpot's sync, inclusion-list, and duplicate nuance on connect
  • Reconcile inclusion lists and sync settings, and confirm the fields actually exist to map into
  • Decide the Lead vs Contact model deliberately — Salesforce gives you the choice HubSpot didn't
Salesforce → Salesforce
The merger (MediaFly)
  • You're reconciling two of everything — stages, scoring, definitions, licensing
  • Accounts churned in one org, active in the other — business decisions, not data settings
  • Product / licensing may live in both instances — find it before cutover
  • Merge lifecycle, scoring, and MQL definitions — a GTM Lifecycle project rides along
The Hard Direction · Salesforce → HubSpot

What you'll lose — and what it quietly costs.

The other two directions rarely surprise you. This one does — it's the direction with real casualties, and several of them show up as line items on a bill. Scope every one and tell the customer plainly what won't come over.

Marketing contacts
A per-record cost
  • Which contacts you flag as "marketing" carry a cost over your limit
  • Decide the marketable set deliberately — it's a bill, not a checkbox
Custom & formula fields
License-capped
  • Field and formula-field counts are limited by tier
  • Formula fields don't behave the same — don't assume parity
Product data
A nightmare
  • The custom-object limitation changes how you store and associate it
  • The Snowflake sync now charges credits per sync — people are freaking out
  • SF says "dump it all, clean up in-system"; HubSpot wants only what you need
Permissions
Less granular
  • Salesforce lets you get far more granular — expect to lose that control
Reporting & Apex
A different beast
  • No formulas / depth like Salesforce reports
  • Apex classes have no equivalent — flows are one thing, code is very wonky
Other clouds
Open questions
  • Service Cloud, Marketing Cloud — not just Sales Cloud
  • We don't have every answer yet; refine the playbook as we hit them
Be explicit about the plan & tier

Half of what "can HubSpot do this?" comes down to is which license they're on. If they're evaluating either system, tell them plainly which tier they need to land the functionality — we've been bitten by leaving that vague.

One point in HubSpot's favor

HubSpot's API is more forgiving on request limits than Salesforce's, which are strict and a pain to raise. It's a rare place the move gains you headroom — worth noting when you're weighing the trade.

The AI gotcha for this direction — build your own docs

You can point Claude at the Salesforce instance and have it pull every Apex class, flow, and report, then flag what HubSpot can't replicate. But there's a trap: HubSpot's public documentation is so thin that Claude will confidently say it can do things it can't — and occasionally the reverse. So set the rule: err on "HubSpot can't do it unless it's explicitly in public documentation," then manually review the list. Over time this is why we build our own documentation — our domain expertise, not HubSpot's docs, is the source of truth. Then hand the customer the not-coming-over list up front, so nothing is a surprise.

The Easy Direction · HubSpot → Salesforce

Architecture replicates. Discovery goes to the edges.

Almost everything in HubSpot has a cleaner Salesforce equivalent — contacts, companies, deals, reporting all map straight across. So don't burn discovery on the core object model. Spend it on the edges.

Discovery goes here

Forms & email marketing

HubSpot forms are usually hosted on their web pages — where do those go? And the email marketing itself — what's the alternative, or does HubSpot stay as the MAP? This is the real discovery, not the objects.

Keep it simple

Lead scoring — keep & sync

If HubSpot stays as the marketing platform, keep lead scoring there, sync the score into Salesforce, and let Salesforce run the MQL automations. Only rewire scoring (email clicks, form fills, events) if HubSpot is going away.

Turn hacks into rules

Workflows → validation rules

Pull their HubSpot workflows and code-block hacks; propose a clean set of validation rules per object in Salesforce — starting from our standards (can't close an opp without a close reason) and adding their weird ones.

The one real decision

Lead vs Contact model

Salesforce gives you the choice HubSpot didn't. Default to contacts-only unless there's a massive PLG motion — almost nobody should run an open Lead object. Decide it deliberately in the Blueprint.

One QC checklist to rule them

Take the transcript of every migration scoping session and turn it into a QC checklist for whoever runs the next one. This playbook is that checklist, made permanent — the gotchas we already paid for, so you don't have to pay for them twice.

Closeout

Debrief the project.

When a CRM Migration engagement wraps, spend sixteen minutes with the debrief agent. Teamwork already knows what got built and when. This is for the part none of our systems can see — the call that could have gone either way, the thing the customer wanted that you refused, the near-miss that never became an incident, and above all the places this playbook turned out to be wrong. What comes out of it gets written back into this page.

Before you start

Two minutes of thinking beats sixteen minutes of recall. Have these in your head — you don't need notes, and you definitely don't need a script.

  • Direction and mode — which way the migration ran, and whether this was lift & shift, process optimisation, or a merger.
  • Which flavours of duplicate you hit — same prospects in both systems, merger reconciliation, sync-created, or all three.
  • Which cutover rules you bent — overlap vs. detonate, stakeholders before reps, sandbox or straight to prod, and whether Friday held.

Sixteen minutes, one sitting. It's a voice conversation, so your browser will ask for microphone access — use headphones or the agent will hear itself. Chrome is the safer bet over Safari.

Hand over the artifacts too

The debrief asks what you built that's worth reusing. This is where you actually hand it over — dashboards, field maps, flows, templates, scripts, spec docs. Files land in the project's Drive folder; links go into the artifact register so the next person can find them.

Thirty seconds, and do it while the project is still in your head. “I'll upload it later” is exactly how assets end up trapped on an account.

Add an artifact →