Prevent HubSpot duplicates from OutboundSync
When to use this guide: Use this when HubSpot is the source of truth, contacts (and companies) already exist, and you have a low tolerance for duplicate companies or net-new contacts from outbound. Common triggers: multi-domain firm variants (same firm, different email domains) or lists that must never create CRM records from the sequencer.
OutboundSync can look up existing HubSpot contacts and log Instantly (and other SEP) activity on those records. Duplicate risk is usually on the company object — HubSpot company association from OutboundSync keys off the contact’s email domain, not a company name from your sequencer. Firms with several domains can get extra company records when Create or update company is on.
Use as much of the stack below as your risk tolerance requires. Most teams only need step 1 or 2; power users combine all three.
1. Turn off Create or update company
Section titled “1. Turn off Create or update company”On the HubSpot webhook receiver, set Create or update company to Off.
OutboundSync still matches and updates contacts and logs contact-level activity. It will not create or domain-associate companies from the webhook. Prefer this when:
- Companies are already correct in HubSpot and contacts are already associated
- The same firm appears under multiple domains
- Lists are heavy with personal email domains (Gmail and similar)
See Recommended webhook receiver settings and Gmail and personal email addresses.
2. Use Contact handling: Update Only
Section titled “2. Use Contact handling: Update Only”Set Contact handling to Update Only when you do not want OutboundSync to create HubSpot contacts.
OutboundSync searches for a matching contact. If one exists, it updates properties and logs activity. If none matches, it skips create by design — the payload can still appear in OutboundSync without a new HubSpot contact. Details: Data in OutboundSync but not my CRM.
Leave Update Only off for classic cold outbound where unmatched prospects should become HubSpot contacts so activity has a place to land.
3. Match on a unique custom lookup (optional)
Section titled “3. Match on a unique custom lookup (optional)”Default email matching is enough for most accounts. When email is not unique enough — or you want belt-and-suspenders matching — pass a unique key on every SEP event:
- Include a custom field named
os_objectlookup_idwhen you import leads into Instantly, EmailBison, or HeyReach (Clay exports make this easy). - Put the HubSpot contact record ID, or another unique HubSpot property (for example a firm or license ID your team already uses), in that field.
- In the OutboundSync webhook receiver, set Object Lookup Method to Alternative Property, then set Object Lookup Selection to the HubSpot property that holds the same value.
Full steps: Using custom lead/contact object lookup ID. For social platforms (HeyReach / Aimfox), see also Lookup method options for social sync.
Recommended stack for zero net-new creates
Section titled “Recommended stack for zero net-new creates”| Goal | Setting |
|---|---|
| No domain-based company creates / dupes | Create or update company → Off |
| No net-new HubSpot contacts | Contact handling → Update Only |
| Match the exact CRM row you enrolled | Alternative Property + os_objectlookup_id + Object Lookup Selection |
Pre-load contacts (and company associations) in HubSpot before campaigns when you rely on Update Only. Pair with Instantly webhooks → OutboundSync and leave Instantly’s native HubSpot connector off — see the Instantly overview.