HubSpot Salesforce Integration: Setup, Sync Rules, and Common Pitfalls
Direct Answer: HubSpot Salesforce Integration at a Glance
The native HubSpot-Salesforce connector is a bidirectional data sync running every 10–15 minutes, mapping contacts, companies, deals, and activities between both systems using configurable field-level rules. HubSpot functions as the marketing database; Salesforce is the sales system of record. Not all records sync automatically — an Inclusion List controls which HubSpot contacts enter Salesforce. Best suited for B2B companies with 50–500 employees and separate marketing and sales teams.
How Does HubSpot Salesforce Integration Work?
The native HubSpot-Salesforce connector is a bidirectional data sync that runs every 10–15 minutes. It maps contacts, companies, deals/opportunities, and activities between the two systems using configurable field-level rules. HubSpot acts as the marketing database; Salesforce acts as the sales system of record. Data flows both ways, but you control direction and conflict resolution per field. Not all records sync automatically — you gate what enters Salesforce using an Inclusion List.
This is the answer most articles bury three scrolls deep. The rest of this piece explains what that actually means in practice and where it breaks.
Who This Integration Is For
Before diving into mechanics, understand the use case. This integration is built for mid-market B2B companies where:
- Marketing lives in HubSpot (campaigns, lead nurture, forms, email)
- Sales lives in Salesforce (pipeline, forecasting, account management)
- Both teams need visibility into what the other is doing without switching tools
If your whole team is in one platform, you do not need this. If you are a 5-person startup running everything in HubSpot, stay there. The HubSpot-Salesforce integration becomes valuable when you have a real separation between marketing operations and a sales org that is entrenched in Salesforce and not moving.
The typical profile: 50–500 employees, $5M–$100M ARR, dedicated marketing team running demand gen in HubSpot, sales team of 10+ reps working leads and accounts in Salesforce.
What the Native Connector Actually Does
HubSpot’s native Salesforce connector is a packaged integration — no code, no middleware required. You install it from HubSpot’s App Marketplace, authenticate against your Salesforce org, and configure sync settings through a UI.
What syncs by default:
| HubSpot Object | Salesforce Object |
|---|---|
| Contact | Contact or Lead |
| Company | Account |
| Deal | Opportunity |
| Activity (call, email, meeting) | Task |
What does not sync by default: custom objects, custom activities, attachments, HubSpot lists, workflow enrollment history.
The connector handles object creation in both directions. A new lead created in Salesforce can auto-create a contact in HubSpot. A contact who fills out a HubSpot form can auto-create a lead in Salesforce. Whether this happens depends on your configuration — it is not on by default for every scenario.
Sync frequency is every 10–15 minutes. There is no real-time sync in the native connector. If a sales rep closes a deal in Salesforce and you want that to immediately update a HubSpot workflow trigger, you are waiting up to 15 minutes. For most use cases this is fine. For real-time personalization or time-sensitive automations, this lag matters.
Prerequisites and Cost
HubSpot requirement: Marketing Hub Professional or Enterprise (or any Professional/Enterprise suite). The Salesforce integration is not available on Starter or Free tiers.
Marketing Hub Professional starts at $800/month (up to 2,000 marketing contacts). At 10,000 contacts, expect $1,300–$1,500/month before any add-ons.
Salesforce requirement: Enterprise, Unlimited, or Professional edition with API access enabled. The Salesforce Group Edition does not support API access and cannot connect.
One important detail: the integration consumes Salesforce API calls. High-volume syncs on large contact databases can push against your Salesforce API limits. If you are on Salesforce Professional with capped API access, monitor this from day one.
Setup Process: The Key Steps
The full installation is documented in HubSpot’s knowledge base. The process that matters from a configuration standpoint breaks down into these decisions:
1. Install and Authenticate
Install the HubSpot for Salesforce package from the Salesforce AppExchange or from HubSpot’s Connected Apps settings. You authenticate with a dedicated Salesforce integration user — not your personal admin account. This is not optional best practice; it is essential for audit trails and for controlling which records the integration can see.
2. Choose Sync Direction for Contacts/Leads
HubSpot contacts can sync to Salesforce as Leads, Contacts, or both. You choose. Most teams sync to Leads first (pre-qualify in Salesforce), then Contacts once converted. This means you need to decide how HubSpot handles Salesforce Leads vs. Contacts — they are separate objects in Salesforce, same object in HubSpot.
3. Configure the Inclusion List
This is the single most important configuration decision (more on this below).
4. Map Fields
Go through each object and map HubSpot properties to Salesforce fields. Set sync direction and conflict resolution rules per field.
5. Enable Activity Sync
Separately toggle which activity types sync: sales emails sent, marketing email opens/clicks, calls, meetings, form submissions.
6. Test on a Small Segment
Before enabling full sync, run a test with a filtered list of 50–100 contacts. Check for duplicate creation, field overwrites, and missing data.
The Inclusion List: What It Is and Why It Matters
The Inclusion List is an active HubSpot list. Only contacts who are members of that list are eligible to sync into Salesforce. If a contact is not on the list, HubSpot will not push them to Salesforce regardless of anything else.
This is intentional design, not a limitation. You do not want every HubSpot contact — including newsletter subscribers, event attendees, and cold outreach targets — flooding Salesforce. Your sales reps want qualified leads in Salesforce, not 80,000 random contacts.
Common Inclusion List criteria:
- Lead score above a threshold (e.g., MQL score ≥ 50)
- Completed a demo request or contact form
- Attended a webinar and clicked a follow-up email
- Matches ICP criteria (company size, industry, title)
The mistake most teams make: they set the Inclusion List too broadly at launch (“all contacts with an email address”) and create a data mess in Salesforce that takes months to clean up.
Selective sync from Salesforce to HubSpot works differently: instead of a list, you control access at the integration user level. If the Salesforce integration user has read/write permission to a record, it syncs. If not, it does not.
Sync Direction and Conflict Resolution
Each field mapping has three configuration options:
| Setting | Behavior |
|---|---|
| Two-way | Both systems can write; conflict resolution rule determines winner |
| HubSpot → Salesforce | Only HubSpot writes this field to Salesforce |
| Salesforce → HubSpot | Only Salesforce writes this field to HubSpot |
For conflict resolution on two-way fields, you choose which system wins when both have a value and they disagree. Options are typically: always use HubSpot, always use Salesforce, or use most recent update.
The practical default for most teams: Salesforce wins on deal/pipeline fields. HubSpot wins on marketing fields (lead source, UTM data, lifecycle stage, email engagement). Two-way on basic contact data (name, email, phone) with most-recent-update resolution.
Do not set everything to two-way without thinking through conflict scenarios. A Salesforce rep manually correcting a phone number in Salesforce should not be overwritten 15 minutes later because HubSpot thinks its value is newer.
Field Mapping: Contacts, Companies, and Deals
Contacts
Default mappings cover the basics: first name, last name, email, phone, company name, job title. These are reliable.
The fields that cause problems:
- Lead Status / Lifecycle Stage: HubSpot has Lifecycle Stage (Subscriber → Lead → MQL → SQL → Opportunity → Customer). Salesforce has Lead Status and Contact record types. These do not map 1:1. You need to decide how to translate between them and which system is the authoritative source for sales stage.
- Lead Source: Salesforce’s Lead Source is a picklist with fixed values. HubSpot’s Original Source is a system property with its own taxonomy. Forcing a sync between these without normalization creates garbage data.
- Owner: HubSpot Contact Owner maps to Salesforce Lead/Contact Owner. If you sync ownership, make sure user names match between systems. Mismatched email addresses on user accounts cause assignment failures.
Companies / Accounts
HubSpot Company ↔ Salesforce Account. The structural difference: in Salesforce, Contacts belong to Accounts. In HubSpot, Contacts are associated with Companies but can exist independently.
If you have a Contact in HubSpot that has no associated Company, and the integration tries to sync it to Salesforce where an Account is required, the sync either fails or creates an Account with minimal data. Audit your HubSpot contact database for company association gaps before enabling company sync.
The setting “Create and associate companies” in HubSpot is on by default. This creates HubSpot companies from Salesforce account data. If your Salesforce has duplicate accounts (which most do), you will get duplicate companies in HubSpot.
Deals / Opportunities
HubSpot Deal ↔ Salesforce Opportunity. Deal stage mapping is manual — you map each HubSpot deal stage to a Salesforce opportunity stage. This mapping only matters if you are syncing deals bidirectionally.
Most teams run opportunities natively in Salesforce and sync them to HubSpot read-only, so marketing can see which leads converted to opportunities. Letting HubSpot create/edit Salesforce opportunities is less common and requires more governance.
Activity Sync
Activities are the most underestimated part of the integration. Configured correctly, they give your sales reps HubSpot marketing data directly in Salesforce — and give your marketers Salesforce sales call data in HubSpot.
What can sync as Salesforce Tasks:
- HubSpot sales emails sent/opened/clicked
- Marketing email sends, opens, clicks (one task per contact per email)
- Calls logged in HubSpot (CRM calls, call recording)
- Meetings booked through HubSpot Meetings
- Form submissions
The problem with activity sync at scale: if you have active email marketing with tens of thousands of contacts, enabling full marketing email activity sync creates a storm of Salesforce Tasks. Reps complain about noise. DBA teams complain about storage. The fix is to be selective: sync only sales activities and high-value marketing events (demo requests, pricing page views, high-score form submissions) rather than every email open.
Meetings sync is particularly useful — reps see HubSpot-booked meetings directly in the Salesforce activity timeline without switching tools.
Common Pitfalls
1. Duplicate Records
The most common problem. Causes:
- The same person exists as both a Lead and a Contact in Salesforce; HubSpot creates a second contact on sync
- “Create and associate companies” is on; Salesforce Account duplicates propagate to HubSpot
- The integration creates a new record when it cannot find an exact email match
Fix: Run a deduplication pass in both systems before enabling the integration. Use email address as the primary match key. Enable the duplicate management rules in Salesforce before turning on sync.
2. Sync Loops
A sync loop happens when HubSpot updates a field → triggers a workflow → updates the field again → syncs back to Salesforce → syncs back to HubSpot → repeat.
Classic scenario: a HubSpot workflow updates Lifecycle Stage when a deal is created → that update syncs to Salesforce → a Salesforce flow updates a field → that syncs back to HubSpot → triggers the workflow again.
Fix: Add a timestamp or “updated by” property check to your workflows so they only fire when a human (not the integration) makes the change. Use the sync trigger logs in HubSpot to identify loops early.
3. Field Type Mismatches
Salesforce picklist fields will reject values that are not in the picklist. If HubSpot sends a free-text value to a Salesforce picklist, the sync fails silently or throws an error that only shows up in the sync health log.
Fix: Before mapping, document every Salesforce picklist and its allowed values. Build corresponding dropdown properties in HubSpot with matching values.
4. API Limit Exhaustion
The integration uses Salesforce API calls. A large contact database with frequent updates can hit daily API limits, causing sync to pause. This is especially common when you first enable the integration and it tries to do an initial bulk sync of your entire database.
Fix: Stage the initial sync. Enable it in batches using the Inclusion List rather than syncing everything at once. Monitor API usage in HubSpot’s Salesforce integration settings under Sync Health.
5. The Integration User Trap
If you authenticate using a named user’s account rather than a dedicated integration user, two problems occur: (1) when that person leaves, the integration breaks; (2) every synced record shows that person as the “modified by” user in Salesforce, breaking audit trails and triggering that user’s Salesforce automation rules.
Fix: Create a dedicated Salesforce system user with a generic email (e.g., hubspot-integration@yourcompany.com). Assign it the minimum required permissions for the objects it touches.
Native Connector vs. Third-Party Tools
The native connector handles the standard use case well. Here is when to consider alternatives:
| Scenario | Recommendation |
|---|---|
| Basic contact/lead/deal sync, standard fields | Native connector |
| Need real-time sync (under 1 minute) | Stacksync, Breadcrumb, or custom middleware |
| Complex multi-step workflows involving 3+ systems | Workato or Zapier (paid plans) |
| Need to transform/normalize data before sync | Workato, Make (formerly Integromat) |
| Custom objects in both systems | Native connector (now supports custom object sync at Enterprise) or Workato |
| High data volume with strict API limits | Dedicated iPaaS with batching control |
| Simple trigger-based automation without coding | Zapier |
One honest note: HubSpot and Salesforce are direct competitors. Neither company has a commercial incentive to make the native integration exceptional. The connector is functional but not the focus of either product team’s roadmap. For mission-critical data operations, validate the native connector against your specific workflows before committing to it as your only integration layer.
FAQ
Do I need Salesforce API access to use the HubSpot integration?
Yes. The integration requires Salesforce editions that include API access: Enterprise, Unlimited, or Professional with API access enabled. Salesforce Group Edition and Essentials Edition do not support API access and cannot connect to HubSpot natively.
Does the HubSpot Salesforce integration sync in real time?
No. The native connector syncs every 10–15 minutes. If you need changes reflected in under a minute — for example, triggering a time-sensitive automation based on a Salesforce field update — you need a real-time middleware solution like Stacksync or a custom webhook setup.
What happens to existing records when I first enable the integration?
The initial sync attempts to match existing records between systems using email address as the primary key. Records that match are linked; records without a match either get created in the other system or are left unlinked depending on your configuration. Run a deduplication pass in both systems before enabling to avoid a flood of duplicates.
Can I sync HubSpot lists to Salesforce?
Not directly. HubSpot lists do not have a Salesforce equivalent object. The closest approach is to use a HubSpot list as your Inclusion List (which controls sync eligibility) or to create a custom Salesforce campaign and use a workflow to add/remove Salesforce campaign members based on HubSpot list membership.
Can HubSpot sync custom objects with Salesforce?
Yes, but only on HubSpot Enterprise tier. Custom object sync requires both HubSpot and Salesforce to have the custom objects defined, and you configure the field mappings manually. This feature was expanded in recent connector updates but still has limitations around relationship/association sync between custom and standard objects.
Who should own the HubSpot-Salesforce integration: marketing ops or sales ops?
Neither alone. The integration sits at the boundary between the two systems, and unilateral ownership by either side leads to configuration decisions that optimize for one team at the expense of the other. The practical answer is a shared RevOps function, or a dedicated admin with explicit input from both marketing and sales leadership on sync rules and data governance policies.
How do I troubleshoot sync errors?
In HubSpot: go to Settings → Integrations → Connected Apps → Salesforce → Sync Health tab. This shows the number of errors, their types, and which records are affected. Common error categories are field validation failures (value rejected by Salesforce picklist), permission errors (integration user lacks access to a field or object), and duplicate match conflicts. For persistent errors, filter by error type and address the root field mapping or permission issue rather than retrying individual records.
The Bottom Line
The native HubSpot-Salesforce connector is the right starting point for most mid-market B2B teams. It handles the core use case — moving qualified leads from HubSpot into Salesforce and surfacing sales data back in HubSpot — without requiring custom development. The setup is not trivial: field mapping, Inclusion List logic, and duplicate prevention require deliberate planning. Get those three right and the integration runs reliably. Skip them and you spend weeks cleaning up data.
The native connector has a ceiling. If your data model is complex, your volume is high, or you need real-time sync, evaluate iPaaS options before committing to native. The connector being “free” (included with your HubSpot Professional subscription) is not a reason to force it into a use case it was not designed for.
Ready to scale your business?
Stop guessing. Start growing. Let's build a data-driven acquisition system for your product.
Let's talk