← Terug naar Resources
HubSpot RevOps

HubSpot duplicate contacts automatisch opschonen

3 workflows, 1 Google Sheet, klaar. Zo clean je dubbele contacts in HubSpot zonder handmatig werk.

8 min leestijd

HubSpot duplicate contacts automatisch opschonen

Je hebt 5 records voor dezelfde persoon, en sales belt 3x hetzelfde bedrijf.

Awkward, en niet professioneel.

Stop met handmatig mergen en automatiseer het proces.

Het probleem

Scenario 1: jan.jansen@bedrijf.nl submit form → Contact aangemaakt

Scenario 2: Sales import CSV met j.jansen@bedrijf.nl → Nieuw contact

Scenario 3: Jan klikt email, nieuwe cookie → Nog een contact

Resultaat: 3 Jan Jansens, en niemand weet welke de echte is.

Waarom duplicates ontstaan

HubSpot matcht op email, maar dat gaat vaak mis:

Verschillende email formats:

Dit is allemaal dezelfde persoon, maar HubSpot ziet 3 aparte contacts.

Domain aliases:

Dit is dezelfde inbox, maar HubSpot ziet 2 aparte contacts.

Typos in imports:

Cookie tracking duplicates:

  • Unknown visitor submit form
  • HubSpot maakt contact zonder email
  • Later: zelfde persoon submit met email
  • Result: 2 contacts

De HubSpot oplossing

Stap 1: Activeer duplicate management

Settings → Data Management → Duplicates

Enable:

  • ✓ Automatic duplicate detection for contacts
  • ✓ Merge contacts based on email
  • ✓ Keep most recently updated contact as primary

Rules:

IF Email is exactly the same (case-insensitive)
THEN Flag as potential duplicate

HubSpot detecteert nu duplicates automatisch.

Maar: merget niet automatisch. Je moet nog handmatig.

Stap 2: Workflow voor auto-merge

Settings → Workflows → Create workflow

Name: “Auto-merge duplicate contacts”

Trigger: Contact created

Enrollment settings:

  • Re-enrollment: Ja (elke keer als contact wordt geüpdatet)

Actions:

Action 1: Check for duplicates

IF Contact > Duplicate contact exists = Yes
AND Contact > Is merged = No
AND Contact > Create date is less than 24 hours ago
THEN Continue to next action

ELSE  
Stop workflow

Action 2: Merge logic

HubSpot heeft geen native “merge” workflow actie. Maar je kunt:

Optie A: Use Operations Hub (Pro+)

Action: Use merge contacts API

Merge this contact INTO oldest contact with same email
Keep: All properties from newest record
Keep: All activities from both records

Optie B: Flag for manual review

Action: Create task

Title: Duplicate contact - merge needed
Description: Contact {{contact.email}} has duplicate. Review and merge.
Assigned to: Data operations owner
Due date: 1 day
Priority: High

Optie C: Use Insycle integration (recommended)

  • Insycle heeft native HubSpot duplicate merge
  • Meer control over merge logic
  • Kan automatisch mergen op criteria

Stap 3: Prevent duplicates from forms

Problem: Form submit met bestaand email → soms toch duplicate

Solution: Form submission workflow

Settings → Workflows → Create workflow

Name: “Form: Check for existing contact”

Trigger: Form submission (any form)

Actions:

