Most HubSpot Salesforce integration issues can be fixed without replacing the native integration. The one it can't handle on its own is creating a fresh Salesforce lead when a contact you already know comes back after you've already run contact-to-contact sync. We've built a HubSpot workflow extension that does exactly that, and one of our larger US clients runs its lead handover on it.
If you're here for a different problem, such as duplicates, records that silently don't sync, or activities landing in the wrong place, skip to "What actually matters". We've dealt with those too.
The native integration is good at keeping one HubSpot record in step with one Salesforce record. Here is what it covers today.
| HubSpot | Salesforce | What to know |
|---|---|---|
| Contacts | Leads or contacts | You choose one default for new records. Matching is by email address |
| Companies | Accounts | Turn off automatic company creation in HubSpot if you sync to leads, or conversions create duplicates |
| Deals | Opportunities | Sync direction is set per property |
| Tickets | Cases | Switched on per object in the integration settings |
| Custom objects | Custom objects and supported standard objects | The object must exist in HubSpot first. One object can't sync to both Salesforce contacts and leads |
| Activities, timeline sync | Tasks | One-way, HubSpot to Salesforce. Form submissions, marketing and sales email events, meetings, calls, notes, sales content views, tasks, and events from installed integrations |
| Activities, activity sync | Tasks, emails, calls, meetings | Two-way. Tasks, sales emails, calls and meetings, with deduplication, conflict rules and filters |
That covers a lot. Where it stops is anything that needs more than one Salesforce record per person.
HubSpot keeps one contact per email address. Salesforce will happily hold several leads for the same person. The native integration bridges the two by tying each HubSpot contact to a single Salesforce lead or contact.
Picture Anna, operations director at a mid-sized logistics firm. She fills in your contact form in March. An SDR works the lead, the timing is wrong, and it gets disqualified. In September her situation has changed, and she fills in the form again.
With the native integration, two things go wrong:
Replies on HubSpot's own Community say the same thing: this use case is not a good fit for the connector.
HubSpot has its own Lead object, which lets SDRs work a new lead every time a contact re-engages. It is a good fit for this problem inside HubSpot.
The catch: the native integration doesn't sync the HubSpot Lead object with Salesforce leads. Salesforce leads still map to HubSpot contacts. Your SDRs can work three leads for Anna in HubSpot, and Salesforce never hears about any of them.
This mostly hits teams where marketing and SDRs live in HubSpot, sales lives in Salesforce, and the handover happens at qualification.
We built a HubSpot workflow extension: a custom workflow action you drop into any lead workflow. When a HubSpot lead reaches the stage you choose, it creates or updates the matching Salesforce lead using your own mapping. When the lead is qualified, it converts it into a contact, account and opportunity in Salesforce.
What it does:
It runs alongside the native integration, not instead of it. Native sync is set to contact to contact and keeps handling contacts, accounts, opportunities and activities. The extension owns leads and the handover to sales.
There are two ways to have it. We can tailor it and host it on your infrastructure, and you own the code. Or we host and support it for you. It is one example of the custom HubSpot integrations our technical team builds.
Four building blocks do the work.
The important design choice is where the flexibility lives. Workflow actions in HubSpot have a fixed set of inputs, so the mapping sits in the app's settings, not in the workflow. That is what lets one action serve many pipelines, teams and Salesforce setups.
This is the part most guides skip: what you need, what the extension won't do, and the native issues we get called in to fix.
| Requirement | Why |
|---|---|
| A HubSpot Professional or Enterprise subscription | The native Salesforce integration and workflows both need it |
| Sales Hub Professional or Enterprise | Needed for the HubSpot Lead object |
| A Salesforce edition with API access | The extension connects through a connected app that your Salesforce admin sets up |
| Marketing Hub Professional or Enterprise | Only if HubSpot campaigns are part of the scope |
| Issue | Why it happens | What we do |
|---|---|---|
| Duplicate leads or contacts in Salesforce | HubSpot matches on email only, while Salesforce allows several records per email. An integration user with limited visibility makes it worse | Agree the lead and contact model, align Salesforce duplicate rules, fix integration user access, then merge in a way that keeps the sync intact |
| Duplicate companies after a lead is converted | Salesforce leads have no account, so HubSpot creates a company, then conversion brings in a second one | Turn off automatic company creation where leads are used and let Salesforce own account assignment |
| Companies or deals silently not syncing | Inclusion rules, required Salesforce fields or lost permissions can block a record without a clear error | Audit inclusion rules, required fields and permissions, and add monitoring so failures are seen |
| Activities in the wrong place | Tasks logged under the integration user, association settings per activity type, or an inactive owner blocking the sync | Set associations per activity type, map owners, and choose deliberately between timeline sync and activity sync |
| Salesforce duplicate rules blocking records | Salesforce rejects the record and HubSpot can only tell you that it failed | Adjust the rule with your Salesforce admin, or handle the case in custom logic |
| Picklist and field type mismatches | Values or field types differ between the two systems | Mapping audit, aligned picklists, and checks that flag new mismatches |
| API call limits | High-volume activity syncs add up. Every repeat open or click on a marketing email can become its own Salesforce task | Cut what syncs to what sales uses, and move heavy jobs to scheduled custom syncs |
| Leads stuck when the sync is interrupted | The native sync pauses and qualified leads stop reaching sales | A fallback route so qualified leads still get through, then a reconciliation once the sync is back |
Three activity sync details catch people out. Marketing email events only sync if they happened within 30 days of the contact first syncing. Form submissions go back one year. Emails captured by Salesforce's Einstein Activity Capture don't sync to HubSpot at all.
We also do custom data clean-up across both systems. One recent example: repairing company names after an enrichment tool overwrote them on existing records.
One of our larger US clients runs its lead handover on this. Marketing and SDRs work in HubSpot. Sales works in Salesforce.
SDRs work each enquiry as a HubSpot lead. Every stage change updates the matching Salesforce lead. When a lead is qualified, it is converted, and sales gets the contact, account and opportunity with the right owner and a follow-up task.
The result is a clean handover between SDRs and sales. Nobody re-keys a lead, and a returning prospect shows up as a new lead instead of disappearing into an old record.
It sits on top of wider Salesforce work:
PYB is a HubSpot Elite Partner, certified to ISO 27001, ISO 9001 and ISO 42001, and holds HubSpot accreditations. For another example of a custom build, see how we approached migrating a Confluence knowledge base into HubSpot.
It is a good fit when:
It is not the right fit when:
Not with the native integration. It ties each HubSpot contact to one Salesforce lead or contact by email, so a repeat form submission updates the existing record. A custom workflow action can create a new Salesforce lead for each enquiry, which is what our extension does.
Not natively. The integration maps Salesforce leads and contacts to HubSpot contacts, and the HubSpot Lead object is not part of the sync. Connecting the two needs a custom integration.
There are two options. Timeline sync is one-way and sends HubSpot events to Salesforce as tasks, including form submissions, email events, meetings, calls, notes and tasks. Activity sync is two-way and covers tasks, sales emails, calls and meetings.
Usually because HubSpot matches on email only, while Salesforce allows several records with the same email. Integration user permissions and Salesforce duplicate rules also play a part. It is fixable, but the fix sits in both systems.
Natively, a HubSpot workflow can add a synced lead or contact to a Salesforce campaign. For a fuller picture of Salesforce Campaigns and Campaign Members inside HubSpot, we have built custom syncs, first with custom objects and more recently with native HubSpot campaigns.
No. The extension runs alongside it. The native integration keeps syncing contacts, accounts, opportunities and activities, and the extension handles leads and the handover to sales.
A HubSpot Professional or Enterprise subscription, Sales Hub Professional or Enterprise for the Lead object, and a Salesforce edition with API access.
Your choice. We can build it on your infrastructure with you owning the code, or we can host and support it for you.
If the native integration isn't doing what your sales process needs, tell us what is going wrong. We'll tell you whether it is a settings fix, a custom build, or not worth doing. You'll speak to the people who build and maintain these integrations.
Talk to our technical team. Click here