CRM migration

Migrate from Salesforce Sales Cloud to HubSpot

Field-level mapping, validation, and rollback between Salesforce Sales Cloud and HubSpot. We move data and schema; workflows are rebuilt natively in HubSpot.

Salesforce Sales Cloud logo

Salesforce Sales Cloud

Source

HubSpot

Destination

HubSpot logo

Compatibility

93%

14 of 15

objects map 1:1 between Salesforce Sales Cloud and HubSpot.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Try the reverse

HubSpot
Salesforce Sales Cloud

Overview

What this migration involves

Salesforce Sales Cloud separates Leads and Contacts into distinct objects with a conversion workflow, while HubSpot operates on a single Contact object with a lifecycle_stage property. This fundamental data-model difference drives every mapping decision in a Salesforce-to-HubSpot migration. We extract Leads, Contacts, Accounts, Opportunities, custom fields, tasks, events, and notes via the Salesforce REST and Bulk APIs, then write them into HubSpot's CRM using the Contacts, Companies, and Deals API endpoints. Salesforce record types — which scope Opportunity stage pick-lists and page layouts per business unit — have no native HubSpot equivalent; we either collapse them into HubSpot deal pipelines or flag them for manual pipeline design post-migration. Salesforce Flows, workflow rules, Process Builder automations, and validation rules do not migrate — we export their definitions as rebuild references for your HubSpot admin. Owner resolution happens by email match against HubSpot users. Salesforce's CreatedDate migrates as a custom HubSpot property since HubSpot overwrites Createdate at import time.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pushing teams away

  • The sticker price is a fraction of the actual cost: storage overages run $125/GB, Agentforce conversations are $2 each, and annual uplift is 8–10% on renewal.
  • Admin configuration is non-trivial; teams without a dedicated Salesforce admin spend disproportionate time on maintenance and lose productivity on a platform that resists shortcuts.
  • Workflow Rules and Process Builder are retired features requiring mandatory migration to Flow before Salesforce decommissions them, creating a forced rework project.
  • Hidden costs accumulate: Sales Engagement, Sales Programs, Salesforce Maps, and other add-ons that enterprise teams need are not included in the base per-seat price.
  • Complexity and licensing cost drive mid-market companies to simpler CRMs with faster time-to-value and transparent pricing.

Choosing

HubSpot logo

HubSpot

What's pulling them in

  • Lowest barrier to entry of any major CRM — the free tier with unlimited contacts lets teams validate fit before committing to a paid plan, according to G2 and Capterra reviewers.
  • Native integration between the CRM and sales engagement tools (sequences, email tracking, dialer) means no separate sync configuration, a theme across G2 Sales Hub reviews.
  • Pipeline visualization, deal tracking, and automated workflows are consistently praised as intuitive and easy to set up without developer involvement.
  • Strong onboarding for new team members — reviewers on Capterra and G2 highlight how quickly new reps become productive without formal training.
  • The HubSpot platform ecosystem (Marketing, Sales, Service, CMS hubs) allows growing companies to consolidate tools without building new integrations.

Object mapping

How Salesforce Sales Cloud objects map to HubSpot

Each row shows how a Salesforce Sales Cloud object lands in HubSpot, including any object-level transformations, lookup resolution, or schema-design dependencies.

Salesforce Sales Cloud

Lead

maps to

HubSpot

Contact

1:1
Fully supported

Salesforce Leads have no direct HubSpot equivalent — HubSpot has one Contact object. We import all Salesforce Leads as HubSpot Contacts, setting lifecycle_stage to 'lead' by default. The original Salesforce Lead Status maps to a custom pick-list property on the Contact record so that qualification status is preserved as a reference field post-migration.

Salesforce Sales Cloud

Contact

maps to

HubSpot

Contact

1:1
Fully supported

Salesforce Contacts migrate directly to HubSpot Contacts. The AccountId lookup on the Salesforce Contact determines the primary Company association in HubSpot. Salesforce Contacts without an AccountId receive a placeholder company association to maintain data integrity on the HubSpot side. This ensures all contact records have a valid company reference and prevents orphaned records from blocking deal associations.

Salesforce Sales Cloud

Account

maps to

HubSpot

Company

1:1
Fully supported

Salesforce Accounts map 1:1 to HubSpot Companies. Parent Account relationships (Salesforce ParentId) translate to HubSpot's parent-company hierarchy. Multi-address accounts collapse to a single primary address in HubSpot, with additional addresses stored as a custom property if needed for reference. The organizational hierarchy between parent and child accounts is preserved in the HubSpot company structure.

Salesforce Sales Cloud

Opportunity

maps to

HubSpot

Deal

1:1
Fully supported

