CRM migration
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
Source
HubSpot
Destination
Compatibility
14 of 15
objects map 1:1 between Salesforce Sales Cloud and HubSpot.
Complexity
BStandard
Timeline
48–72 hours
Try the reverse
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Source platform
Salesforce Sales Cloud platform overview
Scorecard, SWOT, gotchas, and pricing for Salesforce Sales Cloud.
Destination platform
HubSpot platform overview
Scorecard, SWOT, gotchas, and pricing for HubSpot.
Data migration guide
The complete HubSpot migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
Salesforce migration guide
Understand the data you're exporting from Salesforce Sales Cloud before mapping it.
Destination checklist
HubSpot migration checklist
Pre- and post-cutover tasks for moving onto HubSpot.
Source checklist
Salesforce migration checklist
Exit checklist for unwinding your Salesforce Sales Cloud setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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
HubSpot
Contact
1:1Salesforce 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
HubSpot
Contact
1:1Salesforce 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
HubSpot
Company
1:1Salesforce 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
HubSpot
Deal
1:1Salesforce 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)
HubSpot
Deal (Pipeline)
1:manyEach 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
HubSpot
Company Association
1:1Salesforce'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')
HubSpot
Activity (Email)
1:1Salesforce 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')
HubSpot
Activity (Call)
1:1Salesforce 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
HubSpot
Activity (Meeting)
1:1Salesforce 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
HubSpot
Note
1:1Salesforce 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)
HubSpot
HubSpot Owner
1:1Salesforce 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
HubSpot
Custom Object (Enterprise)
1:1Salesforce 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
HubSpot
HubSpot Campaign
1:1Salesforce 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
HubSpot
Deal Association
1:1Salesforce 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
HubSpot
Custom Audit Properties
1:1Salesforce 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.
| Salesforce Sales Cloud | HubSpot | Compatibility | |
|---|---|---|---|
| Lead | Contact1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Account | Company1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Opportunity (RecordTypeId) | Deal (Pipeline)1:many | Fully supported | |
| Account Contact Relation | Company Association1:1 | Fully supported | |
| Task (Type='Email') | Activity (Email)1:1 | Fully supported | |
| Task (Type='Call') | Activity (Call)1:1 | Fully supported | |
| Event | Activity (Meeting)1:1 | Fully supported | |
| Note / Salesforce File | Note1:1 | Fully supported | |
| User (Owner) | HubSpot Owner1:1 | Fully supported | |
| Custom Object __c | Custom Object (Enterprise)1:1 | Fully supported | |
| Campaign / Campaign Member | HubSpot Campaign1:1 | Fully supported | |
| OpportunityContactRole | Deal Association1:1 | Fully supported | |
| LeadHistory / OpportunityHistory | Custom Audit Properties1:1 | Fully supported |
Gotchas + challenges
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 gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
HubSpot gotchas
Marketing Contacts billing model is migration-critical
Feature tier gating is not visible until onboarding
Mandatory onboarding fees inflate year-one cost
HubSpot CSV importer cannot migrate engagements or attachments
Custom objects require Enterprise and a pre-existing schema
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Salesforce Sales Cloud
Source
Strengths
Weaknesses
HubSpot
Destination
Strengths
Weaknesses
Complexity grading
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.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Salesforce Sales Cloud and HubSpot.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Hand-curated field mapping is published for this pair.
Timeline complexity
1–3 days for orgs under 1M records; 1–2 weeks for enterprise orgs with heavy customization.
API constraints
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
Salesforce Sales Cloud exposes a bulk API — large-volume migrations stream efficiently.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Salesforce Sales Cloud to HubSpot migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Salesforce Sales Cloud
Other ways to arrive at HubSpot
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.