Skip to content
DataUntangler

HubSpot deduplication that shows every duplicate contact before it merges

HubSpot deduplication means finding the records in your portal that describe the same person or company and merging them into one. HubSpot does part of that job natively, on Professional and Enterprise, through Actions and then Manage Duplicates. It matches on properties it already trusts. Everything that got in through a spreadsheet import, a trade show list or a form filled in with a personal address is still sitting there, and this page is about that half.

In-browser your file never leaves your computer

Every row proposed to you before it is applied

CSV log of what you approved and rejected

Clean a file
01 Try it on this page

Load a messy sample and watch it work

The same engine described below, running on your own machine. Nothing is uploaded and nothing is applied until you approve it.

1. Load a file

Your file is read on your own machine. Nothing is uploaded, so nothing can leak.

Or start from a messy sample

Status

Loading the sample file.

File: CRM contact export

Rows

--

Columns

--

Changes

--

Duplicate rows

--

Date formats

--

Blank or invalid emails

--

Load a file to see the diff

Drop a CSV or pick one of the messy samples. Every proposed change appears here as a line you approve or reject.

02 About hubspot deduplication

Why HubSpot still shows duplicate contacts after you run Manage Duplicates

The native tool compares properties. Email address, first and last name, phone, zip, IP country, company name. Two records that share one of those strongly enough get proposed as a pair, and you review them field by field before they merge. It is a good tool for the duplicates it was built for: the same person entered twice, in the same way, by two people.

It is a property match, so it stops where the properties stop agreeing. Jose Munoz at jmunoz@ridgeline.com, created by a form, and Jose Munoz at Ridgeline Partners LLC, created by a trade show import with the email column left blank, are two contacts with no shared email, a company name that differs by a suffix and no phone on either record. Nothing in the property set says they are one person. The pair is invisible to the match and stays in the portal through every pass you run.

That is the shape of most duplicate debt in a HubSpot portal. It arrived in bulk, from a file, with fields that were typed rather than validated, and it does not look duplicated to a rule that reads one field at a time.

What a property match sees and what a fuzzy pass sees

The pair in your portal Property match Fuzzy pass on the export
Same email, entered twice Found Found
Same email, different case or trailing space Usually found Found
One record with an email, one imported without Missed Found on name and company
Acme Corp against Acme Corporation Missed Found after the suffix is normalized
Markus Hall against Marcus Hall Missed Found by edit distance
Two different emails, same name and company Missed Kept as two people on purpose
Company record against its own subsidiary Missed Proposed, and usually one you reject

The last two rows matter as much as the rest. Two different email addresses are treated as two people, because an export of 30,000 contacts holds plenty of people who share a name, and a match that proposes a parent company against its subsidiary is still only a proposal you approve or reject.

The comparison is not native against export. It is exact against approximate. Running both is the whole point: let HubSpot clear the easy pairs inside the portal, then work the export for the ones a field comparison was never going to reach. The matching itself is ordinary fuzzy matching, applied to a contact file instead of a database column.

How to deduplicate HubSpot contacts on the export

  1. 1 Export contacts from HubSpot with the Record ID column included, and leave the Contact owner column out. The Record ID is what lets you act on exactly the right records afterwards; the owner column holds a rep name that only gets in the way of matching people.
  2. 2 Load the CSV into the demo above. Nothing uploads: the pass runs in your browser, on your machine.
  3. 3 Read the clusters. Each one names why it matched, shows the score, and marks the most complete row as the one to keep.
  4. 4 Approve the merges you agree with and reject the rest. A subsidiary that matched its parent, two people who share a name at the same firm, a franchise location that is a real second account.
  5. 5 Export the audit log. It lists the losing Record ID against the surviving Record ID, which is the working list your HubSpot admin merges from inside the portal.

Merging in HubSpot is a one way door

A merge in HubSpot is not something you unwind later. The two records become one, and the losing record is no longer a place you can read the old field values from. If the merge was wrong, the argument about which value was correct is an argument nobody has the evidence for.

That is the reason the review step is worth the extra half hour. The export pass costs you one CSV download and one upload, and what it buys is a list you read before anything in the portal changes, plus a file that records what you decided. Six weeks later, when someone asks why a contact has the wrong company, the answer is in a column rather than in a memory. The merge mechanics themselves, contacts and companies two at a time, are set out on HubSpot merge contacts.

The same reasoning applies to any CRM export, which is why the general version of this page is CRM data cleansing, the Salesforce version is Salesforce deduplication, the Zoho version is Zoho CRM deduplication and the Pipedrive version is Pipedrive duplicate contacts. The pass is identical. Only the column names change. When the file is an export on its way into a new portal, the import side matters as much as the matching, and that case is covered in Salesforce to HubSpot migration, and for a lead database coming over from Marketo in Marketo to HubSpot migration.

When a direct connection is the better answer

