HubSpot does not deduplicate contacts across every field, so imports, forms, and integrations keep recreating the same person as a new record.
You open your contacts list and see three records for the same person: one from a form fill, one from a spreadsheet import, one pushed in by another system. This is not random. HubSpot's automatic matching only checks a narrow set of fields, and any process that skips them creates a new record instead of updating the one you already have.
This is not a HubSpot defect either. The platform is open by design: any tool with API access, any import file, any form submission can create a contact. HubSpot only catches an overlap when the matching fields line up exactly. When they do not, you get a duplicate, and duplicates compound. A duplicate record skews your lifecycle stage counts, breaks workflow enrollment, and sends the same person two different emails from two different owners.
This article covers why duplicates form, what HubSpot's built-in deduplication tools actually catch, where those tools stop working, and what fixes the cause instead of the symptom.
TL;DR
- HubSpot deduplicates contacts automatically by email address and companies by primary domain. Everything else needs manual review or custom matching logic.
- The Manage Duplicates tool compares First Name, Last Name, Email, IP country, Phone number, Zip Code, and Company Name once a day and surfaces likely matches for a human to confirm.
- Basic duplicate management requires Professional or Enterprise on Marketing Hub, Sales Hub, Service Hub, Data Hub, or Smart CRM, capped around 10,000 pairs. Data Hub Professional or Enterprise raises that ceiling and adds bulk actions.
- Deals, tickets, products, and custom objects have no automatic deduplication at all. You deduplicate them manually with Record IDs or up to ten custom unique properties.
- Most recurring duplicate problems trace back to one integration or import job that creates a record instead of checking for one first.
- Merging is a cleanup task. Preventing new duplicates is an integration design task. They need different fixes.
Table of contents
- Why duplicates form in the first place
- What HubSpot's built-in deduplication actually does
- Where the built-in tools fall short
- Fixing duplicates that already exist
- Preventing new duplicates at the integration layer
- When to bring in custom integration work
- FAQ
Why duplicates form in the first place
Every contact in HubSpot arrives through one of a few doors: a form submission, a manual entry, a CSV import, or an API call from a connected system. Each door has its own idea of what identifies a person.
A form submission usually carries an email address, so HubSpot's automatic matching catches it. An import file might key on a customer ID from your billing system instead, a field HubSpot has never seen before, so it creates a fresh contact rather than updating the existing one. A sync from your support desk or your ERP often has the same problem: no shared identifier, so no match, so a new record every time that person's data crosses over.
This is exactly the failure mode behind one recent integration project: four separate source systems feeding one HubSpot portal, over 2 million records total, and no shared identifier connecting any of them. Names were spelled three different ways across the four systems. Phone numbers carried different formatting. Without a resolution layer built before the data touched HubSpot, that project would have produced hundreds of thousands of duplicate contacts on day one.
What HubSpot's built-in deduplication actually does
HubSpot runs two layers of protection, and it helps to know exactly where each one stops.
The first layer is automatic and silent. Contacts deduplicate by email address: if a new contact shares an email with an existing one, HubSpot merges or blocks the duplicate on the spot. Companies deduplicate the same way using primary domain name. This layer covers a lot of your inbound traffic without you doing anything.
The second layer is the Manage Duplicates tool, and it works differently. Once a day, HubSpot compares contact records across First Name, Last Name, Email address, IP country, Phone number, Zip Code, and Company Name, and surfaces pairs that look like the same person even though they did not match exactly. You review the list, filter by owner or create date, and merge or reject each pair, individually or in bulk. HubSpot documents the tool and its matching fields here.
Access to that review queue needs Data Quality Tools permission plus edit rights on the record type, or Super Admin status. And the feature itself sits behind a subscription line: Professional or Enterprise on Marketing Hub, Sales Hub, Service Hub, Data Hub, or Smart CRM unlocks basic duplicate management, capped around 10,000 pairs. Data Hub Professional or Enterprise removes that low ceiling and adds bulk operations.
Where the built-in tools fall short
The gaps matter more than the feature list.
No automatic matching beyond email and domain. A contact with a different email but the same phone number and name will sit in the review queue, not get merged automatically. You have to catch it.
Deals, tickets, products, and custom objects get nothing automatic. HubSpot's own documentation on deduplication across object types is direct about this: only contacts and companies deduplicate on their own. Everything else relies on Record ID matching during import or on up to ten custom properties you mark as unique.
Nothing prevents a duplicate before it is created. The Manage Duplicates tool is a review-and-merge system. It runs after the record already exists. If your integration creates 500 duplicate contacts overnight, HubSpot will show you the mess the next day, not stop it from happening.
Merges are permanent. HubSpot states plainly that merged records cannot be unmerged. A wrong merge does not have an undo button.
Fixing duplicates that already exist
Start with the Manage Duplicates review queue under Contacts, then Actions, then Manage Duplicates. Filter by owner, create date, or lifecycle stage to work through the backlog in manageable batches instead of one long unsorted list.
Review before you merge, not after. Since merges cannot be reversed, check that the two records are genuinely the same person, especially when the match is based on name and location rather than email. Bulk-merging without review is how you accidentally combine two different people who happen to share a common name.
If your review queue is thousands of pairs deep, custom matching rules help. HubSpot lets you define your own criteria beyond the default fields, which narrows false positives when your contact base has a lot of shared surnames or generic company names.
For deals, tickets, and custom objects, deduplication is manual. Export the records, match on Record ID or a unique property you control, and merge through the standard record-merge flow rather than expecting an automated tool to find them for you.
Preventing new duplicates at the integration layer
Cleanup only buys you time if the source of new duplicates is still running. The fix belongs in the integration itself, not in another round of merging.
The core pattern is simple to describe and easy to get wrong in practice: before your integration creates a contact, it should search for an existing one first, using an identifier both systems agree on, and update that record instead of creating a new one. This is often called an upsert, and it is the single biggest lever against recurring duplicates.
The catch is that "an identifier both systems agree on" often does not exist yet. This is exactly what happened on the four-system integration mentioned earlier: no shared identifier across any of the source systems. The fix was a resolution layer built ahead of the HubSpot sync, matching records on a combination of fields rather than a single clean key, normalizing formatting differences before anything touched HubSpot's API. That project processes records from source to HubSpot in under 50 seconds and went from kickoff to production in under four weeks, on top of over 2 million records with no shared identifiers to start from. See the full case study.
Custom unique properties help too. HubSpot allows up to ten properties per object marked as required-unique, which is enough to encode an external system ID as a real deduplication key instead of relying on name matching. Pair that with the Associations API when custom objects are involved, so related records link correctly the first time instead of creating orphaned duplicates that need reassociation later.
When to bring in custom integration work
If your duplicates come from one messy import, the built-in tools and a careful afternoon in the review queue will handle it. If duplicates keep reappearing week after week, the cause is structural: an integration creating instead of matching, multiple source systems with no shared key, or record volume past what the review queue can realistically handle by hand.
That is a different project than deduplication. It means designing a matching and sync layer before data reaches HubSpot, which is integration architecture work, not CRM housekeeping. Pricing for that kind of engagement starts from $4,999 and scales with the number of source systems and the state of the existing data, backed by a 14-day money-back guarantee and a one-year bug warranty. If you want a sense of what your specific setup would cost, the HubSpot integration cost calculator gives a scoped estimate in a few minutes. For the full service scope, see HubSpot integrations.
Certifications from HubSpot Academy, including Data Integrations Certified and Platform Consulting Certified, back this kind of work, but the proof that matters is the production result: a working sync with no duplicate storm on launch day.
FAQ
Does HubSpot merge duplicate contacts automatically?
Only when email addresses match exactly, for contacts, or when domain names match, for companies. Every other potential match surfaces in the Manage Duplicates review queue and waits for a person to confirm the merge.
Can I undo a contact merge in HubSpot?
No. HubSpot states that merged records cannot be unmerged, so review a potential match carefully, especially when it is based on name and location fields rather than an exact email match, before you confirm it.
What HubSpot plan do I need to manage duplicates at scale?
Basic duplicate management ships with Professional or Enterprise on Marketing Hub, Sales Hub, Service Hub, Data Hub, or Smart CRM, capped around 10,000 pairs. Data Hub Professional or Enterprise lifts that cap to 30,000 or 100,000 pairs and adds bulk merge actions.
Why do my integrations keep creating duplicate contacts instead of updating existing ones?
Most of the time the integration is searching on a field HubSpot does not use for automatic matching, such as an internal customer ID, or the source system has no field in common with HubSpot at all. The fix is an upsert pattern: search before create, using an identifier both systems can agree on.
Do deals and tickets deduplicate automatically like contacts do?
No. HubSpot's documentation is explicit that only contacts and companies get automatic deduplication. Deals, tickets, products, and custom objects rely on Record ID matching or custom unique properties you set up yourself.
Next steps
Run the Manage Duplicates review this week if you have not looked at it recently. It takes under an hour for most portals and clears the backlog HubSpot has already found for you. If duplicates keep coming back after that, the problem is upstream in an integration, and cleanup alone will not fix it.
For a scoped estimate on fixing the integration itself, try the HubSpot integration cost calculator or review the HubSpot integrations service page. Related reading: A Data Quality Playbook for HubSpot, HubSpot Data Migration Checklist, Multi-System HubSpot Sync Architecture, and Common HubSpot Integration Mistakes.
