How duplicate data quietly wrecks your CRM
Published June 1, 2026 · Last updated: August 2026
Duplicate data quietly wrecks a CRM by inflating contact and pipeline counts, splitting one person’s history across several records, and firing automations more than once. The fix is to deduplicate the spreadsheet before import — matching on email or phone — so the bad rows never enter the system in the first place.
The hidden cost of a duplicate row
A duplicate row looks harmless in a spreadsheet — just one extra line. Inside a CRM it behaves very differently. Each record is a container for emails, calls, deal stages, and ownership, so two records for the same person split that history in two. A rep opens one, sees no recent activity, and calls a lead a colleague spoke to yesterday. Reporting compounds the problem: if 18% of your contacts are duplicates, every count, conversion rate, and forecast built on those contacts is wrong in the same direction.
Four ways duplicates do damage
- Inflated metrics. “10,000 contacts” might be 8,200 real people. Pipeline value, list size, and per-rep quotas all drift from reality.
- Split activity history. Notes, emails, and deals scatter across copies, so no single record tells the whole story of the relationship.
- Double-fired automations. Two records for one person can trigger a welcome sequence twice, double-count in attribution, or assign the same lead to two reps.
- Embarrassing outreach. The same prospect receives the same “just checking in” email from two people, which reads as disorganized at best.
Why duplicates accumulate
Duplicates rarely arrive all at once. They build up through ordinary operations: a lead fills out two forms, a list is imported twice, a sales rep adds a contact that marketing already had, or two systems sync without a shared key. Most are not exact copies. They differ in tiny, machine-significant ways — a trailing space, a capitalized domain, a phone number written as (555) 123-4567 in one row and +15551234567 in another. To a person these are obviously the same; to a CRM’s exact-match rules they are two different people.
Exact vs. near-duplicates
| Type | Example | Caught by a plain import? |
|---|---|---|
| Exact duplicate | jane@acme.com (twice, identical) | Sometimes |
| Case / spacing | “Jane@Acme.com ” vs “jane@acme.com” | No |
| Format drift | (555) 123-4567 vs +15551234567 | No |
What your CRM’s own deduplication catches
Most CRMs do run a duplicate check on import, which is why duplicate data in a CRM is often assumed to be a solved problem. It is worth knowing exactly how narrow that check is. HubSpot deduplicates contacts on email: if a contact already exists with the same email address, the imported information updates that contact instead of creating a new one [1]. Useful — and limited to one field. If your file has no email column, or no unique identifier at all, HubSpot treats every row as a new contact [1]. Two records for the same person under a work address and a personal one pass straight through, and phone-number format drift is not part of the check.
The second limitation is that cleaning up afterwards is one-way. HubSpot’s documentation states that it is not possible to unmerge records: the timeline activities and associated records of both sides land on the survivor, and there is no undo [2]. A wrong merge inside a live CRM is permanent. A wrong delete in a spreadsheet is one Ctrl+Z. That asymmetry, more than any efficiency argument, is why the dedupe pass belongs in the file.
Normalizing first is what makes the CRM’s own email match actually work. Lowercase and trim the address column with the email cleaner so “Jane@Acme.com ” and “jane@acme.com” stop counting as two people, and rewrite every phone number into E.164 so the fallback match has something consistent to compare. If the destination is HubSpot specifically, the pre-HubSpot import checklist lists the field-level rules the importer enforces, and the walkthrough for a Salesforce data import covers the equivalent ceilings on the Data Import Wizard and Data Loader.
Two more edges of that check are worth knowing, because they decide what your file has to look like. Companies are deduplicated on a different field entirely — HubSpot matches the primary value of the company domain name property rather than an email [1] — so a contact list and an account list need different columns normalised before either import. And when a row matches more than one existing record, the import does not pick a winner: it errors [1]. A file with three rows for the same person can therefore fail the import outright rather than quietly duplicating, which is a better failure but still a failure you fix in the spreadsheet.
Duplicates are a compliance problem, not only a reporting one
If the records are personal data, accuracy stops being a preference. Article 5(1)(d) of the GDPR requires personal data to be “accurate and, where necessary, kept up to date”, and that “every reasonable step must be taken” to erase or rectify inaccurate data without delay [3]. Two copies of the same contact that disagree — different job title, different consent state, different phone number — mean at least one of them is inaccurate by definition.
The practical risk is a request answered against the wrong copy. Someone asks to be removed or corrected, a rep finds the record the email match linked, updates it, and closes the ticket — while the second record, the one under a personal address that the duplicate check never caught, keeps its old values and keeps feeding the next campaign. The obligation is not discharged, and nobody knows.
That is a reason to do the cleanup somewhere it does not create a second exposure of its own. Uploading a contact export to a web-based cleaner to make it compliant hands the same personal data to another processor; why the upload step is the risky part works through what that actually costs you. Sigmera runs the pass in the browser, so the list never leaves the device — and the comparison of cleaning routes by where the file is processed sets that against the server-based and desktop options.
Fix it before the import, not after
The cheapest place to remove a duplicate is in the file, before it ever reaches the CRM. A row you delete from a spreadsheet leaves no trace; a record you merge inside a live CRM means reconciling ownership, activity, and automations that have already fired. Run a dedupe pass on the export, decide whether to keep the first or last copy of each match, normalize email case and phone format so near-duplicates collapse together, then import the clean file. The full pre-import checklist puts those steps in order; if the list is already open in a workbook, Excel’s built-in Remove Duplicates command handles the exact matches before you export. For a lead list specifically — matching on email, ignoring case and spacing, and choosing which copy survives — the sales-lead dedupe walkthrough covers the whole pass end to end.
Strip duplicate rows out of your export in two clicks — entirely in your browser, nothing uploaded.
Frequently asked questions
- What counts as a duplicate in a CRM?
- A duplicate is any record that refers to the same real-world person or company as another record. CRMs usually match on email, phone, or a name-plus-company combination. Exact copies are easy to catch; the harder cases are near-duplicates like 'jane@acme.com' and 'Jane@Acme.com ' that differ only in case or trailing spaces.
- Why does deduplicating before import beat deduplicating inside the CRM?
- Once duplicate rows land in your CRM they trigger automations, get assigned to reps, and attach activity history — so merging them later means reconciling all of that. Removing duplicates from the spreadsheet before import means the bad rows never exist in the system, which is faster and far less error-prone.
- How many duplicates is normal in a contact list?
- There is no reliable industry benchmark, and any single percentage you see quoted should be treated with suspicion — duplication rates depend entirely on how a list was assembled. Lists merged from several sources (event sign-ups, web forms, a second CRM, purchased data) carry far more than a list that only ever came from one form. Rather than guessing, measure your own: sort the export by email and by phone and count the repeats before you import.
- Can I remove duplicates without uploading my list anywhere?
- Yes. Sigmera's duplicate remover runs entirely in your browser using client-side JavaScript, so your file never leaves your device. That keeps the work GDPR-safe by design because no personal data is transmitted to a server.
- Does my CRM catch duplicate data on import automatically?
- Partly. HubSpot, for example, deduplicates contacts on import by matching email: if a contact already exists with the same email address, the imported information updates that contact instead of creating a new one. That handles the identical case. It does not help when the same person appears under two different addresses, or when the email column is missing from your file — HubSpot's documentation notes that without a unique identifier every row is treated as a new contact record. Format drift in phone numbers is invisible to that check entirely.
- Can I undo a merge if I deduplicate inside the CRM by mistake?
- In HubSpot, no. Its documentation states plainly that it is not possible to unmerge records: the timeline activities and associations of both records land on the surviving record, and the merge is one-way. That asymmetry is the whole argument for cleaning duplicate data before the import rather than after — a wrong delete in a spreadsheet costs you one Ctrl+Z.
- Does the GDPR require me to remove duplicate records?
- Not in those words, but the accuracy principle points the same way. Article 5(1)(d) requires personal data to be “accurate and, where necessary, kept up to date”, and that “every reasonable step must be taken” to erase or rectify inaccurate data without delay. Two contradictory copies of the same person mean at least one is wrong, and a rectification or erasure request answered against only one of them leaves the other standing. Deduplicating a list before it multiplies inside a CRM is the cheapest way to keep that obligation manageable.
- How does HubSpot deduplicate companies rather than contacts?
- By domain. HubSpot's documentation says it looks at the primary values for the Company domain name property to deduplicate companies, in the same way it uses the Email property for contacts. Deals and tickets get no automatic deduplication at all — for those you match on Record ID or a custom property set to require unique values, of which an account can have up to ten.
- What happens if an import row matches two existing records?
- The import fails with an error rather than guessing. HubSpot's deduplication documentation describes an error when multiple matches are found for a row, and a row with no identifier at all creates a new record instead. Both outcomes are avoidable in the file: normalise the identity column, remove the repeats, and every row then matches zero or one record.