Working on the export is the right shape when the duplicates arrived from files, when you want the matching to be fuzzy rather than rule based, and when someone has to sign off on the merge list before the portal changes. It is deliberately a manual loop, and the merges are applied by a person.

If what you want instead is a scheduled job that runs inside the portal and writes back through the API, that is a different product and you should buy one. Insycle connects to HubSpot directly and treats deduplication as one operation in a broader data operations platform, and Dedupely is the narrower app that merges duplicates in the portal on a schedule, compared on the Dedupely alternative page. We do not connect to your portal and we are not pretending otherwise. What this data cleaning tool gives you is the file, the matching and the record of the decision.

03 Read it off a real file

Two contacts a property match reads as two people

Record ID First name Last name Email Company Matched on
101948 Jose Munoz jmunoz@ridgeline.com Ridgeline Partners Kept: more complete record
118307 Jose Munoz Ridgeline Partners LLC Same name and company once LLC is normalized

No property agrees except the name, and a name on its own is too weak for HubSpot to propose a merge. Adding the normalized company to the comparison is what makes the pair readable, and the Record ID column is what makes it actionable once you have approved it. Had both rows carried different emails, the pass would have left them as two people.

04 Deduplicating inside the portal

What the portal cannot tell you about the pairs it did not find

A native pass reports what it matched. It has no way of reporting the duplicates its rules were never shaped to see, so a clean result reads the same as a clean database.

CRM data cleansing

The match is only as wide as the properties

Two records that disagree on every compared field are two records as far as the rule is concerned, and they survive every pass you run afterwards.

The merge happens where you cannot review it later

Once applied, the losing values are gone, so a merge that turns out wrong is not a merge anyone can reconstruct.

Imports put the duplicates back

If the duplicates came from a file, the next file brings more, and cleaning inside the portal never touches the process that produced them.

What the export pass adds

Fuzzy matching on name and normalized company, every cluster scored and shown to you before anything is applied, and a CSV of the merges you approved keyed on Record ID.

05 Before you run it

Questions about hubspot deduplication

Does HubSpot have a deduplication tool?
Yes. On Professional and Enterprise tiers, the Contacts and Companies indexes carry Actions and then Manage Duplicates, which proposes pairs from properties such as email, name, phone and company, and lets you pick the surviving value field by field. It is exact about the fields it compares and blind to duplicates whose fields disagree.
Can you undo a merge in HubSpot?
No. A merge combines the two records permanently and the losing record stops being somewhere you can read the old values from. That is why a reviewed merge list, exported and kept beside the file, is worth building before you touch the portal rather than after.
How do I find duplicate contacts in HubSpot that have no email address?
Export the contacts with their Record IDs and match on the combination of name and company instead of on email alone. Normalizing the company first, so that Acme Corp and Acme Corporation collapse, is what makes those pairs visible. Two rows that carry two different emails are left as two people, because a shared name is not proof of one person.
Does DataUntangler connect to my HubSpot portal?
No. It works on the CSV you export, in your browser, and hands back a cleaned file plus an audit log keyed on Record ID. Your admin applies the merges in HubSpot. Nothing here has access to your portal and nothing writes to it.
Should I deduplicate before or after importing a list into HubSpot?
Before, every time. Cleaning a list on the way in costs one pass over a file. Cleaning it after import costs a pass over the file plus a merge project inside a portal where merges cannot be reversed, and the second one is the expensive half.
06 What it costs

Plans for when the file is bigger than the demo

Yearly billing saves 50 percent. There is no free plan, and no card is needed to use the browser demo above.

Yearly billing saves 50 percent, half the monthly price.

Switch to yearly and save 50 percent.

Analyst

Self-serve

One person with files to clean, as many as they like.

$29$59/mo

Billed $348 a year Billed monthly

Buy Analyst, yearly Buy Analyst, monthly
  • Unlimited files
  • Files up to 25MB, about 100,000 rows
  • Exact and fuzzy duplicate detection
  • Dates, numbers, currencies, encoding and casing fixed
  • Every change reviewable before you download
  • Cleaned CSV and a change log, both downloadable
  • Runs in your browser: files never leave your machine
  • Email support

Enterprise

Several people on one invoice, a DPA on request, priced per seat.

$49$98/seat/mo

Billed $588 a seat a year, from 2 seats ($1,176) Billed monthly per seat, from 2 seats ($196)

Buy Enterprise, yearly Buy Enterprise, monthly
  • Everything in Analyst
  • Several people on one invoice
  • DPA on request
  • Invoicing and purchase orders
  • A named contact for support

Payment is by card through our payment provider, monthly or yearly, and you can cancel from your account at any time. The free try is one file of your own, up to 5MB, in the browser demo. Already paid? Sign in.

Clean the file, and be able to show what you changed

Try the demo on your own CSV first. It runs in your browser, it costs nothing, and no card is required.

No card required. Your file never leaves your computer.

Clean a file