Salesforce to HubSpot Migration for Outbound Teams (2026)

GenFlows Team · · 16 min read

TL;DR

  • HubSpot has no Lead object. Salesforce Leads and Contacts both land in the same HubSpot Contact object, matched by email. The Lead/Contact split — and the conversion event that marks when a prospect became a real opportunity — has no native home in HubSpot unless you rebuild it as a custom property before go-live.
  • Campaign Influence doesn't come with you. Salesforce's CampaignMember object tracks per-contact status (Sent, Responded, Opted Out) against a Campaign and rolls that into Opportunity attribution. HubSpot's Campaign object is asset-centric, not membership-and-status-centric — there's no built-in landing spot for that data.
  • Outreach and Salesloft were both built Salesforce-first. Their Salesforce integrations are the deepest, most mature versions of each product. The HubSpot-side integrations sync a narrower, differently-scoped set of objects — verify current scope against each vendor's own docs rather than assuming parity with your Salesforce setup.
  • Historical engagement data mostly doesn't backfill. HubSpot's native Salesforce activity sync is prospective, not retroactive — and even going forward, marketing email events only sync within a 30-day window and form submissions within a year. Emails logged via Einstein Activity Capture don't sync to HubSpot at all.
  • Sequence and cadence history lives in the SEP, not the CRM. Neither Salesforce nor HubSpot stores "enrolled in Sequence Y, on Step 3" as a native object. Swapping CRMs doesn't migrate it — you pull it from Outreach or Salesloft's own export tools, separately.
  • Field history has a shelf life. Standard Salesforce field tracking covers 20 fields per object with an 18-month retention guarantee. If outbound reporting depends on knowing when a field changed — not just its current value — that has to be exported before it ages out, not after.

Most "Salesforce to HubSpot migration" content is written for whoever owns the CRM generally — field mapping, import limits, what the onboarding fee covers. That ground is real, and GenFlows already has a full breakdown of it in our HubSpot CRM migration checklist. This post is the layer on top of that: what's specific to teams running an active outbound motion — cold email and LinkedIn sequences through tools like Outreach, Salesloft, Smartlead, Instantly, or HeyReach — where the thing that breaks isn't the contact record. It's the attribution, the sequence history, and the object model your outbound reporting was quietly built on top of.

Sourcing note: every limit and quoted behavior below was checked against Salesforce's or HubSpot's own documentation, or a vendor's own integration listing, in September 2026, and is tagged VERIFIED where independently confirmed or (directional) in-text where it comes from a secondary source, a vendor-interested page, or a primary page we could not re-open to confirm exact wording. Two vendor admin-guide pages (Salesloft's HubSpot integration guide, one Salesforce Help article on lead conversion) render client-side and could not be independently re-verified — treat those claims as directional and confirm in your own portal before quoting them as fact.

The Short Answer

A Salesforce-to-HubSpot migration for an outbound team has four places where the CRM swap breaks something specific to how outbound reporting works, none of which show up on a generic import checklist:

  • The object model changes shape. Salesforce's Lead/Contact/Account/Opportunity structure, with its own conversion event, becomes a single flat Contact object in HubSpot. Nothing is lost in the sense of missing data — it's lost in the sense of missing structure.
  • Campaign-based attribution doesn't port. If outbound sequences were tracked to pipeline through Salesforce Campaigns and Campaign Influence, that model has no native HubSpot equivalent and has to be rebuilt, not migrated.
  • Your SEP's HubSpot integration is probably thinner than its Salesforce one. Outreach and Salesloft were both built for Salesforce first. Confirm exactly what syncs — and what doesn't — before you assume the HubSpot side behaves the same way.
  • Sequence-level history was never in the CRM to begin with. It lives in the SEP's own database. A CRM migration doesn't touch it either way — you need a separate export plan if you want to keep it.

The Object Model Shift: Why "Lead" Disappears in HubSpot

HubSpot syncs Salesforce Leads and Salesforce Contacts into the same place — the HubSpot Contact object — matched by email address, with field values populated per your sync direction and mappings.

That single fact causes a specific, documented breakage: Salesforce Leads carry company name as a plain text field, while Salesforce Contacts reference it through the related Account object. HubSpot's default mapping assumes one shape, so a HubSpot contact matched against a Salesforce Contact (rather than a Lead) can silently fail to populate company name unless the mapping is checked by hand.

