Plus Your Business Blog

HubSpot Salesforce Integration Issues and Fixes | PYB

Written by Darian Vretenar | Oct 9, 2026, 3:56:29 AM

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 problem: one contact in HubSpot, many leads in Salesforce

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.

What that looks like in real life

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:

  • Sales gets no new lead. The form submission updates the existing HubSpot contact, which updates the Salesforce record it is already matched to. Nothing new lands in anyone's queue.
  • The old lead gets overwritten. March's disqualified lead now carries September's details. The history of the first enquiry is gone, and your lead reporting undercounts.

Replies on HubSpot's own Community say the same thing: this use case is not a good fit for the connector.

HubSpot's Lead object doesn't close the gap

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.

What is possible: a Salesforce lead for every real enquiry

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:

  • A new Salesforce lead per enquiry. Even when the person already exists in Salesforce as a lead or a contact. Reopening the old lead is an option, but most teams choose a new one.
  • Your mapping, not a fixed one. Values come from the HubSpot lead, its primary contact, the company or the owner, in the order of priority you set.
  • Stage to status mapping. Your HubSpot lead pipeline stages line up with your Salesforce lead statuses.
  • Conversion at qualification. The account is matched or created, the opportunity is created and named by your rules, the owner is assigned, and the rep can get a follow-up task.
  • Both sides stay in step. Salesforce IDs and sync status are written back to HubSpot. A disqualification shows on the HubSpot lead, whichever system it happened in.
  • Disqualified doesn't mean forgotten. Workflows can move the contact into a nurture segment, so they're warm when they come back.

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.

How it works at a high level

Four building blocks do the work.

  1. A HubSpot app with a custom workflow action. It appears in the workflow editor like any native action. You choose which mapping profile it should use, and configuration drives the rest.
  2. A settings screen for admins. This is where the Salesforce connection, stage mapping, field mapping, matching rules, conversion rules and owner mapping live. The dropdowns are filled from your own HubSpot pipelines and Salesforce fields, so a mapping change doesn't need a developer.
  3. A hosted sync service. It receives the action, reads what it needs from HubSpot, and talks to Salesforce through its standard APIs. Conversion uses Salesforce's own lead conversion, so converted records behave as if a rep had done it by hand.
  4. Logging and safety nets. Every run writes a readable log back to HubSpot. A dry-run mode previews what would be sent before anything is written. Salesforce credentials are encrypted at rest, and you decide what happens when a Salesforce duplicate rule gets in the way.

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.

What actually matters

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.

What you need

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

Limits and trade-offs of the extension

  • It is workflow-triggered. It moves leads as they change stage. It is not a bulk import or a historical backfill tool.
  • It is not a full two-way lead sync. Lead data flows from HubSpot to Salesforce. IDs, sync status and disqualification come back.
  • HubSpot gives workflow actions a short time limit. Slow Salesforce calls are finished in the background and reported when they complete.
  • More leads per person changes your reporting. Agree with sales how repeat enquiries are counted before you switch it on.
  • Salesforce rules still apply. Duplicate rules and validation rules are designed around with your Salesforce admin, not switched off.
  • It needs a home and an owner. Your infrastructure or ours.

Common native integration issues we fix

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.

Proof: where this is running

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:

  • 5+ Salesforce and HubSpot integrations delivered and still maintained by our team.
  • Custom syncs for leads, campaigns and custom objects, where the native integration doesn't reach.
  • Salesforce campaigns in HubSpot, two ways. First with custom objects that mirrored Salesforce Campaigns and Campaign Members. More recently mapped onto native HubSpot campaigns, with contacts, leads and deals attached and managed in HubSpot or through a custom UI extension. Both are live with clients.
  • Salesforce to HubSpot migration for teams that decide to leave Salesforce altogether.

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.

When this is and is not the right approach

It is a good fit when:

  • Sales works leads in Salesforce and needs a fresh lead for every real enquiry.
  • Your SDRs use the HubSpot Lead object and sales needs to see that work in Salesforce.
  • Your handover has rules the native settings can't express, such as field priority, account matching, opportunity naming or owner mapping.
  • You want to keep the native integration for everything it already does well.

It is not the right fit when:

  • One record per person works for your sales team. A workflow that raises a task or an alert on the existing record is cheaper.
  • The real problem is configuration. Inclusion lists, mappings and permissions should be fixed in the native integration first.
  • You need a bulk or historical sync. That is a different job.
  • You don't use leads in Salesforce at all and work straight from contacts and opportunities.
  • You plan to leave Salesforce soon. Put the budget into a Salesforce to HubSpot migration instead.

FAQ

Can HubSpot create a new Salesforce lead if the contact already exists?

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.

Does the HubSpot Lead object sync with Salesforce leads?

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.

Which activities sync between HubSpot and Salesforce?

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.

Why is HubSpot creating duplicate leads or contacts in Salesforce?

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.

Can I see Salesforce campaigns and campaign members in HubSpot?

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.

Do we need to replace the native HubSpot Salesforce integration?

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.

What do we need on the HubSpot and Salesforce side?

A HubSpot Professional or Enterprise subscription, Sales Hub Professional or Enterprise for the Lead object, and a Salesforce edition with API access.

Who owns the code?

Your choice. We can build it on your infrastructure with you owning the code, or we can host and support it for you.

Talk to the PYB technical team

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