VANDFORTBook a call
Every tool is free to use. Enter your email once and all five open.All resources

28% of Email Data Goes Bad Every Year: How to Deduplicate a Lead List Without Losing Good Records, With Matching Rules That Work

Several distinct clear glass discs on a cream surface, with two overlapping above a single glowing gold disc.

The list arrives on a Monday: 8,000 rows from a trade show, a webinar and a purchased file, stitched together in one spreadsheet. Someone needs to dedupe the lead list before the import on Wednesday. So they sort by email, run Remove Duplicates, and watch 600 rows disappear. The import goes through. Two weeks later an AE finds the same VP of Finance in the CRM three times, under a work email, a personal email and a misspelled surname, owned by three different reps. Meanwhile the trade show contact who left a phone number and a note about budget timing is gone, because that row happened to be the "second" one.

Both problems come from the same habit: treating deduplication as a delete operation on one column. A duplicate is not two identical cells. It is two rows that describe the same person, and deciding that takes rules about which fields to compare, how to clean them first, how sure you need to be, and which values to keep when two rows become one.

28%of email list data goes bad every year (ZeroBounce, 2025)
47%of lead and contact emails assessed were invalid or risky (Validity, 2024)
$12.9Maverage yearly cost of poor data quality per organization (Gartner, 2020)

Importing a bought or event list this week? Lead Cleaner takes a CSV and returns the addresses worth sending to, with a count of what came out and why. It is free, opens on a work email, and nothing is enriched, looked up or kept.

The scale of the problem is well documented. ZeroBounce's Email List Decay Report for 2025, based on the addresses it validated through 2024, found that email databases degrade by at least 28 percent a year, and that only 62 percent of the addresses it checked were valid and safe to send to. Validity's analysis of 264 billion CRM records across more than ten thousand orgs, published in 2024, found that 47 percent of lead and contact emails were invalid or risky and that 81 percent of records in orgs without a data management tool needed improvement. Gartner research from 2020 puts the average cost of poor data quality at no less than $12.9 million a year per organization.

Duplicates are where that decay compounds. People change jobs and come back with a new address, event platforms capture whatever the attendee typed, and every import adds variants of people you already have. A single-column dedupe catches only the exact copies.


Diagnosis: why the usual way to dedupe a lead list fails

When a deduplicated list still produces duplicates, or loses records someone needed, the cause is almost always one of these four.

1. Matching on raw values instead of normalized ones

"Jane.Doe@Acme.com " and "jane.doe@acme.com" are the same address, but a spreadsheet treats the trailing space and the capitals as differences. Microsoft's own documentation notes that Excel's TRIM function removes regular spaces but not the nonbreaking space character that often arrives in web form and copy-pasted data. Company names are worse: "Acme, Inc.", "ACME Inc" and "Acme Incorporated" are three strings and one company. If you do not normalize before you match, you are not deduplicating, you are comparing formatting.

2. Treating email as the only identity key

Email is the best single key, and HubSpot, for example, automatically deduplicates contacts on the Email property, according to its knowledge base as of October 2026. But one person can hold a work address, a personal address and an old address from their last employer. Matching on email alone keeps all three. The reverse error is just as common: shared inboxes such as info@ or sales@ belong to many people, and matching on them merges strangers into one record.

3. Deleting the second row instead of merging

Remove Duplicates keeps the first occurrence and drops the rest, whatever they contain. If the first row is a bare webinar registration and the second is a trade show scan with a phone number, title and a rep's note, the good data is the data that disappears. That is how a dedupe loses good records: not by matching wrongly, but by having no rule for which values survive.

4. Auto-merging fuzzy matches nobody reviewed

Fuzzy matching is useful and dangerous in equal measure. "Jon Smith at Acme" and "John Smith at Acme" are probably the same person. "Chris Lee at Acme" and "Chris Lee at Acme Labs" might be two people at two companies. Salesforce's standard matching rules use fuzzy methods such as Jaro-Winkler distance and name variants for first names, per its Trailhead duplicate management module, precisely because exact matching misses real duplicates. But a merge is hard to undo: HubSpot's documentation states plainly that merged records cannot be reverted.

The pattern: a bad dedupe is not caused by a bad tool. It is caused by skipping three decisions: how to clean values before comparing them, how sure a match must be before it acts, and which values win when two records become one.

Framework: matching rules that work, in three tiers

