Duplicate contacts in HubSpot are not just untidy. They split activity history, break sequence enrollment, distort lifecycle reporting, and make a sales rep distrust the records they are supposed to update. A small team can keep duplicates under control with a defined runbook instead of a one-time cleanup. This runbook covers how to find duplicates, how to review them, how to merge safely, and how to stop new ones from appearing.
Decide ownership and merge authority first
Before running any duplicate report, decide who may merge records. Merging is destructive in the sense that one record absorbs another, and it cannot be casually reversed. In most small teams the right split is: a trained operator prepares and reviews candidate pairs, and a manager approves merges that combine two records with real activity history or different owners. Contacts with only a name and an email, and no activity, are low-risk and can follow a faster path.
Write the rule down. For example: merges affecting contacts with open deals, assigned owners, or more than one logged email require manager approval; merges of empty or clearly duplicate records may proceed within the approved batch. Naming the boundary keeps routine work moving while protecting the records that matter.
Find duplicates with HubSpot's tools and your own checks
HubSpot provides a duplicates view that groups likely matches by email or by other identifying properties, and it lets you manage duplicates in bulk. Start there, but do not rely on it alone. Export all contacts with the columns you need to judge a match: email, first and last name, phone, company name associated, job title, create date, last activity date, and owner.
Then run a few mechanical checks outside the duplicate view:
- Group by normalized email. Lowercase everything and strip trailing spaces before comparing.
- Group by phone number after removing spaces, dashes, and country-code formatting differences.
- Look for obvious name collisions at the same company, which often indicate a re-import rather than a real person.
Treat these as candidate lists, not merge instructions. A shared info@ or sales@ address, or two people at the same company with a common name, need human judgment.
The HubSpot knowledge base documents the current duplicates tool and merge behavior; check knowledge.hubspot.com before a large batch because defaults and menus change between releases.
Review each candidate pair against the record of truth
For every candidate, decide which record is primary using a consistent ranking rather than whichever was opened first. A workable order is:
- The record with the most complete and most recently verified properties.
- The record with real activity history and open deals.
- The older record if all else is equal, because it is more likely to be referenced by other objects.
Check the associated company and deals on both records before merging. If one duplicate is linked to an open deal and the other is not, merge into the linked record so the association survives. If both have different open deals, stop and route the pair to a manager; combining them can distort pipeline value.
Record a one-line reason for each merge: exact email match, phone match, re-import with identical identity, or manual confirmation. Reasons make the batch auditable and reveal whether a recurring import is the real source of the problem.
Merge in small, reversible batches
Work in batches the team can review, not one giant merge action. Export the candidate list first so you have a before-state. Then merge a small batch, and immediately confirm that the winning record now shows the expected email, phone, owner, lifecycle stage, and associations. If something looks wrong, stop the batch and investigate before continuing.
Watch for these side effects during a merge:
- Sequence enrollment and workflow membership may need to be re-checked after a merge.
- Form submissions and email subscription types can differ between the two records. Confirm consent state ended up correct.
- Property values that existed only on the losing record should be copied to the primary before merging if they matter.
HubSpot generally keeps the primary record's values for conflicting properties, so copy anything important first. For consent and subscription fields, verify the final state rather than assuming the merge preserved the stricter value.
Prevent the next wave of duplicates
Cleanup without prevention just resets the clock. Reduce new duplicates at the source:
- Make forms and imports match on email, and turn on HubSpot's ability to avoid creating a new contact when a matching email already exists.
- Standardize imports with a template and a validation step so blank rows and formatting variants do not create twins.
- Give one owner to each inbound channel so two people are not entering the same lead by hand.
- Require a search before manual contact creation, and make that a one-line rule in your onboarding.
For teams loading lists from tools like Apollo or a purchased file, run the de-duplication check from that list against HubSpot before import rather than after. It is far cheaper.
Measure whether the runbook is working
Track a few numbers over time: total duplicate candidates open, merges completed, merges rejected as false positives, and new duplicates created per week. If new duplicates keep appearing, the source is an import or a form, not the cleanup process. If rejections are high, the matching rules or the reviewer's criteria need tightening.
Review the runbook monthly and after any change to your forms, imports, or sales process. A short review keeps the rules aligned with how the team actually works. When this work is delegated, the operator owns finding and preparing candidates, documenting reasons, and running approved merges, while the manager keeps the authority for high-risk combinations. To hand this off with a defined boundary, see how we run CRM upkeep, or request a consultation with your current duplicate volume and import sources.
