A lot of HubSpot portals go through the same cycle. Someone notices the duplicates, an admin spends a week in the merge tool, the count drops, and two quarters later it is back where it started. The cleanup was real. The inflow never stopped.
HubSpot’s deduplication is sound for what it checks. Duplicates come in through every door it does not check, and in my experience most portals have more of those doors than anyone has mapped.
Why does HubSpot keep creating duplicate contacts?
Because HubSpot identifies a contact by email address, and people have more than one. A buyer who downloads a guide with a personal address and later books a demo with a work address becomes two contacts. So does anyone who changes jobs. Integrations add more: a sync that creates a contact under a different address, or with none, creates a new record, and API-created companies skip domain checks.
Job changes alone keep the inflow running. ZeroBounce’s 2026 Email List Decay Report, based on more than 11 billion verified emails, found at least 23% of an email list degrades annually, and it names job and role changes among the causes. Every buyer who moves companies and comes back as a prospect arrives with a new address, which HubSpot reads, correctly by its own rules, as a new person.
How HubSpot deduplicates, and where it does not
HubSpot’s automatic deduplication uses one key per object. Contacts match on email address across manual creation, form submissions and imports. Companies match on primary company domain name, except companies created through the API, which includes third-party sync apps. Deals, tickets and custom objects have no automatic key, though imports can match on Record ID and up to ten custom properties can require unique values.
| Object | Automatic match key | Where it does not protect you |
|---|---|---|
| Contacts | Email address | A second address for the same person; aliases and typos; records created without an email |
| Companies | Primary company domain name | Companies created through the API or sync apps; companies with no domain; subsidiaries on other domains |
| Deals, tickets, custom objects | None by default | Imports without a Record ID create new records; unique-value properties are not supported in forms |
Source: HubSpot Knowledge Base, Deduplication of records, accessed October 2026.
HubSpot also uses secondary email addresses. Per the same documentation, a form submitted with a contact’s secondary address overwrites the existing email on that contact. That keeps the record single, and it also means a merge you made months ago can change which address your sequences send to.
The four doors duplicates walk through
In a lot of the portals I’ve worked in, duplicates arrive through four doors: integrations and sync apps that create records without checking HubSpot’s keys, forms that capture a second email address, imports that do not match on email, domain or Record ID, and people creating records by hand or through enrichment tools. Each door needs its own control, which is why a one-time cleanup never holds.
1. Integrations and sync apps
The automated doors leak most. Plauti’s analysis of more than 12 billion Salesforce records in 2021, published in January 2022, found more than 45% of new records entered into CRMs were duplicates, with API integrations from marketing and sales tools and web forms running at an 80% duplicate rate, against 19% for imports. It is Salesforce data from a vendor that sells deduplication, so treat it as directional for HubSpot. The direction is the useful part. If you run Salesforce and HubSpot side by side, read why your Salesforce-HubSpot sync breeds duplicates before you merge anything.
2. Forms
HubSpot forms can be set to always create a new contact for a new email address. That is right for a trade-show kiosk where several people share one device, and wrong for a website where returning buyers type whichever address is handy. Check the setting form by form against how each form is used.
3. Imports
Imports match contacts on email and companies on domain, and they can match any object on Record ID. Per HubSpot, when a Record ID column is included, rows without a Record ID create new records. List purchases, event lists and spreadsheets from a departed rep are the usual sources.
4. Manual entry and enrichment
Reps creating contacts from an email signature, companies typed without a domain, and enrichment tools that write a variant company name all slip past the keys. Enrichment can also write the wrong data with total confidence, as covered in when AI enrichment writes the wrong country.
What does HubSpot’s duplicate management tool do?
On Professional and Enterprise plans, HubSpot’s duplicates tool compares contacts and companies on a fixed set of properties, recalculates as records are created and daily otherwise, and lists pairs to merge or reject. It covers contacts and companies only. Standard accounts see up to 10,000 pairs; Data Hub Professional raises that to 30,000 and Enterprise to 100,000, and adds custom rules and bulk merge.
| Capability | Professional or Enterprise (any hub) | Data Hub Professional | Data Hub Enterprise |
|---|---|---|---|
| Duplicate pairs shown | Up to 10,000 | Up to 30,000 | Up to 100,000 |
| Custom duplicate rules | No | Yes: two rules per object, up to nine properties | Yes: two rules per object, up to nine properties |
| Bulk merge | No | Yes | Yes |
| Objects covered | Contacts, companies | Contacts, companies | Contacts, companies |
Source: HubSpot Knowledge Base, Review and manage duplicate records, accessed October 2026.
By default the tool compares first name, last name, email address, IP country, phone number, zip code and company name for contacts, and company domain name, company name, country/region, phone number and industry for companies. It finds candidates. It does not decide which record should survive.
That decision is permanent. HubSpot states plainly that it is not possible to unmerge records. When contacts merge, the primary record’s values generally win, the other contact’s email is kept as a secondary address, and the lifecycle stage furthest down the funnel is kept. Records that have been part of 250 or more merges in total cannot be merged again.
How do you stop duplicates in HubSpot?
Close each door before you clean. Make every integration match on email for contacts and domain for companies before it creates anything, decide how each form should treat a new address from a known visitor, import with email, domain or Record ID as the match key, and store external system IDs in unique-value properties. Then review new duplicate pairs weekly, so the backlog never rebuilds.
- Duplicate prevention checklist
- Inventory every integration and sync app that can create contacts or companies, and the key each one matches on.
- Turn off create-on-no-match where an integration allows it, or route those creates to a review queue.
- Check each form’s new-email behavior against how that form is used.
- Import only with email, company domain or Record ID as the match key.
- Store external IDs, such as a Salesforce record ID, in properties that require unique values.
- Require a domain on every company your team creates by hand.
- Review the duplicates tool weekly and record each merge decision.
- Count new duplicates monthly, by source, so you know which door is still open.
Clean up in this order
Stop the inflow, write the survivorship rules, then merge in tranches, highest-value records first. Merging before the inflow stops means merging the same people twice. Merging without rules means the primary record’s values win by accident, and because HubSpot merges cannot be undone, accidental choices are permanent. Recheck reporting and routing after every tranche.
- Stop the inflow. Work the checklist above, then measure how many new duplicates still arrive each week.
- Write survivorship rules with the people who own the number: which owner keeps the account, which source value wins, which record is primary. HubSpot will keep the primary record’s values and the furthest-down-funnel lifecycle stage, so choose the primary record on purpose.
- Merge the valuable records first, those tied to open deals and current customers, in small batches. Then the long tail.
- Recheck after every batch: owner assignment, lists, workflows and attribution reports. Merges move records between owners and segments whether you meant them to or not.
Duplicates distort more than the contact count. They split a buyer’s history across records, which breaks attribution and makes two correct reports disagree, as we cover in why HubSpot reports don’t match.
Our free HubSpot audit gives a quick first read of a portal. The AeolusGTM CRM Diagnostic goes further: a read-only scan of HubSpot, Salesforce or Pipedrive that measures duplicates across contacts and companies, including the near-matches a basic dedupe tool walks past, and traces every finding to the records behind it.
You can run the merge tool again next quarter. Or you can find the four doors, close them, and make this the last cleanup you schedule.