Salesforce Opportunities map to HubSpot Deals. The Opportunity StageName becomes the HubSpot dealstage within the designated pipeline. CloseDate, Amount, and Name map directly. The Salesforce RecordTypeId that scoped the Opportunity's stage pick-list does not exist in HubSpot — we create one HubSpot pipeline per record type and flag the mapping plan for your admin to validate.

Salesforce Sales Cloud

Opportunity (RecordTypeId)

maps to

HubSpot

Deal (Pipeline)

1:many
Fully supported

Each Salesforce record type becomes a separate HubSpot deal pipeline. A Salesforce org with three record types (New Business, Upsell, Partner) yields three HubSpot pipelines with independent stage sets. The stage probability and forecast category from Salesforce are stored as custom properties on the HubSpot deal since HubSpot does not use a probability field by default.

Salesforce Sales Cloud

Account Contact Relation

maps to

HubSpot

Company Association

1:1
Fully supported

Salesforce's Account Contact Relations support N:N contact-to-account associations natively. HubSpot also supports N:N contact-to-company associations. We migrate all active relations and preserve the IsPrimary flag as a HubSpot contact property since HubSpot has no native primary-flag on associations. This maintains the complete web of relationships between contacts and their multiple company affiliations.

Salesforce Sales Cloud

Task (Type='Email')

maps to

HubSpot

Activity (Email)

1:1
Fully supported

Salesforce Tasks with Type='Email' migrate as HubSpot email activities on the contact timeline. The original Subject, Body (plain text), and ActivityDate are preserved. Salesforce Tasks with IsTask=true and no Type map to HubSpot generic activities. HTML email bodies are converted to plain text for the HubSpot activity record.

Salesforce Sales Cloud

Task (Type='Call')

maps to

HubSpot

Activity (Call)

1:1
Fully supported

Salesforce call tasks migrate to HubSpot call activities. The Call Duration (DurationInSeconds) and Call Type (Inbound/Outbound) map to HubSpot's call duration and call direction properties. Subject and original owner are preserved on the activity record. All call metadata including disposition notes are transferred to maintain complete communication history.

Salesforce Sales Cloud

Event

maps to

HubSpot

Activity (Meeting)

1:1
Fully supported

Salesforce Events map to HubSpot meeting activities with the original StartDateTime, EndDateTime, Subject, and location preserved. The Event's WhatId (related-to record) maps to the equivalent HubSpot association. Recurring events are imported as a series of individual HubSpot meeting activities, one per occurrence.

Salesforce Sales Cloud

Note / Salesforce File

maps to

HubSpot

Note

1:1
Fully supported

Salesforce Notes migrate to HubSpot notes on the contact or company timeline. Content (Body) is preserved. Salesforce Files attached to records are downloaded and re-uploaded to HubSpot's file storage; the HubSpot file URL is associated with the original record. File size limits (25MB per Salesforce file) are respected during re-upload.

Salesforce Sales Cloud

User (Owner)

maps to

HubSpot

HubSpot Owner

1:1
Fully supported

Salesforce User records are resolved by email match to existing HubSpot users. Unmatched owners are flagged before migration runs; your team either creates HubSpot user accounts first or assigns those records to a fallback HubSpot owner. No Salesforce Opportunity or Contact lands in HubSpot without a resolved owner.

Salesforce Sales Cloud

Custom Object __c

maps to

HubSpot

Custom Object (Enterprise)

1:1
Fully supported

Salesforce custom objects map to HubSpot Enterprise custom objects 1:1. HubSpot caps custom objects at 10 per portal — if your Salesforce org exceeds this, we identify low-usage custom objects for consolidation into existing HubSpot objects or archival before migration begins. This is a scoping decision that must happen in the planning phase.

Salesforce Sales Cloud

Campaign / Campaign Member

maps to

HubSpot

HubSpot Campaign

1:1
Fully supported

Salesforce Campaigns and Campaign Members have no direct HubSpot equivalent. HubSpot stores campaign membership through lists and the marketing contact model. We preserve campaign names and member statuses as a custom reference property on the Contact record; full campaign history requires rebuilding in HubSpot's campaign tool post-migration.

Salesforce Sales Cloud

OpportunityContactRole

maps to

HubSpot

Deal Association

1:1
Fully supported

Salesforce Opportunity Contact Roles migrate as deal-contact associations in HubSpot. The Role field value (e.g., Decision Maker, Technical Buyer) maps to the HubSpot contact's association label on the deal. Multiple roles per contact are preserved, and all role variations attached to a single opportunity are transferred to maintain complete buying committee context.

Salesforce Sales Cloud

LeadHistory / OpportunityHistory

maps to

HubSpot

Custom Audit Properties

1:1
Fully supported