Think of matching as a ladder of evidence. The higher the tier, the stronger the evidence that two rows are one person, and the more you can automate. Every tier runs on normalized values, never raw ones. These tiers and thresholds are a suggested starting point, not a benchmark; tune them on a sample of your own data.

TierMatch key (after normalization)ConfidenceAction
1. Exact identitySame CRM record ID, or same normalized email (excluding role and shared inboxes)HighMerge automatically, with survivorship rules
2. Strong compositeSame first name + last name + company domain, or same last name + normalized mobile phoneMedium-highMerge automatically after a sample check, or queue if the list is high value
3. Fuzzy candidateSimilar names (nickname, typo, swapped order) + same or similar company nameMedium-lowNever merge automatically; send to a human review queue
No matchSame company only, or same role inboxNoneKeep both; link to the same account instead

Normalization is what makes the tiers trustworthy. Lowercase and trim every email, including nonbreaking spaces. For gmail.com addresses only, remove dots from the local part: Google's help center says dots do not matter in personal Gmail addresses, but also that dots do change the address for work and school accounts, so never apply that rule to a company domain. Reduce company names to a key by lowercasing, stripping punctuation and dropping legal suffixes such as Inc, LLC, Ltd and GmbH. Derive the company domain from the email where the address is not from a free provider. Put phone numbers in one format with a country code. Keep the originals in separate columns for reviewers.

Then decide survivorship before you merge anything. Survivorship is the rule for which value the merged record keeps, field by field. A practical default: the most recent non-empty value wins for title, phone and company; the earliest value wins for created date and original lead source, so attribution survives; free-text notes are appended, never overwritten; and owner is never changed by a dedupe. Writing this down is the step that stops a merge from destroying the one row someone cared about.

Design principle: automate only the matches you would bet on, and let a person decide the rest. A missed duplicate costs a little rep time. A wrong merge loses a person's history and cannot be undone.

Implementation: six steps to dedupe a list before import

This sequence works in a spreadsheet, a data tool or a workflow platform.

Keep the raw file untouched. Copy the list, add a row ID to every row and never edit the original. Every decision should trace back to a source row you can recover.

Remove what should not be imported at all. Before matching, take out invalid syntax, obvious test entries and addresses that are not worth sending to. This shrinks the matching problem and stops bad rows from becoming the "winning" value in a merge. Lead Cleaner handles this pass on a CSV and reports what it removed and why.

Normalize into new columns. Create normalized email, company key, domain and phone columns next to the originals, using the rules above. Flag role inboxes (info@, sales@, support@, admin@ and similar) and free-email domains in their own columns so the tiers can exclude them.

Match within the list, then against the CRM. Run tier 1, then tier 2, then tier 3 on the list itself. Then run the same tiers against an export of existing CRM contacts and leads, because the most expensive duplicate is a new row for someone a rep is already working. Our guide to deterministic and probabilistic matching goes deeper on setting the thresholds between tiers.

Merge with survivorship, review the fuzzy queue. Apply the field-by-field rules to tier 1 and tier 2 groups. Put tier 3 candidates side by side in a review sheet with their source rows and a reason column.

Log, import and set prevention. Save a merge log with the surviving row ID, the merged row IDs and the rule that matched them. Import with your CRM's own duplicate checks switched on, such as Salesforce duplicate rules set to alert or block, or HubSpot's email-based deduplication. Then put the same normalization at your form and integration entry points so the next list starts cleaner.


Workflow: who handles each kind of match

Deduplication goes wrong when everyone assumes someone else checked. Assign each tier an owner and a rule for what happens next.

Automatic: tier 1 matches

Same record ID or same normalized email, excluding role inboxes. These merge without review, using survivorship rules, and every merge is written to the log. Marketing ops owns the rules.

Sampled: tier 2 matches

Name plus company domain, or surname plus mobile phone. These merge automatically once someone has checked a sample of 20 to 30 pairs from the current list and found no false matches. If the sample shows errors, the whole tier moves to review for that list. The sample size is a suggested starting point, not a statistical standard.

Reviewed: tier 3 candidates

Fuzzy name and company matches go to a review queue owned by sales ops or the SDR leader, because they know the accounts. Each pair is marked same person, different person or unsure. Unsure stays separate. Decisions are logged so the same pair is not reviewed twice next quarter.

Never merged: same company, different people

