Migration Reference
Salesforce to HubSpot Migration
What actually transfers, what quietly does not, and what has to be rebuilt by hand.
We mapped Salesforce against HubSpot feature by feature: 115 features, 11 synced objects, 15 documented traps and 24 items that have to be rebuilt. The whole map is on this page, ungated.
The PDF is the same reference, formatted for a procurement file.
Get The Reference And The Calculator
The full Salesforce to HubSpot reference as a PDF, plus the Excel calculator we scope these migrations with: every one of the 115 features as a row, enter your counts, get hours.
Three files: the reference as a PDF, the same reference in Markdown for your AI tool, and the full Excel effort calculator.
Salesforce to HubSpot is a very high migration, typically 4-12 weeks. Of the 115 features we mapped, 29 carry across as they are and 82 land with something lost: the 24 items nothing moves for you is what will actually set your timeline, not the sync.
Migration Scorecard
- Migration complexity
- Very high
- Typical timeline
- 4-12 weeks
- Recommended method
- Sync then migrate
- Native sync
- Dedicated native connector, two way
- Smart transfer
- Supported
- HubSpot subscription
- Sync itself needs a paid HubSpot plan, whether Starter, Professional or Enterprise, and on the Salesforce side either Professional edition or any edition that carries API access. Two features raise that floor further: custom object sync needs HubSpot Enterprise, and custom field mappings need Data Hub Starter or above. Check both editions against what you actually run before scoping the work, since the sync itself is worthless without the subscriptions under it.
Feature parity across 115 capabilities
- Maps directly: 29 (25%)
- Maps partially: 82 (71%)
- No equivalent: 4 (3%)
11
Objects synced natively
15
Limitations and traps
24
Manual rebuild items
3
Source editions covered
Where this comes from: Our own research corpus, verified 2026-07-31, behind every number on this page.
The Eleven Objects That Sync Natively
What the connector moves for you, and which way each one flows.
Leads
Two wayBecomes Contacts
Salesforce keeps Leads and Contacts as two separate objects; HubSpot folds both into a single Contacts object, so the direction back into Salesforce needs a decision from you about whether a HubSpot contact should create a Lead or a Contact on the other side. Converting a Lead in Salesforce carries through as a lifecycle stage change in HubSpot, and any field sharing the same internal name on both the Lead and Contact object syncs to both, worth checking deliberately rather than assuming, since an identically named field can carry different meaning on each object.
Contacts
Two wayBecomes Contacts
Contact sync is the one piece that is not optional; everything else on this list is a choice you make. Inclusion lists and selective sync let you decide which records actually cross, and each field can be set to its own sync direction independently: two way, always take Salesforce's value, or always take HubSpot's. That per-field control is genuinely useful where a group runs several entities through one Salesforce org, since a field that should stay entity-specific does not have to inherit the same rule as everything else.
Accounts
Two wayBecomes Companies
Get the order right or the associations will not form: company sync has to be switched on before deal sync, and the Salesforce account import needs to be finished before either. Association labels do sync across, but account hierarchies only have limited support, which matters directly to a group with a holding company sitting above several operating entities, since the parent-child structure that ties them together is not something this native sync carries with any reliability.
Opportunities
Two wayBecomes Deals
Every Salesforce record type lands as its own HubSpot pipeline, auto-named 'Salesforce - [record type ID]', so an org running separate record types per market or per entity arrives in HubSpot as that many separate pipelines, not one consolidated view. Multi-currency orgs still only pass the numeric value with no exchange rate conversion, company sync has to be on for the deal-company associations to hold, and the total number of pipelines HubSpot will accept is capped by the Sales Hub subscription tier, worth checking early if the account structure already runs several record types.
Cases
Two wayBecomes Tickets
A Salesforce Case becomes a HubSpot Ticket on sync, and association toggles give you control over which related objects travel with it. Set those toggles deliberately rather than leaving the defaults: a support case tied to the wrong set of related records is a service team working from an incomplete picture.
Tasks (Salesforce)
Two wayBecomes Tasks
Task sync has its own on/off switch, separate from activity sync, so enabling one does not enable the other. Turn it on and a task created in Salesforce can automatically spawn its counterpart in HubSpot, worth confirming with whichever team actually works from tasks day to day before assuming it is already happening.
Activities (HubSpot timeline events)
Out to sourceBecomes Activities (emails, notes, meetings, calls)
This one runs mostly in a single direction: a HubSpot timeline event becomes a Salesforce task, not the reverse. Three separate limits sit inside that flow at once: marketing email events only carry across inside a 30-day window of the contact syncing, form submissions only inside a year, and anything Einstein Activity Capture logged in Salesforce does not sync to HubSpot at all. Sales emails, meetings, notes and content views wait on the associated contact being triggered to sync first, so a fast-moving deal can outrun its own activity history if the contact record has not yet crossed.
Campaigns
Into HubSpotBecomes Contact property (Salesforce Campaign ID)
What crosses is a single identifier, not the campaign itself: the Salesforce Campaign ID lands as a contact property in HubSpot, because the two platforms' campaign objects are conceptually different things and cannot map to one another. Nothing flows the other way either; a HubSpot campaign has no path back into Salesforce. Forms can still be associated with a Salesforce campaign, one of the few places the two systems genuinely meet on this object.
Custom Objects
Two wayBecomes Custom Objects
Custom object sync carries a stack of conditions, not just one: an Enterprise subscription, the object built in HubSpot before sync setup begins, at least one required field on it, and no lookup fields mapped at all, since those are not supported. Associations to standard objects only work once the standard object is itself already syncing, and bidirectional sync specifically needs one of Content Enterprise, Enterprise Customer Platform, Marketing Enterprise, Data Enterprise, Sales Enterprise or Service Enterprise. For a business whose custom objects carry its actual structure, units, tenders, licensed entities, that full list belongs in the scoping conversation before a single object is built, not discovered condition by condition once the project is under way.
Person Accounts
Into HubSpotBecomes Contacts
Person Accounts follow their own path into HubSpot Contacts, a separate mapping from the ordinary Accounts and Contacts entries above it, which matters for a Salesforce org using Person Accounts to represent individuals rather than companies. The mapping itself is documented in HubSpot's Smart Transfer data sync object mappings (knowledge.hubspot.com/integrations/supported-apps-for-hubspot-smart-transfer, read 2026-07-31), worth checking directly rather than assuming it behaves the same as the standard Account mapping.
Notes
Into HubSpotBecomes Notes
Notes are one of the more straightforward transfers on this list: Smart Transfer supports them directly, with the mapping documented in HubSpot's Smart Transfer data sync object mappings (knowledge.hubspot.com/integrations/supported-apps-for-hubspot-smart-transfer, read 2026-07-31). Confirm the coverage against that page rather than assuming from this summary, since Smart Transfer's supported list changes.
Fifteen Things the Sync Does Not Tell You
Each one is documented, and each one has ended a migration in a bad week.
API Call Limits Constrain Sync Throughput
Every contact that syncs can burn through as many as four Salesforce API calls, and your Salesforce edition and licence set the ceiling on how many calls exist to spend in a day. HubSpot's 'Allocated to HubSpot' setting then caps the integration's own share of that ceiling within each rolling 24-hour window, so a large initial sync competing with everyday Salesforce use for the same pool of calls is how a migration stalls partway through without anyone touching a setting.
Workaround: Four levers exist, and it is worth knowing all four before the sync ever runs close to its limit: watch usage on the Sync Health tab, raise or lower the 'Allocated to HubSpot' setting, narrow the volume with inclusion lists or selective sync, or move to a higher Salesforce edition for more calls outright. In a Gulf group running several entities off one Salesforce contract, the edition upgrade is rarely yours alone to decide: it is a licensing cost that needs sign-off from whoever holds that contract, not just the project team running the migration.
15-minute Sync Interval for Incremental Changes
Fifteen minutes is the shortest gap the standard sync allows between a change in one system and its arrival in the other: HubSpot polls for updates on that cycle rather than pushing them the instant they happen. Where WhatsApp and a phone call are the real record of a conversation and the CRM update follows some minutes behind it anyway, that gap rarely matters. It matters a great deal on a live tender or a fast-moving deal where two people are working the same account from different systems and neither can see what the other just did.
Workaround: Where near-real-time actually matters, HubSpot's Data Hub Data Sync closes the gap to seconds rather than minutes, or a custom API integration can be built to the same effect. Either is a genuine cost line, so decide whether the fifteen-minute default is actually a problem for your sales process before budgeting for either fix.
Products and Line Items Do NOT Sync
Nothing about a product or a line item crosses the connector in either direction: an opportunity syncs as a deal, but the products and priced line items sitting on it stay behind in Salesforce. What lands in HubSpot is a deal with a value and a stage and no record of what was actually being sold, at what price, in what quantity or in which currency, a serious gap for a business quoting the same product in AED, SAR and USD across a Gulf group.
Workaround: Rebuild the product catalogue directly in HubSpot rather than waiting for it to arrive: a CSV import or an API script carries the line item data across, and a third-party tool such as Commercient or a purpose-built API integration can do the same job at scale. Do this before quotes start going out of the new system, because a catalogue built once a market is already live in HubSpot means restating every open quote by hand.
Files and Attachments Do NOT Sync Natively
Whatever is attached to an opportunity, an account or a contact record in Salesforce stays there: the native integration carries no files or attachments across in either direction. Look at what actually sits in those attachment fields on a regional account: trade licence copies, VAT registration certificates, tender submissions and signed Arabic-language contracts. None of that moves with the record it is attached to.
Workaround: Smart Transfer's one-time attachment transfer is the route to take first, with a third-party migration tool as the fallback for anything it misses. Reserve a manual download-and-reupload pass for a small, named set of critical files only: a hand-carried transfer is exactly where an Arabic filename gets mangled or a document quietly loses the record it was evidence for, the kind of break a compliance review finds long after go-live rather than during it.
Formula Fields Do Not Trigger Sync
A formula field recalculating in Salesforce is invisible to the sync: HubSpot only triggers on a record modification, and a formula's new value is not treated as one, however material the change actually is. A deal that just crossed a discount threshold or a risk score that just flipped can sit unsynced in HubSpot for as long as nothing else on the record changes.
Workaround: Build a small Salesforce workflow that writes the formula's result into an ordinary, non-formula field whenever it changes: that write counts as a modification and pulls the sync behind it. It is a modest piece of Salesforce configuration, but it needs to exist for every formula field the business actually relies on, not just the obvious one.
Field Type Mismatches Cause Sync Errors
Mapping only works between compatible types: a HubSpot property and a Salesforce field that disagree on type throw a 'Type mismatch' error, and a picklist carrying more values than HubSpot allows throws an option limit error instead. Picklists are where a regional data model tends to break first: emirate and city lists, free-zone jurisdictions, nationality and language fields, each built up by hand over years until it exceeds what the mapping will accept.
Workaround: Align the field types before a single mapping is created, trim unused picklist options rather than carrying them across, and build fresh HubSpot properties of the right type wherever the existing ones will not do. Settle the language of each picklist in the same pass: a list kept half in Arabic and half in English will not map cleanly and will not report cleanly once it does.
Custom Object Lookup Fields Cannot Be Mapped
The integration will not accept a Salesforce lookup field on a custom object as a mapping target, so any relationship modelled through a lookup has no path across the sync at all. That is a hard limit exactly where custom objects tend to carry the real structure of a regional business: units linked to towers in real estate, pre-qualifications linked to tenders in construction, licensed entities linked to their group parent in financial services.
Workaround: Swap the lookup relationship for a plain text ID field that carries the linked record's identifier across, then rebuild the associations by hand once the sync has run, or build a custom API-based sync purpose-made for lookup relationships. Whichever route is chosen, put someone who actually knows the entity structure on the re-association pass: a wrong link inside a multi-entity group is not something a validation script will catch.
Custom Object Associations Not Fully Maintained
Custom object sync carries the object across but not automatically the web of associations around it, and an association can only pass at all between two objects that are both already syncing with HubSpot. Turn on custom object sync before the standard objects underneath it are syncing, and the links a regional account structure depends on simply do not form.
Workaround: Sequence it deliberately: confirm every related standard object is already syncing before custom object sync goes live, then map the remaining associations by hand and use workflows to re-create the ones that still do not form on their own. Treat the sequence as a checklist item in the plan rather than an assumption, because it is easy to enable custom object sync first and only discover the ordering problem afterwards.
Custom Objects Require Enterprise Subscription
There is no tier below Enterprise that syncs custom objects at all, and the object itself has to exist in HubSpot, with at least one required field defined, before the sync can even be configured. Where a regional business runs its actual structure through custom objects, units and towers, tenders and licensed entities, that Enterprise requirement is not a nice-to-have discovered mid-project: it belongs in the first budget conversation, because a tier change found partway through a committee-run procurement restarts an approval cycle that runs in months rather than days.
Workaround: There is genuinely no way around this one: an Enterprise subscription is required, full stop. What you can control is the timing, so design the custom object architecture in HubSpot in full before sync is switched on, rather than discovering the gaps in the schema after records have already started to move.
Marketing Email Events Limited to 30-day Lookback
Only the last thirty days of marketing email engagement travels with a contact when it syncs to Salesforce; anything older than that window is simply not carried across and cannot be recovered afterwards by running the sync again. A decision cycle slowed by Ramadan, Eid or the deep summer, which is normal in this market, can be enough on its own to age a whole quarter of engagement data out of that window before the project even reaches the sync step.
Workaround: Pull the historical engagement data out on its own, ahead of the sync, and bring it back in afterwards as custom properties or notes attached to the contact record. Do the export early in the project rather than at the point of cutover, since the thirty-day clock is already running against whatever has not yet been captured.
Form Submissions Limited to 1-year Lookback
A contact's form submission history only makes the crossing to Salesforce if it falls inside the twelve months before that contact was synced; anything older is left behind. A long procurement cycle, common enough for an enterprise or public sector deal in this market, can put the original inquiry form on the wrong side of that line before the deal has even closed.
Workaround: Export the older submissions on their own before the window closes on them, and bring them back in through a CSV import or the API rather than accepting the loss. Treat this as one more item on the pre-migration audit list, not an afterthought once the sync is already running.
Campaign Removal Does Not Trigger Sync
Take a record off a Campaign in Salesforce and nothing happens on the HubSpot side by default: that removal alone does not trigger a sync. The contact or custom object record has to be independently prompted to sync, by some other field change, before HubSpot's copy reflects that the record is no longer on the list.
Workaround: Trigger the sync on the affected records by hand, or make a small, deliberate update to any other field on the record to set the sync off. Either way it needs to be a step someone owns, because nothing in the platform will flag that a campaign removal is sitting unsynced.
Multi-currency Values Sync Without Exchange Rates
A multi-currency Salesforce org hands over only the bare number: no exchange rate is applied during the sync, and the currency code itself does not transfer with it. For a group pricing the same deal in AED, SAR and USD across its operating entities, that means HubSpot receives figures with no way to tell which currency they were ever in, which turns consolidated revenue reporting across the group into a manual reconciliation exercise rather than a report.
Workaround: Either agree a single reporting currency before the sync runs, or apply the exchange rate conversions by hand afterwards. Whichever the group decides, put the decision in writing before go-live: it is the kind of choice finance across several entities needs to agree on together, not one the project team should make on their behalf.
Einstein Activity Capture Emails Do Not Sync
Einstein Activity Capture logs an email in a form the integration does not recognise: it never becomes a standard task or email activity inside Salesforce, so it never becomes anything on the HubSpot side either. Whoever runs a compliance or audit review on the account afterwards will not find that correspondence in HubSpot at all, and will have no way to know from HubSpot alone that it exists.
Workaround: Either log the emails that matter manually as Salesforce tasks so they take the standard path into the sync, or switch to HubSpot's own email tracking and capture the activity directly on that side instead. Decide which correspondence actually needs to be visible in HubSpot before choosing between the two, since logging everything by hand rarely holds up past the first few weeks.
HubSpot Campaigns Are Conceptually Different From Salesforce Campaigns
The word 'campaign' means two different things on either side of this integration: a HubSpot campaign groups marketing assets together, while a Salesforce campaign is a list of members each carrying a status. Because they describe different kinds of object entirely, there is no mapping between them, direct or otherwise, and a strategy built around exhibitions, conference floors and referral tracking inside a group structure has to be rebuilt on HubSpot's model rather than carried across on the name alone.
Workaround: Split the old Salesforce campaign into its two real jobs: HubSpot campaigns for grouping the marketing assets, and lists or active segments for tracking who is actually a member and what their status is. Rebuild it around where regional demand genuinely arrives, exhibition and conference floors, WhatsApp inbound, referral from within the group, rather than reproducing a category list nobody has used since the last event season.
Four Salesforce Features HubSpot Cannot Replace
No workaround closes these. Each one is a capability you would be giving up, so decide who in the business can live without it before you commit to a date.
Field Service Lightning
If dispatch, crew scheduling or preventive maintenance runs through Field Service Lightning today, none of it has anywhere to land in HubSpot: field service management is not a capability HubSpot offers at all. Budget for a dedicated platform such as ServiceTitan or Jobber, or a custom build, running alongside HubSpot rather than inside it.
Visual Remote Assistant
No HubSpot equivalent. Requires third-party AR/remote support tools if needed.
Chatter Groups
No HubSpot equivalent. Recommend Slack channels, Microsoft Teams, or other collaboration tools.
Partner Relationship Management (PRM)
Three named vendors cover the gap HubSpot leaves here: PartnerStack, Allbound and Channeltivity all integrate with HubSpot and between them cover most PRM use cases. Where the budget will not stretch to a dedicated product, deal registration itself can be approximated inside HubSpot using forms feeding into a dedicated deal pipeline, though that is a workaround rather than a genuine PRM and should be presented to whoever owns the partner programme as exactly that.
Twelve Things a Migration Does Not Rebuild
These are Salesforce's own code and products, and a HubSpot migration will not carry them across: they carry no hours in the estimate. They still need a decision before cutover, because you are the one giving something up.
Apex Triggers
Every Apex trigger running in your instance encodes business logic that has no direct port to HubSpot: each one has to be read individually and sorted into what a workflow or custom code action can reproduce and what needs an external service standing alongside HubSpot instead. A before-save validation trigger is the hardest of the three to replicate, since HubSpot has no equivalent point in the record-save sequence to block or rewrite data before it lands. Line count of the Apex behind each trigger is the honest way to size the work before it starts, not after.
Apex Classes (Controllers, Services, Utilities)
Sort every Apex class in your org into one of four buckets before pricing the rebuild: utility classes, which often turn out unnecessary once HubSpot's native tooling replaces what they did; integration classes, which need rewriting against the HubSpot API; business logic, which becomes a workflow or custom code action; and UI controllers, which get rebuilt from nothing. Total line count and class count across those buckets is what actually drives the estimate, and each significant class runs 4 to 8 hours once identified.
Scheduled Apex / Batch Apex
Scheduled and batch Apex jobs typically process data volumes HubSpot workflows were never built to carry, so the question to answer before migration is not whether the logic can be ported but whether the volume behind it can move through HubSpot at all. Where it cannot, an external ETL tool or a scheduled serverless function has to stand in for what batch Apex used to do.
Visualforce Pages
Every Visualforce page in your org is a rewrite, not a port, and the target depends on what the page was actually for: a PDF template moves to HubSpot's own quote templates or an external PDF generator, a custom form becomes a HubSpot form or custom code, and a genuinely complex UI is often enough work to need a separate web application built alongside HubSpot rather than inside it.
Lightning Web Components (LWC)
Lightning Web Components carry no path into HubSpot at all: each one is a full rewrite, sorted by what it actually does. A simple data display becomes HubSpot record customisation, an interactive tool becomes a CRM extension card, and a full application becomes a separate web app built outside HubSpot entirely. Of everything in a Salesforce migration, this is consistently one of the largest gaps to size, so treat the LWC inventory as its own line item in the estimate rather than folding it into the general rebuild.
Einstein Analytics / Tableau CRM / CRM Analytics
Nothing in CRM Analytics, formerly Tableau CRM or Einstein Analytics, carries across: the dashboards and datasets need a complete rebuild in an external BI tool, and the SAQL queries, data recipes and AI predictions behind them do not migrate at all. How sophisticated your existing analytics actually are is what should decide which BI tool replaces it, so size that assessment before choosing one off a shortlist.
Salesforce Connect (External Objects)
HubSpot has no equivalent to a virtual object that shows externally-held data without copying it: External Objects and HubSpot start from a fundamentally different model of where data lives. Three routes exist and they carry different consequences: sync the external data into HubSpot outright, which duplicates it; display it through a CRM card without storing it; or keep separate access to the external system running alongside HubSpot. This is an architecture decision, not a migration task, and it is worth making deliberately rather than defaulting to whichever route looks fastest.
MuleSoft Integration
A MuleSoft estate represents real investment, and the migration does not have to throw it away: you can keep MuleSoft in place and repoint its flows at the HubSpot API, or move to lighter-weight middleware if the investment no longer justifies itself. Either way, every flow and API in Anypoint needs individual evaluation, and that evaluation is substantial enough to run as its own workstream alongside the core migration rather than a line inside it.
Experience Cloud (Communities)
Treat every Experience Cloud site as a custom web application rather than a configuration to migrate, because that is what it actually is. A customer portal has a home in HubSpot's own Customer Portal and a knowledge base in HubSpot's KB, but a partner portal has no equivalent at all and needs a third-party product, and the same is true of community forums, which need something like Discourse or Khoros running alongside HubSpot. Any custom page beyond those standard patterns is a rebuild from nothing.
Partner Relationship Management (PRM)
Partner Relationship Management sits in a solution category HubSpot does not compete in at all, so if deal registration, partner onboarding or channel marketing runs through Salesforce PRM today, none of it folds into the HubSpot migration: a dedicated third-party PRM has to run alongside HubSpot instead. Treat that as a major line in scope and budget, not a detail to discover once the main migration is already underway.
Salesforce CPQ (Configure, Price, Quote)
Of everything in a Salesforce migration, CPQ is consistently among the hardest to move: pricing rules, configuration rules, product bundles and approval chains all need rearchitecting from the ground up rather than a straightforward port. Where CPQ carries real weight in how you sell today, that rearchitecting alone can double the overall migration timeline, so price and schedule CPQ as its own assessment rather than folding it into the general estimate.
Salesforce Billing
HubSpot was never built to replace a financial system, and Salesforce Billing is exactly that: invoicing, payment processing, revenue recognition and usage-based billing all need a dedicated billing platform integrated alongside HubSpot rather than folded into it. Scope this migration as two transitions running together, the CRM move and the billing system move, not one.
The 24 Items That Get Rebuilt by Hand
This is the list that separates a quote that holds from one that does not.
Data And Objects
Products and Price Books
Products, Price Books and Price Book Entries all stay on the Salesforce side; none of it crosses, so the product catalogue has to be built fresh inside HubSpot rather than carried over. Treat it as a rebuild rather than a copy: a regional catalogue usually prices the same item in AED, SAR and USD with VAT handled differently market to market, a structure far cheaper to settle while the catalogue is being entered than after quotes are already going out against it.
HubSpot: HubSpot Products library
A CSV import carries the SKUs, prices and descriptions across in one pass, and it is worth setting up HubSpot's product-based quoting workflow at the same time rather than as a later addition, since quoting off an unstructured catalogue is what forces the rebuild to happen twice.
Line Items on Deals/Opportunities
History is the casualty here: the line items already sitting on existing opportunities do not sync at all, and only new product associations created after the integration goes live actually work. A closed deal's line item detail, useful evidence in a tender file or an audit, has to be pulled out and carried across separately, because the connector will not do it going forward.
HubSpot: HubSpot Deal Line Items
Bring the historical detail across through a manual CSV import or an API-based migration, and do it only after the HubSpot product catalogue is mapped, since line items with nothing to attach to are just orphaned numbers.
Custom Object Schemas
A custom object schema has to be fully defined inside HubSpot, property types, required fields and all, before sync can even begin; none of that arrives from Salesforce automatically. This is where units and towers in real estate, tenders and pre-qualifications in construction, or licensed entities in financial services get built for the first time on the new platform rather than transferred to it.
HubSpot: HubSpot Custom Objects
Two ceilings sit on this before a single schema is drawn: the tier requirement and a cap on how many custom object definitions are allowed at all, both worth pulling directly from the feature table rather than assuming. Plan the schema with real care, because changing it after records have accumulated against it is a far harder job than getting it right at the start.
Campaign Data and Member Statuses
Membership, statuses and the response history that went with a Salesforce campaign all stay behind; the only thing that crosses is the Campaign ID, landing as a bare contact property. For a business that tracks who actually attended an exhibition or responded to a conference follow-up, that history has to be exported and rebuilt separately rather than assumed to carry over with the ID.
HubSpot: HubSpot Campaigns (asset grouping) + Active Lists (membership tracking)
This is not a like-for-like rebuild but a genuine re-architecture: HubSpot campaigns are built to group marketing assets, not to track who is a member and what their status is, which is what a Salesforce campaign actually does. Membership tracking has to move to lists and active segments instead, built around how the region's leads genuinely arrive, exhibition floors, WhatsApp inbound, referral within the group, rather than copied field for field from the old campaign structure.
Attachments and Files
None of it moves on its own: Files, Attachments and ContentDocument records are all invisible to the native sync. Look at what those objects actually hold on a regional account before assuming the loss is minor, trade licence copies, VAT certificates, signed Arabic-language contracts, tender submissions, since none of it is decorative and none of it crosses without deliberate action.
HubSpot: HubSpot file manager + record attachments
Smart Transfer's one-time transfer is the first option to reach for, and it will cover most of it. Where the file volume is large enough to strain that, a third-party migration tool or purpose-built API scripting picks up the rest, worth budgeting for as soon as the file count is known rather than after the transfer has already stalled.
Account Hierarchies
The parent-child structure that ties a Salesforce account hierarchy together does not come across at all. A group with a holding company sitting above several operating entities and a free-zone entity is held together entirely by those links, and once they are gone in HubSpot, nothing in the system shows that a dozen accounts are actually one customer.
HubSpot: HubSpot parent-child company associations
Rebuild the hierarchy deliberately using HubSpot's parent company associations, and give the job to someone who actually knows the group structure by name rather than to a bulk import, since a misplaced entity link inside a holding structure is exactly the kind of error a validation pass will not surface on its own.
Automation
Workflows / Process Builder / Flows
Nothing about Salesforce automation carries across: Workflow Rules, Process Builder, Flows and Apex triggers all have to be rebuilt from nothing inside HubSpot. Treat that rebuild as the point where the approval chain your organisation actually runs on, the discount that needs finance sign-off, the tender response that needs the general manager, can finally be written into the system instead of living in a WhatsApp thread.
HubSpot: HubSpot Workflows
Document every piece of it before migration starts, because nothing will be there to remind you afterwards. HubSpot's workflow builder is more visual than Salesforce's but works to different logic, so treat the rebuild as a chance to simplify rather than a straight port, keeping in mind that approval processes specifically have only limited HubSpot equivalents and may need a different answer entirely.
Approval Processes
Approval processes are one of the areas with the least direct equivalent on the other side: nothing transfers, and what HubSpot offers in its place is limited. Where a regional business runs multi-signatory approval on discounts, tenders or contract terms, spanning finance, a country lead and sometimes a group parent, that gap is worth naming to the committee early rather than discovering it at go-live.
HubSpot: HubSpot Workflows with approval actions (limited) or third-party approval tools
HubSpot's own approval features are simply less granular than Salesforce's, so a complex, multi-step approval chain will likely need a custom build or a third-party app to reproduce properly. Cost that out before promising the business its old approval logic will just reappear on the new platform.
Lead Assignment Rules
Lead assignment rules and territory management have to be recreated rather than carried over, which is the moment to decide how leads should actually route across a group with several markets: by country, by legal entity, or by the language the inquiry arrived in, rather than reproducing whatever grew up in Salesforce by habit.
HubSpot: HubSpot round-robin assignment, workflow-based routing, or lead routing tools
HubSpot's own routing has improved in recent releases, and for a straightforward setup it may cover the ground on its own. Where the routing genuinely needs to be complex, a group split across several entities and languages being the common case here, Data Hub is worth evaluating before defaulting to a custom build.
Email Sequences and Templates
Every Salesforce email template, Lightning ones included, has to be rebuilt by hand in HubSpot; none of them migrate. For a bilingual team that is real work rather than retyping: an Arabic template needs a layout built right to left from the start rather than an English template with Arabic text dropped into it, and the greeting, honorific and signature block differ enough between the two languages to warrant separate templates rather than one with a language toggle.
HubSpot: HubSpot email templates and Sequences (Sales Hub)
Rebuild the templates directly in HubSpot rather than importing them, and use the move as a chance to upgrade: HubSpot's Sequences add automation that Salesforce's basic templates never had, so the rebuild can end up ahead of where the old system left off rather than merely equal to it.
Validation Rules
Field-level validation rules have no direct equivalent in HubSpot and have to be rebuilt by hand, one rule at a time. Prioritise the ones that enforce formats specific to this market first, a trade licence number, a VAT registration, an entity-of-record field, since those are the fields most likely to accumulate bad data the moment validation lapses even briefly.
HubSpot: HubSpot required fields, property validation rules, workflow-based validation
HubSpot covers required fields and basic single-property validation out of the box. Anything that checks one field against another, which is where most of the region-specific format rules actually live, needs a workflow or a custom coded action built specifically for it rather than a setting toggled on.
Reporting
Reports
Every Salesforce report needs to be rebuilt from nothing in HubSpot, and the two platforms' report types do not line up closely enough for a straight port: what a report can filter on, group by or calculate differs significantly between them. Use the rebuild to decide which reports actually earn their place rather than reproducing the full list out of habit.
HubSpot: HubSpot custom reports, with the custom report builder plan-gated
Map the existing report list first and be honest about which of them are still actually used; a good number will turn out to be simplified or dropped rather than rebuilt. HubSpot's reporting has its own strengths rather than the same strengths differently arranged: attribution reporting is genuinely strong, while cross-object reporting can be more limited, so a report leaning on the latter may need a different design rather than a direct rebuild.
Dashboards
Dashboards do not carry across in any form, so every one of them is built again from a blank canvas in HubSpot. Design each dashboard around what a specific team actually needs to see day to day rather than defaulting to whatever the old Salesforce layout happened to be.
HubSpot: HubSpot Dashboards
The build itself is genuinely easier in HubSpot, though the range of chart and visualisation options is narrower than Salesforce offered. Plan the layout separately for each team rather than reusing one dashboard everywhere, since a sales dashboard and a service dashboard rarely need the same story told the same way.
Forecasting
Forecasting configuration, the categories underneath it and every year of historical forecast data all stay in Salesforce; none of it transfers. Build the new forecast around how deals here actually close, through committee sign-off spanning finance, IT and the business owner, rather than assuming stage-weighted probability alone will tell the true story.
HubSpot: HubSpot Forecasting tool (Sales Hub)
Rebuild the forecast categories and the pipeline alignment underneath them, and export the historical forecast data from Salesforce before it is out of reach, since nothing after migration will recover it. Give revenue attribution and pipeline reporting careful setup from day one, and build the calendar with Ramadan, Eid and the deep summer factored in, since a forecast that treats every month as equal will read three of them as failure every year.
Sales And Marketing Config
Lead Scoring
Whatever scoring model Salesforce was running, native rules or Einstein, has to be built again from scratch in HubSpot. Rebuild the signals around where demand genuinely arrives in this market, exhibition and conference floors, property portals, WhatsApp inbound, referral from within the group, rather than porting a scoring logic tuned to a different sales process.
HubSpot: HubSpot Lead Scoring (Marketing Hub) or Breeze predictive scoring
HubSpot offers both rule-based scoring and AI-based predictive scoring, so the rebuild is not a downgrade, but the criteria still need to be set deliberately to match the actual business rules rather than left on defaults built for a different market.
Territories and Territory Management
There is nothing in HubSpot that maps directly onto Salesforce's territory management product; the concept has to be reconstructed rather than migrated. For a group covering several Gulf markets, that reconstruction is also the moment to decide whether territories should follow country, legal entity or language, since the old Salesforce structure may have grown around none of those deliberately.
HubSpot: HubSpot Teams + workflow-based routing
HubSpot Teams will cover a basic territory structure well enough. A genuinely complex, multi-level hierarchy, several operating entities each with their own sub-territories, is more likely to need a custom solution than a native one, so size that possibility before promising the simpler answer will do.
Quotes and CPQ
Salesforce CPQ, or native Salesforce quotes if CPQ was never in use, both have to be rebuilt rather than carried over. A quoting tool built to handle multi-currency, multi-entity pricing in AED, SAR and USD with VAT applied differently by market is usually the reason CPQ existed in the first place, so check that HubSpot's own quoting can actually cover that ground before assuming it can.
HubSpot: HubSpot Quotes
HubSpot's native quoting is genuinely simpler than Salesforce CPQ, fine for a straightforward catalogue and a problem for a complex one. Where the old CPQ configuration was doing real work, approval routing, tiered discounting, multi-currency pricing, a third-party HubSpot CPQ tool such as DealHub or PandaDoc is worth evaluating rather than trying to force it into the native quoting tool.
Web-to-Lead / Web-to-Case Forms
Web-to-Lead and Web-to-Case forms both have to be replaced with HubSpot forms rather than migrated; nothing carries over automatically. Rebuild them for how inquiries actually arrive here: an Arabic form laid out right to left rather than an English one with translated labels bolted on, and phone fields that accept the local mobile formats people actually type.
HubSpot: HubSpot Forms
HubSpot's forms are both more capable and easier to embed than what Salesforce offered, so this is one of the few rebuilds that is a straightforward upgrade. The work is mechanical rather than difficult: re-embed the new form codes across every page that carried the old ones, on both the Arabic and English versions of the site if the two run separately.
Landing Pages
Landing pages hosted on Salesforce or built in Pardot all need to move to HubSpot rather than staying where they are. Rebuild the Arabic pages right to left from the ground up rather than mirroring the English layout with the text flipped, since a mirrored layout is usually the first thing a bilingual visitor notices is wrong.
HubSpot: HubSpot Landing Pages (Marketing Hub)
HubSpot's drag-and-drop builder handles the page rebuild itself well enough. The part that is easy to miss is everything pointing at the old pages: every inbound link and every ad campaign URL, across whichever regional platforms are running those campaigns, needs updating or the traffic those pages were built to catch simply lands on a dead page.
Users And Permissions
Roles, Profiles, and Permission Sets
Roles, profiles and permission sets all stay behind in Salesforce; none of them carry across to HubSpot automatically. In a multi-entity regional group, rebuilding them is a compliance exercise as much as a technical one: whether someone based in a Dubai hub may open a Saudi entity's customer records is a question with a data protection answer, and it needs settling with whoever owns that policy before the permission sets are built.
HubSpot: HubSpot Teams, User Roles, and Permission Sets
HubSpot's permission model is genuinely simpler than Salesforce's, so mapping each Salesforce profile to a HubSpot role is usually possible but not always complete: some of the more granular Salesforce permissions have no equivalent to map to at all. Where that gap shows up, treat it as a chance to tighten access that had quietly grown too broad, rather than a loss to work around.
Record-Level Sharing Rules
Organisation-wide default settings and sharing rules have no direct match on the HubSpot side. The closest available model, teams combined with record access permissions and permission sets, works by owner and team rather than by an org-wide default carrying rule-based exceptions, a different shape of control rather than a smaller version of the same one, and both pieces of it are plan-gated. For a group deciding whether a country hub may see a sister entity's records, that difference in shape is the actual design question, not just a licensing line.
HubSpot: HubSpot record-level permissions
Pull the exact tier requirement for team-based record access from the feature table rather than assuming it is included, since it is plan-gated. Anything more granular than that, sharing scoped tighter than team level, needs custom partitioning built on top, worth pricing before the access model is promised to the business.
Owner Mapping
Record ownership depends entirely on a clean map from Salesforce user IDs to HubSpot user IDs; without it, ownership assignment has nothing to attach to. That mapping is rarely one-to-one across a regional group in practice: the same person can appear under a Dubai entity's domain in one system and a Riyadh or Cairo one in another, with the name spelled two or three different ways between them.
HubSpot: HubSpot Users and Owner properties
Create every HubSpot user before migration begins, then map Salesforce emails to them one by one, confirming with country leads rather than working from the user list alone, since leavers and shared desk accounts are normal in a multi-entity regional team. Deactivated Salesforce users still need a deliberate decision about their owned records rather than being left to fail silently on sync.
Integrations
Third-Party App Integrations
Every app currently plugged into Salesforce, Outlook, Slack, Zoom, the accounting software and whatever else has grown up around it, has to be reconnected to HubSpot rather than simply carrying on. Start the audit with the regional stack specifically, since that is where the gaps tend to show: WhatsApp Business messaging, local telephony, the payment gateway, and the ERP or accounting system finance has no intention of replacing.
HubSpot: HubSpot App Marketplace integrations
Run the audit of connected apps before assuming parity, and check the HubSpot Marketplace against each one individually rather than as a group, because some apps built specifically for Salesforce simply have no HubSpot counterpart. Anything with no marketplace equivalent becomes custom integration work and belongs in the estimate the moment it is found, not once the project is already under way.
Data Warehouse / BI Integrations
Any pipeline currently pulling Salesforce data into a data warehouse for revenue reporting, attribution or forecasting stops working the moment the migration happens; it does not degrade gracefully, it simply breaks. For a group whose board reporting draws on that pipeline, this is worth flagging to whoever owns that reporting well before the cutover date, not discovered when the next board pack fails to build.
HubSpot: HubSpot API or Data Hub data sync + warehouse connectors
Rebuild the ETL pipelines to pull from the HubSpot API instead, and weigh up Data Hub's native data warehouse sync as an alternative to a fully custom rebuild. Where the reporting also has to say which legal entity a figure belongs to, settle that mapping before the pipeline is rebuilt rather than patching it in afterwards.
The Sequence
Sync First, Then Migrate
Order is the content here. These steps form a dependency chain, and running them out of sequence is a documented way this kind of migration fails.
- 1
Audit
document every Salesforce object, field, automation, report and integration, and export the configuration documentation while it is still complete, since the integrations owned by someone outside the project are the ones most likely to be missed once the audit is called finished
- 2
Pre-clean
deduplicate records and standardise picklist values in Salesforce before anything moves, giving bilingual records a pass of their own, since a company entered once under its English trading name and again under a transliterated Arabic one is two records no automatic rule will pair on its own
- 3
Plan
map every Salesforce field to its HubSpot property in a transformation table that also records the picklist value differences between the two systems, and use the same planning pass to design any custom objects in HubSpot rather than leaving their schema for later
- 4
Configure HubSpot
set up the pipelines, custom properties, custom objects, teams and user permissions before a single record is allowed to land, so the destination is ready rather than being built underneath the data as it arrives
- 5
Install the Integration
bring in the HubSpot-Salesforce connector and configure the sync settings, inclusion lists and selective sync so the first run does not attempt to move everything in the org at once
- 6
Initial Sync
run it in order, contacts first, then companies, then deals, then tickets, since out of order the associations between them will not form, and watch the error log throughout rather than checking it once at the end
- 7
Smart Transfer
use it for the one-time transfers the ongoing sync never touches, attachments and segments among them, and treat this step as mandatory rather than optional, since it is the step most often skipped and most expensive to notice missing later
- 8
Rebuild
recreate the workflows, lead scoring, reports, dashboards, email templates and sequences directly in HubSpot, using the rebuild as the moment to write the approval chain your organisation actually runs on into the system rather than reproducing whatever Salesforce happened to automate
- 9
Validate
check record counts, field values, associations and pipeline data, making sure the sample deliberately includes Arabic-script records and multi-part names, since that is where a split name or a mangled character shows up and a Latin-only sample would show nothing at all, then test the automation and the reporting as their own exercises
- 10
Training
train the users on HubSpot properly rather than as a final afternoon before go-live, and keep both systems running in parallel briefly where the timeline allows it, since the connector being genuinely two-way makes that overlap cheap rather than a luxury
- 11
Cutover
disable the Salesforce sync, make HubSpot the system of record, and repoint every remaining integration, choosing the cutover date against the Hijri calendar as well as the Gregorian one so it does not land in the week before Eid
- 12
Post-migration
watch it closely for two to four weeks, fixing data quality issues as they surface and tuning workflows against how the team is actually using them rather than how the plan assumed they would
Typically 4-12 weeks end to end, depending on how much of the source configuration is actually in use.
Effort Estimator
How Big Is This Migration?
A handful of questions, no sign-up required. The ranges come from the research above: every feature we mapped carries an effort figure, and this totals the ones that apply to your instance.
Estimated Effort
Answer a couple of questions and an hours range appears here.
Built from our research on 115 Salesforce features. It is a range, not a quote.
A planning range, not a quote. It is delivery effort only, with no project management line. What moves it most in practice is data quality.
What Goes Wrong Most Often
The failures that show up again and again, in roughly the order they bite.
Products and Line Items Do Not Sync at All
they have to be migrated on a separate track, by CSV or by API, and priced correctly across AED, SAR and USD before quotes go out against them
Salesforce and HubSpot Mean Different Things by Campaign, So Campaign Strategy Needs a Genuine Re-architecture Rather Than a Rename, Especially Where Exhibition and Conference Tracking Depends on Member Status the New Object Does Not Carry
Salesforce and HubSpot mean different things by campaign, so campaign strategy needs a genuine re-architecture rather than a rename, especially where exhibition and conference tracking depends on member status the new object does not carry
A Multi-currency Org Loses Its Exchange Rate Data in the Sync
only the bare number crosses, which turns consolidated reporting across a multi-entity group into a manual reconciliation unless the currency is standardised or the rates applied by hand afterwards
API Call Limits Can Throttle a Large Initial Sync Outright, So Plan for It to Run Across Several Days Rather Than Overnight for Any Org of Real Size, and Confirm the Salesforce Edition's Daily Allowance Before Committing to a Go-live Date
API call limits can throttle a large initial sync outright, so plan for it to run across several days rather than overnight for any org of real size, and confirm the Salesforce edition's daily allowance before committing to a go-live date
Any Email Logged Through Einstein Activity Capture Is Simply Invisible to the Integration, Which Means a Compliance Review Relying on HubSpot Alone Will Not Find That Correspondence There at All
Any email logged through Einstein Activity Capture is simply invisible to the integration, which means a compliance review relying on HubSpot alone will not find that correspondence there at all
A Formula Field Changing Value Does Not Trigger the Sync on Its Own, So a Workaround Field Update Has to Be Built for Every Formula Field the Business Actually Relies On, Not Just the Obvious One
A formula field changing value does not trigger the sync on its own, so a workaround field update has to be built for every formula field the business actually relies on, not just the obvious one
Lookup Fields on Custom Objects Cannot Be Mapped Through the Connector at All, So Relational Data, the Kind That Ties Units to Towers or Licensed Entities to a Group Parent, Needs a text-ID Workaround or a Custom API Approach Instead
Lookup fields on custom objects cannot be mapped through the connector at all, so relational data, the kind that ties units to towers or licensed entities to a group parent, needs a text-ID workaround or a custom API approach instead
Account Hierarchies Do Not Carry Across on Their Own, and for a Holding Company Sitting Above Several Operating Entities, Rebuilding Those Parent-child Links by Hand Is What Keeps a Dozen Accounts Recognisable as One Customer
Account hierarchies do not carry across on their own, and for a holding company sitting above several operating entities, rebuilding those parent-child links by hand is what keeps a dozen accounts recognisable as one customer
Any Marketing Email Engagement Older Than 30 Days When the Contact Syncs Is Gone for Good, and a Decision Cycle Slowed by Ramadan, Eid or the Summer Can Be Enough on Its Own to Push Real Engagement History Past That Window Before the Project Even Reaches This Step
Any marketing email engagement older than 30 days when the contact syncs is gone for good, and a decision cycle slowed by Ramadan, Eid or the summer can be enough on its own to push real engagement history past that window before the project even reaches this step
Trying to Move Everything in a Single Weekend Is One of the Most Common Ways This Fails; a Phased Approach Across a Longer Calendar, One That Accounts for Who Is Actually Available to Validate Each Phase, Holds up Far Better
Trying to move everything in a single weekend is one of the most common ways this fails; a phased approach across a longer calendar, one that accounts for who is actually available to validate each phase, holds up far better
Picklist Values Have to Be Standardised and Matched Exactly Between the Two Systems Before Sync Begins, and Settling Whether Each List Is Kept in Arabic, English or Both Belongs in That Same Pass Rather Than Being Decided Per Record Later
Picklist values have to be standardised and matched exactly between the two systems before sync begins, and settling whether each list is kept in Arabic, English or both belongs in that same pass rather than being decided per record later
Deactivated Salesforce Users Are Not a Detail to Skip
their owned records can simply fail to sync if the ownership question is left unresolved, so decide the reassignment before migration rather than discovering the failure afterwards
Questions
Salesforce To HubSpot, Answered
Yes. Dedicated native connector, two way, covering 11 objects. Smart transfer is supported. What it will not do is rebuild your configuration: that is the 24 items below.
Typically 4-12 weeks. Complexity is driven by automation and reporting depth, not by record count: the connector moves records, so a large database on its own will not extend the timeline.
Of 115 features we mapped, 29 (25%) carry across directly and 82 (71%) map partially, meaning something is lost or reshaped along the way. 4 have no HubSpot equivalent at any tier, worth raising before sign-off rather than after.
24 items have to be rebuilt by hand, and 15 documented limitations are not surfaced by the connector at all. Both lists are on this page, in full, for whoever is scoping the work.
Sync itself needs a paid HubSpot plan, whether Starter, Professional or Enterprise, and on the Salesforce side either Professional edition or any edition that carries API access. Two features raise that floor further: custom object sync needs HubSpot Enterprise, and custom field mappings need Data Hub Starter or above. Check both editions against what you actually run before scoping the work, since the sync itself is worthless without the subscriptions under it.
4: Field Service Lightning, Visual Remote Assistant, Chatter Groups, Partner Relationship Management (PRM). If your team depends on one of these, settle it before you sign rather than discovering it at cutover, when the alternative is a custom build.
No. 12 items on this page are Salesforce's own code and products, which a HubSpot migration does not port and which carry no hours in any estimate you are given. They still need a decision before cutover, because you are the one giving something up.
Only in one direction. The sync is not bidirectional here, so running both systems means choosing a system of record up front and accepting drift in the other.
Ready to Get Started?
Plan Your Migration
Tell us which platform you are leaving, how much of it is custom, and when you need to be live in HubSpot. We will tell you what transfers directly, what needs rebuilding, and how long the move actually takes.