So we have been migrating to Hubspot for the past few months and I did a data export and came to notice there are many duplicate contacts.
Our clients often have 2-3 emails and this seems to cause the problem, even when both emails are in the email fields. I have not had a chance to exhaustively test when and how this happens.
I see the automated merging thing. “Data Hub Pro” but this is not something that should be needed and I’m not even sure how well it works. I want the marketing data to stay intact and this process doesn’t seem to be flexible enough from what I’d like.
Does Hubspot just look for the main Email field in the Contacts table from incoming emails and if the contact doesn’t exist, it creates a new Contact with the primary Email field the one off the email? Even if that same email is in auxillary fields on other existing Contacts?
HubSpot de-dupes contacts by email address, but it only “sees” emails that live in the built-in Email property (including its Additional email addresses list).
So:
If an incoming email matches the contact’s primary email, HubSpot finds that contact.
If it matches an additional email address on that same Email property, HubSpot should also find that contact.
If that email is sitting in a custom field like “Email 2 / Email 3” (or anywhere outside the built-in Email property), HubSpot won’t match on it — and you’ll end up with duplicates.
The duplicates you’re seeing almost always mean those secondary emails weren’t actually stored as “additional email addresses” on one record during migration/integration.
One other consideration, if someone fills out a form with a different email, HubSpot can swap what it considers the “primary” email for that contact, which can make things look inconsistent. It doesn’t sound like this is an issue right now, but once you get these cleaned up, be aware of this for the future.
Josh covered the key point about the built-in Email property. One extra tip from dealing with this during our own migration: before importing, we ran a script to consolidate all secondary emails into the “Additional email addresses” format that HubSpot expects. Saved us a ton of duplicate cleanup later.
Also worth checking out the free duplicate management tool under Contacts > Actions > Manage duplicates. It won’t catch everything but it flags the obvious matches and lets you merge without needing Operations Hub. Running it weekly for the first month or two after migration helps a lot.
The duplicates almost always come from the migration step — if secondary emails weren’t mapped into HubSpot’s “Additional email addresses” field (like Josh described), each email creates a separate contact.
For the cleanup side: before you try the automated merge in HubSpot, it’s worth exporting your contacts to CSV first and deduplicating there. You can match on name + any email column to find the duplicates, then decide which record to keep and which fields to merge. Doing it in the spreadsheet gives you full control over what stays vs. what gets overwritten — which sounds like what you want given your concern about marketing data staying intact.
Going forward, make sure any integration that creates contacts maps all email addresses into the built-in Email property’s “additional emails” rather than custom fields. That’s the root cause.
Good breakdown from Josh — worth adding one more layer if you’re still finding stragglers after fixing the email-property issue: HubSpot’s dedupe (and the fix above) both work by matching on email, so a contact with two genuinely different emails that were never linked (a work address and a personal one, say) still won’t get flagged, even once everything’s stored correctly. I built DataClean specifically for that case — it adds fuzzy name matching, phonetic matching, and domain matching as a separate detection path that doesn’t rely on email at all, so it catches same-person duplicates that email-based matching structurally can’t see. Free up to 1,000 contacts if useful: trydataclean. (Disclosure: I’m the builder.)
this can happen when the incoming email matches an address that HubSpot doesn’t recognize as the contact’s primary email. Having the same address in another email property doesn’t necessarily prevent a new contact from being created.
Before relying on automatic merging, I’d first identify the exact duplicate pattern and decide which record should be the source of truth for marketing activity.
For cleanup, you could also look at tools such as Insycle, RingLead, or LeadAngel, depending on how much control you need over matching, deduplication, and preserving existing data. I’d test the rules on a small batch first before doing a bulk merge.