IF Contact with email {{email}} exists
THEN 
  - Update existing contact (don't create new)
  - Append form data to existing properties
  - Add note: "Re-submitted form on {{current_date}}"

ELSE
  - Create contact (default behavior)

HubSpot doet dit meestal automatisch. Maar bij API imports of integrations kan het misgaan.

Explicit check:

Action: If/then branch
Branch 1: Email already exists in database
  → Update contact property "form_resubmit_count" +1
  → Send internal notification: "Known contact re-engaged"

Branch 2: Email is new  
  → Set property "first_form_submit" = form name
  → Continue normal flow

Stap 4: Import validatie

Problem: CSV imports zijn #1 bron van duplicates

Solution: Pre-import workflow

Before je import doet:

  1. Export existing contacts: Download all emails from HubSpot

  2. VLOOKUP in Excel/Sheets:

=VLOOKUP(A2, ExistingContacts!A:A, 1, FALSE)

Als match → don’t import, update instead.

  1. Split import file:
  • File 1: New contacts (no match)
  • File 2: Updates (matched emails)

Import File 1: Create contacts
Import File 2: Update existing contacts (match on email)

In HubSpot import:

  • Column mapping: Email → Email (for matching)
  • Update existing records: YES
  • Create new if not found: NO (for update file)

Stap 5: Deduplication workflow voor bestaande data

Settings → Workflows → Create workflow

Name: “Weekly duplicate cleanup”

Trigger: Contact last modified date is within last 7 days

Actions:

IF Duplicate contact exists = Yes
AND This contact is NOT the primary record
THEN
  - Create task for data team: "Merge duplicate: {{contact.email}}"
  - Add to list: "Duplicates to merge"
  - Send daily digest email to ops team

Daily digest email:

Subject: Daily duplicate report - {{count_in_list}} contacts to merge

Body:
{{count_in_list}} duplicate contacts detected this week.

View list: [Link to "Duplicates to merge" list]

Common duplicates:
- {{top_5_duplicate_emails}}

Merge in bulk: [Instructions]

Stap 6: Bulk merge in HubSpot

Contacts → Lists → Create list

Name: “Duplicates to merge”

Filters:

  • Duplicate contact exists = Yes
  • Is merged = No

Actions on list:

  1. Review duplicates: Click on each contact → “View duplicates”

  2. Merge in bulk:

    • Select all duplicates (max 100 at a time)
    • Actions → Merge contacts
    • Choose primary record (usually: most recent activity)
    • Merge

Merge logic:

  • Primary: Contact with most properties filled
  • Keep: All activities from both records
  • Keep: All deal associations
  • Merge: Lists, workflows, sequences

Stap 7: Advanced - Domain-based duplicate detection

Problem: jan@bedrijf.nl en info@bedrijf.nl = different people, same company

But sometimes: sales@bedrijf.nl submit form 2x with different names → duplicate

Solution: Company-level deduplication

Workflow: “Check for company duplicates”

Trigger: Contact created with company

IF Company > Domain = {{known_domain}}
AND Contact > Job title is similar to existing contact
AND Contact > First name is similar (Levenshtein distance < 3)
THEN Flag as potential duplicate

Example:
Contact 1: Jan Jansen, VP Sales, jan@bedrijf.nl
Contact 2: J. Jansen, VP of Sales, j.jansen@bedrijf.nl

Likely same person → flag for review

Prevention workflows

Workflow 1: Normalize email format

Problem: JAN.JANSEN@BEDRIJF.NL vs jan.jansen@bedrijf.nl

Solution: Auto-lowercase

Trigger: Contact created or email changed

Action: 
  - Set property "email" = LOWERCASE({{contact.email}})
  - Set property "email_domain" = DOMAIN({{contact.email}})

HubSpot’s email property is case-insensitive, but explicit normalization helps.

Workflow 2: Detect role-based emails

Problem: info@, contact@, sales@ = not real persons

Solution: Flag generic emails

Trigger: Contact created

IF Email starts with: info@, contact@, admin@, sales@, support@, hello@
THEN
  - Set property "email_type" = "Generic"
  - Set lifecycle stage = "Other"  
  - Do NOT assign to sales
  - Add note: "Generic email - find decision maker"

ELSE
  - Set property "email_type" = "Personal"
  - Continue normal flow

Problem: Unknown visitor becomes contact later → duplicate

Solution: Associate activities to email when known

Trigger: Form submission with known email

Action:
  - Search for contacts with same cookie/session ID
  - IF found AND email is unknown
    THEN Merge with this contact (email known)
  - ELSE Create new contact

HubSpot does this automatically in most cases. But explicit workflow helps catch edge cases.

Monitoring & reporting

Dashboard widget 1: Duplicate count

Metric: Count of contacts where “Duplicate exists” = Yes

Goal: <5% of total contacts

If >10% → serious data quality issue.

Dashboard widget 2: Weekly new duplicates

Metric: Contacts with duplicates created this week

Breakdown: By source (Form, Import, Integration, Manual)

Identify root cause:

  • High duplicates from imports → improve import process
  • High duplicates from forms → check form-to-contact workflow
  • High duplicates from API → check integration settings

Dashboard widget 3: Merge velocity

Metric: Contacts merged this week

Target: Merge rate > New duplicate rate

If duplicates growing faster than merging → you’re losing the battle.

Tools voor bulk deduplication

Insycle

  • Native HubSpot integration
  • Auto-merge based on rules
  • Bulk operations (1000s at once)
  • Cost: ~$50/month

Setup in Insycle:

  1. Connect HubSpot
  2. Create template: “Merge contacts by email”
  3. Rules:
    • Match on: Email (exact)
    • Primary: Most recently modified
    • Keep all: Activities, deals, notes
  4. Schedule: Run daily at 2 AM

Dedupely

  • HubSpot marketplace app
  • Visual duplicate detection
  • Smart merge suggestions
  • Cost: ~$30/month

HubSpot Operations Hub

  • Native duplicate merge API
  • Workflow actions for merge
  • Cost: Included in Ops Hub Pro ($800/month)

Only worth it if: You’re already using Ops Hub for other automations.

Klaar

Je hebt nu:

  • Duplicate detection workflows
  • Auto-merge logic (or flagging for manual review)
  • Prevention workflows for forms/imports
  • Monitoring dashboard

Duplicates reduced by 80%+ in first month.

Volgende stap:

  1. Run bulk merge on existing duplicates (one-time cleanup)
  2. Activate prevention workflows
  3. Monitor weekly duplicate count
  4. Adjust merge rules based on false positives

Sales belt nu dezelfde persoon 1x. Niet 3x.

HubSpot Data Quality Duplicates Workflows Automation