RevOps HQ
← BACK TO BLOG
9/27/2026•
HubSpot•Integrations

HubSpot Salesforce Integration: Object Mapping, Sync Design Patterns and Antipatterns

HubSpot Salesforce integration explained: how the objects map, why the Lead object causes most of the trouble, and what to decide before installing it.

P

Paul Maxwell, PhD

AUTHOR

GET WEEKLY REVOPS INSIGHTS

No spam. Unsubscribe anytime.

A marketing team installs the connector on a Thursday, and by the following week the sales team is looking at duplicate records, a lead status that means something different depending on which screen it is read from, and a sync error queue nobody owns. Nothing was configured incorrectly in the sense of a wrong checkbox. The two systems model the early part of the funnel differently, the integration faithfully reproduced that difference on both sides, and the disagreement that existed conceptually before the install became a disagreement in data afterwards.

This article explains what the integration does and what has to be decided before it is switched on. It begins with what the connector actually is, then sets out how the objects map between the two platforms, which is the foundation for everything after it. It then addresses the Lead object, since Salesforce has one and HubSpot does not, and that single asymmetry accounts for a large share of the trouble people attribute to the integration generally. Sync direction and field ownership follow, then selective sync and the question of what should deliberately not cross, then campaign and attribution handling. From there it covers what commonly goes wrong and why, the strategic question of running both platforms permanently against migrating off one, the decisions worth making before installing, and the checks worth running afterwards.

The position throughout is that this integration is unusually well built and that most of its reported failures are not integration failures. They are two organisations' definitions meeting for the first time, in public.

The Connector and Its Two Properties

HubSpot ships a supported, bidirectional integration with Salesforce, installed from the HubSpot side against a Salesforce account with API access. HubSpot's own installation documentation covers the mechanics, and the integration settings are where nearly every decision described in this article is actually expressed.

Two properties of it matter more than any feature. It is object-level and field-level configurable, so what syncs and in which direction is a decision rather than a default. It is also continuous rather than a one-time load, so every disagreement between the two systems is re-asserted on a schedule rather than resolved once.

That second property is the one that surprises people. An integration which runs once can be corrected afterwards by hand. An integration which runs continuously will undo a manual correction, repeatedly, until the rule that produced it is changed.

The Object Map

Four mappings carry most of the volume, and only one of them is genuinely clean.

Company to Account. The cleanest of the four. Both platforms model an organisation the same way, and the usual complication is which system holds the canonical name and domain rather than anything structural.

Contact to Contact. Structurally clean, complicated by identity. Both platforms key on email address in practice, so a person with two addresses is two records in both systems, and the integration will helpfully keep all of them in step.

Deal to Opportunity. Clean in shape, difficult in stages. Both are a pursuit with an amount and a close date, but pipeline stages are defined independently on each side, and two teams that have never had to agree on what "qualified" means are now required to.

Contact to Lead. Not clean at all, and the subject of the next section.

Activities, tasks and notes sync with varying fidelity depending on configuration, and the practical advice is to decide deliberately which system is the place a salesperson logs a call rather than syncing both directions and reading a doubled timeline.

The Lead Problem

Salesforce has a Lead object. HubSpot does not, and this asymmetry is the root of the confusion attributed to the integration.

In Salesforce, a Lead is a distinct object representing an unqualified person, which is later converted into three separate records — a Contact, an Account and optionally an Opportunity. Lead conversion is a one-way transition with its own history, and before conversion a Lead is not a Contact in any sense the platform recognises.

In HubSpot, the same person is a Contact from the first form submission onwards, with a lifecycle stage property describing how far along they are. There is no conversion event and no separate object: the record persists and a property changes.

The consequence is that the two platforms disagree about when a person begins to exist as a customer record, and the integration has to resolve that disagreement somehow. The resolution is a configuration decision rather than a technical one, and it has three common shapes.

Sync HubSpot contacts to Salesforce Leads, converting them in Salesforce when sales accepts them. This suits businesses where Salesforce governs the sales process and marketing hands over at a defined point.

Sync to Salesforce Contacts directly, bypassing Leads entirely. This suits businesses that have stopped using the Lead object meaningfully, which is more of them than admit it.

Sync selectively, sending only records that have reached a defined lifecycle stage. This is usually the right answer and is discussed below.

The decision must be made before installation, because changing it afterwards means reconciling records created under the previous rule.

Sync Direction and Field Ownership

The integration allows each field to sync in one direction or both. The configuration that causes least trouble gives every field exactly one owner.

Bidirectional sync on a field means the most recent write wins, which suits a field only one team ever touches and destroys a field both do. Lifecycle stage and lead status get set to bidirectional by people reasoning that both teams care about them, and caring about a field is not the same as owning it.

The rule worth applying is that a field is owned by the system whose users are accountable for its accuracy. Marketing owns the source and the lifecycle stage; sales owns the pipeline stage and the close date; finance owns the amount once a quote exists. Write the ownership down before configuring anything, because the configuration screen will not prompt for it and the default will be whatever was clicked.

Selective Sync and What Should Not Cross

The instinct on installation is to sync everything, on the reasoning that more data in both places is better. It is not.

Every record synced to Salesforce consumes storage, and it appears in the working views of people who did not ask for it. A sales team given every form submission — every whitepaper download, every webinar registrant, every newsletter signup — will stop trusting the view rather than filter it, and the integration will be blamed for the noise.

