Portmux is a HubSpot to Salesforce migration service for teams growing into the Salesforce platform. We move Contacts, Companies, Deals, custom properties, and lifecycle stage history with the Lead-vs-Contact split and Account hierarchy that Salesforce expects.
HubSpot uses one Contact object with lifecycle stages. Salesforce splits that into Leads (pre-qualification) and Contacts (post-qualification with an Account). The migration's hardest decision is which HubSpot Contacts become Leads and which become Contacts, and that decision comes from your lifecycle stage and qualification rules, not from a default mapping. We get that right in week one and the rest is mechanical.
HubSpot Contacts split into Salesforce Leads and Contacts based on your lifecycle stage and qualification rules.
HubSpot Companies migrated to Salesforce Accounts with parent/child relationships and primary Contact assigned.
Deals mapped to Opportunities with stage history, close dates, amounts, and Deal-Contact associations as OpportunityContactRoles.
HubSpot custom properties on Contacts/Companies/Deals migrated as Salesforce custom fields with the same picklist values and required flags.
HubSpot lifecycle stage history exported and stored in a Salesforce custom field with the original stage timeline preserved.
Notes, Calls, Emails, Meetings, and Tasks from the HubSpot timeline migrated to Salesforce Activities with original timestamps and owners.
HubSpot Lists imported as Salesforce Campaigns with Campaign Members linked to the appropriate Lead or Contact records.
HubSpot file attachments transferred to Salesforce ContentDocuments with associations to the parent Contact/Company/Deal.
Active HubSpot Workflows analyzed and re-implemented as Salesforce Flow Builder flows where the logic is portable.
HubSpot Email Templates ported to Salesforce Email Templates; Sequences re-implemented in Salesforce Engage or High-Velocity Sales Cadences.
HubSpot Users matched to Salesforce Users by email; record ownership preserved or reassigned per your rules.
Form submission data archived in a custom Salesforce object so the original capture context (page, source, UTM) is queryable.
We connect to HubSpot via a Private App with read scopes for CRM, Marketing, and Files. The HubSpot CRM API is paginated and rate-limited per token, we run a parallel-friendly extraction that respects daily limits. Within 48 hours you see a complete record count by object type and custom property inventory.
The biggest mapping decision is Contact-to-Lead-or-Contact. We define the rule (e.g. lifecycle stage = Lead/MQL/SQL → Salesforce Lead; SQL+/Customer → Salesforce Contact with Account). We also map HubSpot Lists to Campaigns and decide which custom properties become standard Salesforce fields versus custom fields.
Salesforce Sandbox loads first for UAT. Your team validates Lead/Contact split, Account hierarchies, and Opportunity history against HubSpot. On cutover day, HubSpot is set to read-only (or downgraded to Marketing-only), Salesforce becomes authoritative, and we run a final delta of post-cutover HubSpot activity.
Every migration has its own gotchas. Here's what we plan for on this specific path.
Every HubSpot Contact has to land somewhere in Salesforce. The rule isn't intuitive: a HubSpot Contact with a Company and a closed-won Deal is clearly a Salesforce Contact + Account. A Contact with no Company and no Deal might be a Lead. We define the rule in week one based on your lifecycle stage and dedup keys.
HubSpot supports multiple Deal pipelines per portal. Salesforce uses one set of Opportunity stages with Record Types per business line. We map each HubSpot pipeline to a Salesforce Record Type and translate stages, accounting for stage probability and ForecastCategory.
Custom Objects in HubSpot (Enterprise tier) need to become Salesforce custom objects with relationships. We recreate each object schema in Salesforce, then load the records with parent associations. HubSpot allows more flexible association schemas than Salesforce, so we lock down the cardinality during mapping.
HubSpot Marketing data (email opens, page views, form fills) often isn't valuable in Salesforce. We let your team decide what migrates to Salesforce vs what stays in HubSpot Marketing (kept as a marketing-only license) vs what gets archived.
Single-system migrations like HubSpot to Salesforce run as Track A engagements: one source, one destination, up to 1M records, 4–6 weeks. Final price depends on object volume, custom field count, and integrations, scoped on a 20-minute call before any commitment. See full pricing →
Tell us what's in the source, where it's going, SaaS or custom, and when you need to be live. You'll walk away with a scoped quote, a named engineer, and a go-live date.