The bigger structural issue is the conversion event itself. In Salesforce, converting a Lead creates an Account, a Contact, and optionally an Opportunity, and reattaches the Lead's activity history to those new records — with one notable exception per Salesforce's own help documentation (directional — the page renders client-side and we could not re-confirm exact wording; verify before quoting): activity that originated from a Sales Engagement cadence is not automatically carried over in that reattachment. HubSpot has no equivalent conversion object at all. There's no "this contact was a Lead until March, then converted" event to preserve, because HubSpot never modeled that distinction in the first place.

Practical fix: before migrating, add a custom HubSpot property — something like "Originally a Lead" (yes/no) and "Conversion Date" — and populate it from your Salesforce export. It won't recreate Salesforce's object model, but it preserves the one piece of that history outbound teams actually query against: how long a record sat as an unqualified lead before it became a real opportunity.

Campaign Influence and Outbound Attribution: What Doesn't Come With You

If your outbound motion attributes pipeline back to specific sequences — "this Opportunity was influenced by the Q3 Cold Email Campaign" — that model is almost certainly built on Salesforce's CampaignMember object: a junction record tracking each Lead or Contact's status (Sent, Responded, Opted Out) against a Campaign, rolled up into Campaign Influence on the Opportunity.

HubSpot's Campaign object is built around a different concept entirely — it groups marketing assets (emails, ads, landing pages) rather than tracking per-contact membership and status against a Deal. There is no native one-to-one landing spot for CampaignMember status data, a gap independently reported across multiple HubSpot Community threads from admins who hit it during their own migrations (directional — community-reported, not documented in HubSpot's own migration guides). The workaround some teams use is a Salesforce automation that writes CampaignMember status into a custom field before export, so it syncs as a regular property instead of relying on an object that doesn't exist on the other side.

This matters for a specific reason: multi-touch attribution doesn't recalculate itself in HubSpot from Salesforce history. If you want to keep it, treat Opportunities-with-Contact-Roles-and-Campaign-Influence as a static historical snapshot to export and archive before migration, not as data that will "just be there" after go-live. Going forward, you're choosing between rebuilding attribution inside HubSpot's own model — native multi-touch revenue attribution is gated to Marketing Hub Enterprise — or running it through custom properties and workflows. Our B2B revenue attribution models post covers how to pick between those models once you're on HubSpot; this is the note that the Salesforce version of that model doesn't survive the move.

Sales Engagement Platform Sync: Outreach and Salesloft Weren't Built HubSpot-First

Both Outreach and Salesloft shipped their Salesforce integrations first, and both are generally described — including by their own implementation partners — as the deeper, more mature version of the product. That matters during a migration because "does my SEP sync X to my CRM" doesn't have the same answer on both sides.

Outreach's own HubSpot Marketplace listing (its "Outreach Data Sync" app) documents bi-directional sync for Accounts↔Companies, Prospects↔Contacts, Opportunities↔Deals, Calls, Tasks, Outbox messages/Email Activities, and Custom Objects — with an explicit disclaimer: anything not listed as shared data is not part of the sync. Sequences themselves are not listed as a synced object type. One Outreach/HubSpot implementation partner describes the HubSpot-side integration as historically having "thinner custom-object support and slower release of new features" than the Salesforce side (directional — vendor-interested source; also appears to partially conflict with the current Marketplace listing, which does claim activity-level sync, so treat this as "scope has likely changed over time" rather than a fixed limitation).

Salesloft's HubSpot integration is documented, per its own marketplace and help content, as syncing Opportunities one-way from HubSpot into Salesloft and Activities one-way from Salesloft into HubSpot — without custom-field sync or the ability to trigger HubSpot workflows from Salesloft cadence events (directional — Salesloft's own admin guide renders client-side and could not be independently re-confirmed; verify current scope in your own Salesloft admin panel). Salesloft also publishes a migration guide for moving between its own two generations of HubSpot integration, which is itself worth knowing: "which version of the connector you're actually running" is a variable to check before you assume any documentation describes your setup.