Syncing on a condition rather than syncing everything is therefore the default worth starting from. Records cross when they reach a stage that means a human should look at them, and everything before that stays in HubSpot where nurture happens. This is also the cheapest protection against the duplicate problems attributed to the connector, since fewer records crossing means fewer opportunities for two systems to disagree about identity.

Campaigns and Attribution

Salesforce Campaigns and HubSpot campaigns are both real and are not the same object, which produces attribution disagreements that look like integration faults.

The practical guidance is to pick one system as the place attribution is reported and accept the other's figure as indicative. Two systems applying different attribution models to overlapping data produce two defensible numbers, and the time spent reconciling them is not repaid. Where the disagreement itself is the problem, it is worth reading how each attribution model assigns credit before attempting to make two systems agree.

Antipatterns and Their Causes

Duplicates. Almost always an identity problem rather than a sync problem: the same person with two email addresses, or a company with two domains, existed as two records before the integration and now exists as four. Deduplicate before installing, not after.

Sync errors nobody owns. The error queue is real, informative and ignored, because it appears in an administrative screen neither team opens. Somebody must own it with a stated cadence, or errors accumulate until the two systems have quietly diverged.

Required fields on one side only. A validation rule in Salesforce that HubSpot does not know about will reject records silently from HubSpot's perspective. This is the single most common cause of "the integration stopped working".

Picklist mismatches. A value that exists in one system and not the other fails to write, and the failure is per-record rather than global, so it presents as intermittent.

Workflow loops. An automation in HubSpot writes a field, the sync carries it to Salesforce, a Salesforce workflow writes it back, and the two automations continue indefinitely. Rare, expensive, and prevented by field ownership.

Stage definitions that were never agreed. Not an integration defect at all, but it surfaces when the integration makes both definitions visible in one place for the first time.

Resolving these at a manufacturer running both platforms permanently is covered in this integration case study, including the object ownership decisions and the reporting both teams eventually accepted.

Running Both, or Migrating

The integration exists to support two permanent states, and choosing between them deliberately matters more than any configuration detail.

Running both permanently is the right answer where each platform is genuinely better at its half: Salesforce holding a complex sales process with territory and permission requirements, HubSpot holding marketing and the funnel above it. The cost is a permanent reconciliation surface and two administrative skill sets.

Migrating to one is the right answer where the second platform is being paid for out of habit or because a reporting requirement was never rebuilt. The comparison worth reading before deciding is HubSpot against Salesforce on the dimensions that actually differ, which is built to return a result against HubSpot where the weighting warrants it.

The decision should be made explicitly rather than arrived at, because an integration installed as a temporary measure during an unfinished migration becomes permanent by default and is then maintained by nobody.

Decisions Before Installing

Six, in this order, all cheaper to make now than to unwind later.

  1. Deduplicate both systems. The integration will faithfully reproduce every duplicate you already have.
  2. Decide the Lead treatment. Leads, Contacts directly, or selective by lifecycle stage.
  3. Write down field ownership. One owner per field, stated before the configuration screen is opened.
  4. Agree the stage definitions. Both pipelines, in the same room, before either is mapped.
  5. Decide what does not cross. The default should be a condition rather than everything.
  6. Name the owner of the error queue, with a cadence.

Verification After Installing

Five checks in the first fortnight, before volume makes them harder.

  1. Record counts on both sides against what the sync condition predicts, which catches a mis-set condition immediately.
  2. The error queue, read rather than glanced at, with each distinct error class traced to its cause.
  3. A round trip. Create a record in HubSpot, watch it arrive, modify it in Salesforce, watch the change return or correctly not return according to the ownership rules.
  4. Duplicate rate compared against the pre-install baseline, which requires having taken that baseline.
  5. A field-level spot check on the fields set bidirectional, confirming that the last write actually wins in the direction intended.

Boundaries of This Article

This describes the supported HubSpot connector rather than third-party middleware or a custom build against the CRM APIs. Those are legitimate where the supported integration genuinely cannot express a requirement, and they carry a maintenance obligation the supported connector does not.

Feature details on both platforms change, and subscription tier governs what a given account can reach. The structural points here are stable; the specific screens are a question for the current documentation.

Nothing here covers migrating historical data between the platforms, which is a separate exercise with its own sequencing.

In Summary

The HubSpot Salesforce integration is bidirectional, configurable at field level, and continuous, which means every disagreement between the two systems is re-asserted on a schedule rather than settled once.

Most reported failures are not failures of the connector. They are duplicates that existed beforehand, validation rules on one side the other cannot see, picklist values that do not match, and pipeline stages two teams had never been required to define the same way. The one genuinely structural asymmetry is the Lead object, which exists in Salesforce and not in HubSpot, and deciding how to treat it is the first decision rather than a detail of configuration.

The change worth making before installation rather than after: deduplicate both systems, and write down which system owns each field. Neither requires the integration to be running, and both become considerably more expensive once it is.

HubSpot services

Onboarding, implementation, integration, migration, administration and training, each scoped and priced before the work begins

WEEKLY PROGRAM

RevOps Office Hours

A recurring weekly RevOps operating program. Live support plus hands-on HubSpot implementation work.

$1,500/mo
Monthly Operating Program
  • →1 live Office Hours session per week
  • →4 hours of hands-on implementation work per month
  • →Hours allocated against priorities agreed at the start of each period
  • →Recurring monthly cadence