HubSpot–Salesforce Deduplication and Identity Resolution: A RevOps Playbook
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.
Duplicate records corrode revenue operations. They inflate counts, split ownership, and break reporting at the exact moments you need clarity—lead assignment, ABM targeting, and pipeline attribution. In a HubSpot–Salesforce integration, deduplication and identity resolution must be treated as a first-class system, not a cleanup chore. This playbook gives you a practical blueprint for preventing dupes at capture, resolving identity across systems, and instrumenting a governance loop that keeps everything clean as you scale.
Why Identity Resolution Matters Now
Modern GTM stacks capture data from dozens of entry points: forms, chatbots, SDR uploads, enrichment, events, partners, and product telemetry. Without a unifying identity strategy, every new channel increases the chance of duplicate Contacts and Companies and undermines the sync between HubSpot and Salesforce. The costs show up in routing errors, owner conflicts, and bewildering dashboards.
Principles for Durable Deduplication
- Prevent > Sweep: Stop duplicates at capture. Sweeping after the fact is expensive, political, and risky.
- Deterministic First: Use deterministic match keys (email, domain) before probabilistic methods.
- Standardize Inputs: Normalize emails, domains, names, and country values before comparing.
- One Way to Merge: Define a single merge policy with field-level precedence.
- Continuous Monitoring: Track duplicate rates by source and intervene where they start.
Designing Your Match Keys
Contacts
- Primary Key: Email (lowercased and trimmed). For business contexts, require a non-free domain for marketable records.
- Secondary Keys: CRM ID mapping tables, external user IDs, or product account GUIDs.
- Composite Keys: Email + First Name + Last Name for fallback matching; use sparingly to avoid false merges.
Companies/Accounts
- Primary Key: Company domain normalized (strip subdomains, unify TLDs where legal). Maintain a canonical-domain table.
- Secondary Keys: DUNS, external account IDs, enrichment vendor IDs.
- Fuzzy Signals: Legal name similarity with controlled thresholds; use for suggestions, not auto-merges.
Normalization and Standardization
Before you compare, normalize. You will cut duplicate rates in half with a solid standardization policy.
- Emails: Lowercase, trim, remove plus-aliases when policy allows (e.g.,
[email protected] → [email protected]). - Domains: Lowercase, strip
www., collapse multi-tenant subdomains only when safe; maintain exceptions. - Names: Title case; collapse common noise (e.g.,
Inc,LLC) only in fuzzy matching contexts. - Country/State: ISO codes; unify diaspora values (e.g.,
US,USA,United States).
Prevention at the Source
Forms and Inbound
- Real-time email dedupe check in HubSpot before create; block or route to review.
- Validate business domains for B2B forms; handle exceptions for high-value events.
- Enrichment at capture (Clearbit, Apollo) to attach domain and firmographics immediately.
SDR and CSV Imports
- Pre-import dedupe templates: require email and domain; flag likely matches with preview.
- Guardrails: restrict create permissions; use “propose merge” for non-admins.
Product and Events
- Use an identity broker or gateway to map product user IDs to CRM Contacts.
- Only create Contacts from product events once match to domain or invite-owner is confirmed.
Merge Policy and Field Precedence
Merges become political unless you codify a neutral policy. Write it like a contract.
- Ownership: When merging Contacts, preserve Salesforce owner if either record is owned; otherwise apply routing anew.
- Field Precedence: Source-of-truth wins (e.g., marketing attribution from HubSpot; pipeline fields from Salesforce). Then non-null beats null; verified beats unverified; latest-write is a last resort.
- Auditability: Preserve losing values in a merge log or a
prev_values__jsonfield for 90 days.
Bidirectional Sync and Duplicate Loops
Duplicate loops happen when both systems create new records for the same person at nearly the same time. Prevent them by enforcing precedence.
- Write Gates: Only one system may create new Contacts; the other must upsert by external ID.
- Soft Locks: While merges are pending, pause writes from the non-owner system.
- Replay Strategy: Queue writes that failed due to merge and replay after the canonical ID is known.
Company Matching and Account Hierarchies
Account identity gets tricky with subsidiaries and roll-ups.
- Maintain parent-child relationships in Salesforce and mirror read-only into HubSpot.
- Use the canonical domain for the parent; store subsidiary domains and map automatically to the parent when appropriate.
- For ABM, assign at the parent level; allow child exceptions when Sales demands.
Operationalizing Identity in iPaaS or Middleware
Implement your logic in a version-controlled layer.
- Deterministic Upserts: Always try update by external ID first; fall back to search by email/domain.
- Idempotent Flows: Same event should produce the same result—no duplicate creates.
- Transactional Merges: Write in this order: merge → set canonical ID → resync dependent objects → replay failed events.
Monitoring and SLOs
You can’t manage what you can’t see. Instrument identity like a product.
- KPIs: Duplicate rate (Contacts/Companies), time-to-merge, % of merges that required admin help, false-merge rate.
- SLOs: < 2% duplicate creation rate; 95% of dupes merged within 7 days.
- Source Attribution: Break down dupes by channel (forms, SDR imports, events) and fix upstream.
Human-in-the-Loop Review
Some merges deserve human judgment.
- Queue: Route “likely duplicate” sets to a RevOps queue with confidence score and suggested winner.
- Templates: Pre-fill merge previews with field-level differences and recommended precedence.
- Cadence: Daily for frontline ops, weekly for admin-level bulk merges.
Special Cases: Free-Domain Emails and Partners
Free-domain emails (Gmail, Outlook) defeat email-as-key strategies.
- Policy: Allow free domains only when tied to a known account or via explicit SDR validation.
- Matching: Use product invite flows or partner-portal IDs to associate with the correct account.
Handling Historical Debt
Legacy duplicates require a campaign, not a sprint.
- Backfill Normalization: Standardize before you dedupe. You’ll reduce false mismatches.
- Phased Merges: Start with high-confidence (same email), then same domain + name similarity, then manual review.
- Freeze Rules: Temporarily freeze owner field writes during bulk merges to avoid assignment churn.
Communicating the Policy
Publish a brief, visual policy that GTM teams can absorb:
- “No free emails for marketable leads.”
- “All records must have a company domain before routing.”
- “Never create Contacts manually in Salesforce; use the create form in HubSpot with dedupe checks.”
Tooling Checklist
- Native dedupe and merge tools in HubSpot and Salesforce configured with safe defaults.
- iPaaS recipes for deterministic upsert and merge—with tests.
- Dashboards for duplicate rate and merge backlog.
- Runbooks for rollback and false-merge remediation.
Governance Rhythm
- Weekly: Review duplicate creation by source; fix upstream issues first.
- Monthly: Sample-validate merges for accuracy; tune thresholds.
- Quarterly: Revisit match keys and exception lists (partners, strategic accounts).
FAQ
Should email always be the primary Contact match key?
Yes for B2B, with normalization and domain policies. Supplement with CRM IDs and product IDs for resilience.
What’s the safest way to merge at scale?
Phase merges by confidence tiers, snapshot data, freeze sensitive fields, and run post-merge QA on ownership and lifecycle counts before reopening writes.
How do we stop duplicate loops between HubSpot and Salesforce?
Allow only one system to create net-new Contacts; the other must upsert by external ID and pause writes during merge windows.
Can we use fuzzy matching automatically?
Use fuzzy to propose, not to auto-merge. Deterministic keys should handle the majority of cases. Human review catches edge cases and reduces false merges.
What KPIs prove identity health?
Duplicate creation rate, time-to-merge, false-merge rate, and source-level trends. Pair with SLA alerts to catch regressions fast.
More RevOps Playbooks from Bles Software
- Attribution & Pipeline Reporting Setup | Bles Software
- Data Mapping Checklist (Leads/Contacts/Opportunities) | Bles Software
- Field Governance & Picklists | Bles Software
- Sync Rules: Deduping, Owners, Lifecycle | Bles Software
- HubSpot ↔ QuickBooks Integration Playbook | Bles Software
- Errors & Retries: Top Fixes | Bles Software
- HubSpot ↔ Salesforce Integration: Executive Guide | Bles Software
- HubSpot ↔ Salesforce: Cost & Timeline Drivers | Bles Software
- Daily AI Roundup: AI agent, model and enterprise AI news