Salesforce field history tracking records (e.g., stage changes, amount changes) migrate as time-stamped custom properties on the HubSpot deal. For stage history specifically, we populate Stage_History__c as a multi-value text property listing the sequence of stages with dates. This preserves the complete audit trail of all field modifications made within Salesforce for compliance and historical analysis.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

HubSpot logo

HubSpot gotchas

High

Marketing Contacts billing model is migration-critical

High

Feature tier gating is not visible until onboarding

Medium

Mandatory onboarding fees inflate year-one cost

Medium

HubSpot CSV importer cannot migrate engagements or attachments

Medium

Custom objects require Enterprise and a pre-existing schema

Pair-specific challenges

  • Salesforce RecordTypeId has no HubSpot equivalent — stage scoping requires pipeline redesign

    Salesforce record types scope Opportunity stage pick-lists, page layouts, and business-unit-specific validation rules. HubSpot has no record-type construct — all deals in a pipeline share the same stage set. A Salesforce org with four record types (New Business, Renewal, Partner, Internal) will have four HubSpot pipelines, each with its own stage set. Stage probabilities from Salesforce are preserved as a custom deal property since HubSpot does not natively model probability. We deliver a record-type-to-pipeline mapping plan before migration runs so your team can pre-design the HubSpot pipeline structure.

  • Salesforce Leads collapse into HubSpot Contacts — lifecycle stage assignment requires business logic

    Salesforce maintains a separate Lead object with a Status pick-list (New, Working, Nurturing, Converted) and a conversion workflow that creates Contact, Account, and Opportunity records simultaneously. HubSpot has no Lead object — all records land as Contacts. We import Salesforce Leads as HubSpot Contacts with lifecycle_stage set to 'lead' by default, and we preserve the original Lead Status in a custom property (sf_lead_status__c). Converted Salesforce Leads land as Contacts with lifecycle_stage='customer' since conversion implies a deal was created. Your team decides whether to route all Leads to the same lifecycle stage or apply a value-mapping based on Lead Status.

  • HubSpot custom objects cap at 10 per portal — excess Salesforce custom objects need consolidation

    HubSpot Enterprise limits custom objects to 10 per portal. Salesforce orgs with more than 10 custom objects require a scoping decision before migration begins: low-usage custom objects can be archived, or overlapping custom objects can be merged into existing HubSpot objects using a type-identifier custom property. We identify the consolidation options in the discovery phase and present them as a business decision to your team — this is not a technical limitation we can bypass, and it must be resolved before data mapping finalizes.

  • Salesforce Flows, Process Builder, and Workflow Rules do not migrate and have no direct HubSpot equivalent

    Salesforce automation lives in Flow (Record-Triggered, Screen, Autolaunched), Process Builder, and Workflow Rules. HubSpot Workflows operate on different triggers (property changes, form submissions, deal stage changes) and cannot model Salesforce's field-update logic natively. Apex trigger code has no HubSpot equivalent. We export your Salesforce automation definitions as a structured reference document and can assist with HubSpot workflow rebuild scoping, but the rebuild itself is a separate engagement. Critical automations — territory assignment, SLA timers, approval chains — need to be reviewed by your HubSpot admin before go-live.

  • Salesforce CreatedDate becomes a custom property — HubSpot sets createdate at import time

    HubSpot's createdate timestamp is set when a record is written to the HubSpot API, not when the original record was created in Salesforce. We preserve the original Salesforce CreatedDate, LastModifiedDate, and Opportunity CreatedDate as custom properties on the HubSpot record (original_create_date__c, original_last_modified_date__c). Historical reporting that relies on createdate will need to reference these custom properties in HubSpot reports. Activity timestamps and close dates are preserved natively since those fields map directly without HubSpot-overwrite behavior. Reports and dashboards using CreatedDate should be updated post-migration to reference the custom property.

Migration approach