Before migration weekend: open your SEP's current HubSpot-specific integration documentation — not a Salesforce migration guide, not a generic feature page — and confirm object-by-object what syncs, in which direction, and whether it's real-time or scheduled. Assuming parity with how it worked in Salesforce is the single most common planning mistake outbound teams make in this migration.

What Happens to Your Historical Engagement Data

HubSpot's native Salesforce integration runs two separate sync mechanisms: a one-way Timeline Sync (HubSpot → Salesforce) covering form submissions, email sends/opens/clicks, meetings, calls, notes, and tasks, logged into Salesforce as Tasks; and a two-way Activity Sync covering Tasks, Sales emails, Calls, and Meetings. Both are documented directly on HubSpot's knowledge base.

The limitation that matters for a migration specifically: sync is prospective, not retroactive. Marketing email events only sync if they occurred within 30 days of the contact being synced; form submissions only within a year. Years of historical cold-email opens, clicks, and replies logged in Salesforce will not backfill into HubSpot through the native connector — that requires a separate bulk import, planned and executed on its own. Emails logged through Salesforce's Einstein Activity Capture don't sync to HubSpot at all, under any timeframe.

Sequence and cadence enrollment history — "this contact was enrolled in Sequence Y, currently on Step 3" — is a different problem entirely, because it was never stored as a native object in Salesforce or HubSpot to begin with. It lives inside Outreach or Salesloft's own database. Whatever made it into Salesforce did so only as whatever Task or Activity records the SEP chose to write back — which means migrating your CRM does not migrate this data by itself. If you want to keep it, pull it from the SEP's own reporting or export tools, on its own timeline, independent of the CRM cutover.

Salesforce Export Gotchas That Bite Outbound Teams Specifically

A few Salesforce data-retention mechanics are easy to miss because they only matter to teams that report on when something changed, not just what its current value is — which describes most outbound reporting (time-to-first-reply, days-in-sequence, stage-velocity by campaign).

  • Field History Tracking covers 20 fields per object with an 18-month retention guarantee on the standard plan — confirmed directly on Salesforce's own help page. The paid Field Audit Trail add-on raises the tracked-field limit to 60. If outbound reporting depends on a field-change history older than 18 months, export it before it ages out.
  • Formula and roll-up summary fields export as a static snapshot, not live logic. The calculation itself doesn't transfer — only the value at export time (directional — well-established Salesforce platform behavior, corroborated across secondary sources, though we could not locate a single primary Salesforce page stating it in those exact terms for export tooling specifically). Any outbound scoring or routing formula built this way has to be manually rebuilt as a HubSpot calculated property, not imported.
  • CampaignMember status is exportable via Data Loader, but as covered above, there's no native landing spot for it on the HubSpot side — extracting it is necessary but not sufficient.

A Practical Migration Sequence for Outbound Teams

Layered on top of the generic import process, this is the outbound-specific work, roughly in order:

  1. Export Campaign Influence and CampaignMember data as a static historical snapshot before touching anything else — it won't recalculate in HubSpot and won't be recoverable later.
  2. Pull sequence/cadence enrollment and step history directly from Outreach or Salesloft, independent of the CRM migration, since neither CRM ever stored it natively.
  3. Decide your Lead/Contact reconstruction before import — add the custom properties (originally-a-lead flag, conversion date) so the distinction exists in HubSpot from day one rather than being reverse-engineered later.
  4. Bulk-export historical engagement data you want preserved — don't rely on the native sync's 30-day/one-year windows to carry it forward.
  5. Reconfirm your SEP's current HubSpot integration scope directly with the vendor, object by object, rather than assuming the Salesforce-side behavior carries over.
  6. Rebuild attribution logic in HubSpot's own model once records are in, rather than expecting Salesforce's Campaign Influence numbers to reappear.