Two contacts who share only a company or a role inbox are not duplicates. They are a buying group. Link them to one account record instead of merging them, which is where account-level identity takes over, as our guide to collapsing duplicate accounts into one canonical record explains.


Board narrative: explaining list quality in three sentences

Leadership rarely asks about deduplication by name. It asks why pipeline numbers moved after an import, or why reps keep calling the same person. Three statements answer it.

What we import

"Every list is cleaned before it touches the CRM: invalid and unsendable addresses come out, and the remaining rows are matched against each other and against existing records before import."

How we decide

"Only exact and strong matches merge automatically. Uncertain matches are reviewed by the people who know the accounts, and every merge is logged, so we can trace any record back to its source."

What it protects

"Lead counts, source attribution and rep assignments are not inflated by the same person appearing three times. That makes conversion rates and pipeline coverage numbers we can defend."

If leadership wants a dollar figure for what duplicates are costing, our framework for pricing duplicate records and data decay shows how to build one from your own data rather than from a headline number.


Cross-domain: what a clean list does for the rest of the revenue engine

A deduplicated list is an input, not an outcome. Its value shows up in the systems downstream of it.

Routing is the first. A duplicate lead that arrives as "new" gets assigned by round robin to a second rep while the first rep is mid-conversation. A Speed-to-Lead system can only respond fast to the right person if it knows the person already exists, which is why matching against existing records, not only within the list, matters. Our guide to choosing lead routing software by routing complexity covers how matching rules feed routing decisions.

Pipeline is the second. Duplicates inflate lead and contact counts, split activity history across records and make opportunity contact roles unreliable. A Pipeline Hygiene Sentinel watches for the records and fields that drift after import, so the cleanup you do before Wednesday does not quietly undo itself by the end of the quarter.

Each VANDFORT system is tested on around 20 of the client's own past cases and ships at 85 percent or does not ship. The matching tiers here follow the same discipline: decide how sure you need to be, then test on your own records.


Frequently asked questions

How do I remove duplicates from a lead list without losing data?

Merge instead of delete. Normalize emails, names, company names and phones into new columns, match on those, and then apply survivorship rules field by field: most recent non-empty value for title and phone, earliest value for created date and lead source, notes appended. Keep the raw file and a merge log so any record can be traced back or recovered.

Should I dedupe leads by email or by name and company?

Both, in order. Normalized email is the strongest single key, so match on it first, but exclude shared inboxes such as info@ or sales@. Then match on first name, last name and company domain to catch the same person using a personal or old work address. Treat looser name and company matches as candidates for review, not automatic merges.

How do I dedupe a lead list in Excel or Google Sheets?

Add helper columns first: lowercase and trimmed email, a company key with punctuation and legal suffixes removed, and a combined first name, last name and domain key. Note that Excel's TRIM does not remove nonbreaking spaces, so replace those too. Then sort or count on the helper keys to find groups, and merge each group by hand or formula rather than using Remove Duplicates on raw columns.

What is fuzzy matching for leads, and is it safe?

Fuzzy matching finds records that are similar rather than identical, such as Jon and John Smith or Acme Inc and ACME. Salesforce's standard matching rules use methods like Jaro-Winkler distance and name variants. It is safe for finding candidates and risky for merging them, because similar names at similar companies can be different people. Send fuzzy matches to a human review queue.

Does HubSpot or Salesforce dedupe leads automatically on import?

Partly. As of October 2026, HubSpot automatically deduplicates contacts on email address and companies on domain, and offers a duplicate management tool on paid tiers. Salesforce uses matching rules and duplicate rules that can alert or block. Neither replaces cleaning the list first, because a person using two different emails will not match on email alone.

Sources: ZeroBounce, Email List Decay Report for 2025, February 2025. Validity, "5 Things We Learned from Evaluating 264 Billion CRM Records," October 2024. Gartner, Data Quality topic page, citing Gartner research from 2020. HubSpot Knowledge Base, "Deduplication of records" and "Manage duplicate records," accessed October 2026. Salesforce Trailhead, Duplicate Management module, accessed October 2026. Google Gmail Help, "Dots don't matter in Gmail addresses," accessed October 2026. Microsoft Support, TRIM function, accessed October 2026. VANDFORT, Lead Cleaner page, accessed October 2026.

Sources: ZeroBounce; Validity; Gartner; HubSpot deduplication; HubSpot merges; Salesforce Trailhead; Google Gmail Help; Microsoft Excel TRIM; Lead Cleaner.

Read next