Why HubSpot Creates Duplicate Contacts From CSV Imports
You imported a clean-looking spreadsheet and still ended up with duplicates. Here's the actual mechanism, not just "check your data."
I'm the solo builder behind DataClean, which has a CSV import-cleanup feature โ so there's an obvious reason I'm writing this. That said, the mechanism below is just how HubSpot's import actually works, and understanding it will save you a cleanup pass whether or not you ever touch our tool.
The one rule that decides everything
During import, HubSpot asks you to map columns to properties, and one of those mapped properties acts as the unique identifier โ almost always email for contacts. For every row in your file, HubSpot checks: does a contact already exist with this exact value in this property? If yes, that row updates the existing contact. If no, it creates a new one.
That's it. That's the entire duplicate-prevention logic for imports. It's fast, deterministic, and completely blind to anything that isn't an exact string match on the field you chose.
The five most common causes of import duplicates
- A secondary email instead of the primary one. The contact already exists under
john@acme.com, but your source list hasjohn.smith@acme.comas an alternate address. No match, new contact. - Trailing whitespace or casing differences. Some export tools leave a trailing space or inconsistent capitalization. Depending on the exact HubSpot matching behavior at the time of your import, this can be enough to miss a match.
- Blank email fields. Rows with no email at all get matched (if at all) on a fallback property, or simply created fresh โ this is a common source of "ghost" duplicate records with no clear identifying link to the real contact.
- The same person appears twice in the file itself โ once from an old export, once from a newer one, under slightly different details โ and HubSpot has no way to know they're the same person within a single import batch beyond that same exact-match rule.
- Re-importing after a partial failure. If an earlier import partially completed and you re-run the whole file, any rows that already succeeded but whose identifying value doesn't match cleanly can duplicate.
Catching it before you import
The cheapest fix is upstream of HubSpot entirely: check the file itself for internal duplicates before it ever gets mapped, and check it against your existing contacts for near-matches that HubSpot's exact-match rule would let through. That means catching not just identical rows but things like the same name at two emails, or the same email in two different casings.
This is specifically what DataClean's import cleanup step does โ scans your CSV against your portal and within the file itself before you commit to the import, so you're deciding what to do with a duplicate row instead of discovering it three months later in a duplicate contacts report.
If you already imported a messy file
It happens โ most people reading this are here because it already did. At that point you're back to standard cleanup: HubSpot's own Manage Duplicates tool will catch anything that matches exactly, and a fuzzy/phonetic scan will catch what it doesn't. See our guide on finding and merging duplicate contacts for the actual steps, including what a merge does and doesn't preserve.
Frequently asked questions
Why does importing a CSV into HubSpot create duplicate contacts?
HubSpot matches import rows against existing contacts using whichever property you set as the unique identifier during mapping, usually email. If that value is missing, blank, formatted differently, or a secondary address instead of the primary one on file, HubSpot can't match it to the existing record and creates a new one instead of updating it.
How do I stop HubSpot imports from creating duplicates?
Clean the file before importing: dedupe rows within the CSV itself, standardize email casing and whitespace, and check the file against your existing HubSpot contacts for near-matches HubSpot's own email-match logic would miss. Tools like DataClean can scan a CSV against your portal before you click import, flagging both in-file duplicates and near-matches to existing contacts.
Does HubSpot check for duplicates during import?
Only exact matches on the property you designate as the unique identifier, typically email. It doesn't catch near-duplicates like typo'd emails or the same person listed under two different email addresses within the same file or against existing records.
Written by Ryttle, solo builder of DataClean at Ryttle LLC. Have a case that doesn't match this? Email me and I'll take a look.
Try DataClean free
Scans your CSV for duplicates before you import โ against your existing contacts and within the file itself. Free up to 1,000 contacts.
Install Free on HubSpot