Salesforce conceptHubSpot equivalentWhat's lost or must be rebuilt
Lead (separate object) Contact (unified object) Lead/Contact distinction; rebuild via Lifecycle Stage + a custom "originally a Lead" property.
Lead conversion event No native equivalent No conversion audit trail; add a custom "Conversion Date" property before import.
Opportunity Deal Maps cleanly via native/SEP connectors; deal-stage history itself does not backfill (see our migration checklist).
Campaign + CampaignMember status Campaign (asset-centric) Per-member status tracking; rebuild via custom properties, lists, or a pre-migration export.
Campaign Influence (multi-touch attribution) Marketing Hub Enterprise attribution (different model) Historical influence records don't transfer; attribution logic must be rebuilt, not ported.
Field History / Field Audit Trail Limited property history Long-tail change history (past 18 months) likely lost unless separately exported first.
SEP Sequence/Cadence history No native object in either CRM Lives only in Outreach/Salesloft; pull it from the SEP directly, not from either CRM.

Once you're through the migration itself, the ongoing question is which CRM actually fits an outbound motion day to day — our CRM comparison for B2B outbound and Close vs. HubSpot posts cover that decision, and HubSpot deal stages for outbound teams covers how to structure the pipeline you land in. If your outbound tools are already pushing data into HubSpot post-migration, syncing cold email and LinkedIn data into HubSpot covers that layer directly.

Frequently Asked Questions

Does HubSpot have a separate Lead object like Salesforce does?

No. HubSpot uses a single unified Contact object — Salesforce Leads and Salesforce Contacts both sync into HubSpot as Contacts, matched by email address. There's no native "Lead" record type to preserve that distinction after migration; teams that need it typically rebuild it as a custom property.

What happens to my Salesforce Lead conversion history when I migrate to HubSpot?

It isn't natively preserved. Salesforce's conversion process reattaches most activity history to the resulting Account, Contact, and Opportunity records, but HubSpot has no equivalent "conversion event" object to receive it. Most teams add a custom property before migration — something like a conversion date or an "originally a Lead" flag — to keep at least the fact and timing of the conversion.

Will my Salesforce Campaign Influence or outbound attribution data transfer to HubSpot?

Not natively. Salesforce's CampaignMember object tracks per-contact membership status against a Campaign and rolls that into Opportunity-level influence; HubSpot's Campaign object is asset-centric, not membership-and-status-centric, and has no built-in equivalent. This attribution layer generally has to be exported as a historical snapshot before migration and rebuilt in HubSpot's own attribution model afterward, not migrated as-is.

Do Outreach and Salesloft sync the same data to HubSpot as they do to Salesforce?

Not necessarily to the same depth. Both platforms were built Salesforce-first, and their Salesforce integrations are generally the deepest, most mature version of the product. Outreach's HubSpot app currently syncs Accounts, Prospects, Opportunities, Calls, Tasks, Email Activities, and Custom Objects, but explicitly states that anything not listed as shared data doesn't sync — Sequences aren't listed. Confirm current scope directly against each vendor's HubSpot-specific documentation rather than assuming parity with your Salesforce setup.

Can I migrate my sequence or cadence enrollment history from Salesforce to HubSpot?

Not directly, because that history was never stored in Salesforce to begin with — it lives inside Outreach or Salesloft's own database. What made it into Salesforce is only whatever Task or Activity records the SEP chose to write back. A CRM migration doesn't touch this data either way; you need to export it separately from the SEP itself.

What outbound-specific Salesforce data is most at risk of being lost in a HubSpot migration?

Four things: the Lead/Contact conversion history and distinction, since HubSpot has no Lead object; Campaign Influence and CampaignMember status used to attribute outbound touches to pipeline, since HubSpot's Campaign model is structurally different; historical engagement data, since native Salesforce activity sync is prospective-only and Einstein Activity Capture emails don't sync at all; and any Salesforce formula-field logic used in outbound reporting, since formula fields export only as static snapshots rather than live calculations.


If your outbound motion is moving CRMs, the data you're most likely to lose isn't the contact record — it's the attribution and history built around it. Read our HubSpot CRM migration checklist for the mechanics of the import itself, or talk to our team about migrating an active cold email and LinkedIn outbound motion into HubSpot without losing the reporting you already depend on.

By the GenFlows GTM engineering team. We run cold email, LinkedIn outreach, and RevOps/HubSpot builds for B2B teams. Last updated September 2026.

Share in X
Written by
GenFlows Team

The GenFlows team builds AI-powered cold outbound systems for B2B teams.

Ready to fill your calendar?

We build AI-powered cold outbound engines that book meetings on autopilot. Let's see if it fits your team.

Book a Call