RevOps Playbook: Bi‑Directional Sync for Contacts, Companies, Deals, and Opportunities (HubSpot ↔ Salesforce)

Published by Bles Software, a custom software and AI company based in Yehud-Monoson, Israel, building web apps, AI agents and API integrations for clients in Israel, the US, the UK and the EU.

Bi‑directional sync promises a living, breathing customer record across HubSpot and Salesforce. In practice, it can devolve into dueling updates, lost context, and finger‑pointing. This playbook shows how to design a conflict‑proof, auditable sync strategy for people, company, and revenue objects so marketing automation and CRM stay in lockstep without trampling each other’s truth.

The recommendations assume the official HubSpot–Salesforce integration is installed and that your Salesforce org uses standard Sales Cloud objects. You can layer additional tools (iPaaS, warehouse syncs, enrichment) as long as you define clear ownership and conflict policies. The goal: make each update predictable, traceable, and reversible.

Why Bi‑Directional Isn’t “Both Ways Everywhere”

Bi‑directional sync is not a checkbox; it’s a collection of field‑level contracts. Treat each mapped property as a mini‑API: who is allowed to write, when, under what freshness window, and what should happen if both systems change a value at the same time. Without this discipline, minor automation changes produce invisible data races.

The Sync Anatomy: CRUD + Relations

Any sync must handle four classes of change and two classes of relationships:

  1. Create: new records originating in HubSpot (form fills, imports, enrichment) and in Salesforce (manual entry, lead capture tools, conversion).
  2. Read: mirrored visibility so users can see authoritative fields regardless of system of origin.
  3. Update: routine edits from users and automations, enrichment updates, and status changes.
  4. Delete/Merge: hard deletes (rare), soft deletes/archiving, and merges (frequent for people and company objects).
  5. One‑to‑one: Contacts ↔ Leads/Contacts; Companies ↔ Accounts.
  6. One‑to‑many: Deals ↔ Opportunities and Contact Roles; Campaigns ↔ Campaign Members.

Each category must have an explicit owner and a fallback behavior so you can debug without guessing.

Directionality by Object

Use these default stances and override intentionally:

Conflict Resolution and Freshness Windows

Define a small number of freshness windows and apply them consistently. A practical pattern:

  1. Ownership window (Salesforce‑owned fields): 2 hours. If both systems write within two hours, Salesforce wins; otherwise latest timestamp wins.
  2. Marketing window (HubSpot‑owned fields): 2 hours. If both change, HubSpot wins inside the window; otherwise latest timestamp wins.
  3. Commercial window (revenue fields): Salesforce always wins unless HubSpot is explicitly configured as a proposal system; otherwise block HubSpot writes.

Log conflicts in a “sync journal” property set so admins can inspect what happened and when.

Identity and External IDs

Establish durable cross‑references:

Create Policies

Inbound from HubSpot:

Outbound from Salesforce:

Update Policies

Guard your most contentious fields:

Merge and Delete Policies

Merges happen frequently and must be safe:

Activity and Campaign Data

Avoid activity drift by defining clear patterns:

  1. Marketing emails, forms, and web sessions live in HubSpot; mirror summary KPIs to Salesforce on Contact and Campaign Member records.
  2. Sales tasks, calls, and meetings live in Salesforce; display read‑only counts or last activity dates in HubSpot for segmentation.
  3. Campaigns originate in Salesforce (for durable reporting). When HubSpot runs a program, it either creates the campaign in Salesforce first or references an existing one via external ID.

Error Handling and Observability

Instrument your sync like a product:

Security, Privacy, and Consent

Data privacy requirements often force directionality:

Rollout Phases

Roll out in four stages and only promote after you hit quality gates:

  1. Prototype: map 20–50 records in a sandbox or pilot segment; validate create/update/merge flows.
  2. Partial Production: enable for one region or segment; monitor exceptions daily; tune conflict rules.
  3. Full Production: enable org‑wide with dashboards and alerts; run a weeklong “hypercare.”
  4. Maintenance: monthly governance, quarterly conflict policy review, semiannual dedupe cleanup.

Metrics That Matter

Use a short list of metrics to verify bi‑directional sync is healthy:

Anti‑Patterns to Avoid

Beware of these failure modes:

FAQ

Should we sync Salesforce Activities into HubSpot?

Syncing every activity clutters HubSpot without adding segmentation value. Mirror only lightweight rollups (last activity date, count of calls/meetings) or programmatically relevant events. Keep the detailed log in Salesforce where reps live.

What’s the best way to handle SDR dispositions?

Let Salesforce own dispositions as part of Lead Status. Mirror a summarized field into HubSpot for lists and scoring, but do not let HubSpot overwrite sales dispositions. If marketing needs granular context, add a read‑only “last disposition details” field in HubSpot.

Can we make campaign membership bi‑directional?

Yes, with discipline. Create campaigns in Salesforce and let HubSpot add members via external ID; Salesforce remains the ledger for statuses and influenced revenue. Avoid letting HubSpot create duplicate campaigns with similar names.

How do we debug who overwrote a field?

Maintain Last_Written_By_System and Last_Written_Timestamp per mapped field (or per field group). On conflict, log both contenders’ values and timestamps to a small “journal” object or property set so admins can review.

Should we sync every new Salesforce field into HubSpot?

No. Sync fields that influence segmentation, lead scoring, routing, or cross‑system reporting. Everything else adds noise and expands your attack surface.

More RevOps Playbooks from Bles Software