Six steps for a successful Salesforce Sales Cloud to HubSpot data migration

  1. Discover Salesforce schema and map to HubSpot data model

    FlitStack AI extracts the full Salesforce schema via the Tooling API: all standard and custom objects, field-level metadata (API names, data types, pick-list values), record type assignments per Opportunity, and workflow/flow definitions. We cross-reference this against HubSpot's object model to generate the object mapping plan, flagging custom objects exceeding HubSpot's 10-object limit, identifying value-mapping needs for pick-lists, and surfacing Salesforce record-type-to-HubSpot-pipeline splits. This discovery output becomes the migration blueprint before any data moves.

  2. Create HubSpot properties and pipelines matched to the mapping plan

    Before data ingestion, FlitStack AI (or your HubSpot admin) creates all custom properties identified in the field mapping plan: sf_lead_status__c, sf_probability__c, source_system_id__c, original_create_date__c, forecast_category__c, and others. Each Salesforce record type gets a corresponding HubSpot deal pipeline with stages that mirror the Salesforce stage pick-list values. This pre-work ensures the import API can write directly into the correct properties without post-migration field creation gaps.

  3. Resolve owners and validate user email matches

    Salesforce User records are matched to HubSpot users by email address. Unmatched owners are flagged with a resolution report — your team creates HubSpot user accounts for unmatched owners or assigns a fallback HubSpot owner. No Salesforce Opportunity, Contact, or Lead is written to HubSpot without a resolved owner ID. This step runs before the main migration batch to prevent orphaned records.

  4. Migrate in dependency order: Accounts → Contacts/Leads → Opportunities

    HubSpot's association model requires Companies to exist before Contacts can be associated (via associatedcompanyid) and Companies/Contacts to exist before Deals can reference them. FlitStack AI sequences the migration: first Accounts to Companies, then Leads and Contacts to Contacts (with lifecycle stage assignment), then Opportunities to Deals with pipeline and stage mapping. This foreign-key sequencing prevents import failures from dangling references. All objects include source_system_id__c for traceability.

  5. Run sample migration with field-level diff before full commit

    A representative slice of 100–500 records — covering at least one Lead, one Contact, one Account, one Opportunity per Salesforce record type, and a sample of tasks/events/notes — migrates first. We generate a field-level diff report comparing source Salesforce values to destination HubSpot values for every mapped field. Your team reviews the diff to verify lifecycle stage assignment, pipeline routing, owner resolution, and custom property population. No full migration run commits until you sign off on the sample diff.

  6. Execute full migration with delta-pickup window and audit log

    The full Salesforce-to-HubSpot migration executes via Salesforce Bulk API 2.0 for large record sets and REST API for smaller objects. A delta-pickup window of 24–48 hours captures any Salesforce records modified during the cutover. Every operation is logged: record count per object, errors, skipped records, and owner-resolved counts. One-click rollback reverts all HubSpot records to the pre-migration state if reconciliation fails. An audit summary report is delivered post-migration for your records.

Platform deep dives

Context on both ends of the pair

Salesforce Sales Cloud logo

Salesforce Sales Cloud

Source

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.
HubSpot logo

HubSpot

Destination

Strengths

  • Genuinely useful free CRM tier with no seat limit on contact records.
  • All-in-one sales engagement layer (sequences, email tracking, calling, dialer) embedded natively in the CRM, eliminating a separate integration.
  • Intuitive interface and fast onboarding for individual reps, per G2 and Capterra reviews.
  • Workflow automation triggers across contacts, deals, and tickets with a visual builder.
  • API coverage for all standard objects including custom objects at Enterprise tier.

Weaknesses

  • Pricing model is contact-based at the marketing layer — importing all records as marketing contacts can multiply the monthly bill by 4×.
  • Feature tier cliffs are frequent surprises: sequences, calling, advanced reporting, and quoting are all gated, often requiring plan upgrades mid-implementation.
  • Mandatory onboarding fees at Professional ($1,500) and Enterprise ($3,500) are not prominently disclosed on the pricing page.
  • API rate limits are restrictive for bulk migration — burst limits of 100-200 req/10sec and search endpoint limits of 4 req/sec require careful job queuing.
  • Custom objects, additional pipelines, and advanced forecasting are Enterprise-only, making cost projections difficult for growing teams.

Complexity grading

How hard is this migration?

Standard CRM-to-CRM move with one structural twist: Salesforce Leads collapse into HubSpot Contacts with a Lifecycle Stage. Most teams ship in under a week.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Salesforce Sales Cloud and HubSpot.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    A

    Hand-curated field mapping is published for this pair.

  • Timeline complexity

    B

    1–3 days for orgs under 1M records; 1–2 weeks for enterprise orgs with heavy customization.

  • API constraints

    B

    Salesforce Sales Cloud: 100,000 daily API requests base for Enterprise, plus 1,000 requests per user license; concurrent long-running requests capped at 25; individual call timeout 10 minutes.

  • Data volume sensitivity

    A

    Salesforce Sales Cloud exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Salesforce Sales Cloud to HubSpot migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Salesforce Sales Cloud to HubSpot data migrations

Answers to the questions buyers ask most during Salesforce Sales Cloud to HubSpot migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Salesforce Sales Cloud to HubSpot migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Salesforce-to-HubSpot migrations complete in 48–72 hours of clock time for under 50,000 records. Orgs exceeding 500,000 records or containing more than 10 Salesforce custom objects extend to 5–10 days because HubSpot's custom object cap requires consolidation scoping before mapping can finalize. Timeline also varies based on the number of Salesforce record types and custom field complexity. The record-type-to-pipeline mapping planning step is the longest pre-migration activity and runs concurrently with HubSpot property setup to minimize overall project duration.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Salesforce Sales Cloud.
Land in HubSpot, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day