Email list cleaning: a checklist to run before every campaign

Email list cleaning checklist: dedupe, remove bad syntax, verify live, split catch-all, unknown, role and disposable results, and know when to re-clean.

BounceOwl team7 min read

Email list cleaning means removing or separating addresses that will bounce, never be read, or hurt your sender reputation before you send. A practical routine is: back up the list, normalize and dedupe it, drop bad syntax and suppressed contacts, verify every address live, then split the results into valid, invalid, catch-all, unknown, role and disposable segments and send only what you trust. Repeat it before any campaign that uses a list more than a few weeks old.

Here is the checklist we would run on a list before a campaign, step by step.

Before you start: keep the original

Export the list exactly as it is and save a copy you never edit. Cleaning removes rows, and you will want to compare before and after, or recover a contact you dropped by mistake. Work on a copy named for the campaign, for example q4-harborlane-outreach-clean.csv.

Step 1: normalize the addresses

Lists built from forms, exports and spreadsheets collect formatting noise. Fix it first so the later steps compare like with like:

  • Trim spaces before and after each address.
  • Remove trailing punctuation such as commas, semicolons and closing brackets.
  • Split cells that hold two addresses into separate rows, or keep only the first.
  • Lowercase the domain part. Maya.Chen@LumenForge.IO and maya.chen@lumenforge.io reach the same inbox.

Step 2: remove duplicates

Dedupe on the address, ignoring case. Duplicates waste verification credits and, worse, send the same person the same email twice, which is a fast way to earn a spam complaint. If duplicates carry different data in other columns, such as two job titles, decide which row wins before you delete the other.

Step 3: remove bad syntax

Drop addresses that are clearly broken: no @, no domain, spaces inside, two dots in a row, or a missing top-level domain like jon.reyes@harborlane. Keep the rule loose; plus signs and hyphens are valid. Also scan for typo domains such as gmial.com or hotmial.com and correct them only if you are sure what the person meant.

Step 4: apply your suppression list

Remove anyone who unsubscribed, complained, or hard bounced in the past. This step is easy to forget when a list comes from a new import, and it is the one that matters most legally and for your reputation. Verification won't catch these: an unsubscribed address is often a perfectly valid mailbox.

Step 5: verify every address live

Now check what remains against the recipients' mail servers. A live check confirms the domain receives mail, asks the server whether the exact mailbox exists, and tests whether the domain accepts every address. If you are not sure what a verifier actually does, our guide on how to verify an email address walks through each layer.

Check the age of any existing results. A verdict from three months ago is not a verdict for today; people leave jobs and mailboxes get shut down. If the list was verified recently, you may only need to recheck the older rows.

Step 6: split the results into segments

Don't reduce the output to send or don't send. Each result type needs a different decision:

SegmentWhat it meansWhat to do
ValidThe mailbox exists and accepts mailSend
InvalidRejected, disabled, full, no mail server, or bad syntaxRemove and add to suppression
Catch-allThe domain accepts every address, so the check can't tellSeparate, smaller batch, or a deeper catch-all check first
UnknownThe server gave no clear answer: timeout, block or greylistingHold back and verify again later
Role addressinfo@, sales@, support@ and similar shared inboxesKeep for inbound or partner mail; usually skip for cold outreach
DisposableA throwaway inbox serviceRemove from marketing and sales lists
Free providerA personal email service rather than a company domainFine for consumer lists; check fit for B2B campaigns

Catch-all deserves extra care, because these addresses look valid and some bounce after the server has accepted them. Our explainer on catch-all emails has a sending policy you can copy.

Step 7: send in stages and watch bounces

Start with the valid segment, and send it in batches rather than all at once. Look at the bounce rate of the first batch before you continue. A widely used rule of thumb is to keep hard bounces under 2 percent of sends, and lower is better, especially for cold outreach. If a batch goes clearly above that, stop and look at what bounced before sending more.

Read the bounce messages. If they say the recipient doesn't exist, your data is the problem. If they mention policy, authentication or reputation, the problem is your sending setup, and cleaning the list again won't help. We cover the difference in why verified emails bounce.

Step 8: feed the results back

  • Add every hard bounce and every invalid result to your suppression list.
  • Store the verification date next to each contact in your CRM.
  • Note which source produced the most invalid addresses, and fix or drop that source.

How often to re-clean

There is no single right interval, but a few triggers are reliable:

  • Before any campaign that uses addresses last verified more than a few weeks ago.
  • After every import from a new source, such as an event list, a purchased list or a data provider.
  • When your bounce rate starts to rise on a list that used to be clean.
  • On a regular schedule for large CRMs, since B2B contacts change jobs and companies change mail providers.

For signup forms and CRM syncs, verifying at the point of entry with an API keeps the list cleaner between full passes. The email verification API guide shows how.

The checklist in short

  1. Save an untouched copy.
  2. Normalize: trim, remove stray punctuation, lowercase domains.
  3. Dedupe, ignoring case.
  4. Remove bad syntax and fix obvious typo domains.
  5. Apply your suppression list.
  6. Verify every address live, and recheck old results.
  7. Split into valid, invalid, catch-all, unknown, role, disposable and free provider.
  8. Send valid first, in batches, and watch bounces.
  9. Feed bounces and invalid results back into suppression.

Clean a list with BounceOwl

Bulk email verification in BounceOwl covers steps 2, 5 and 6 for you. Upload a CSV, TXT or XLSX file up to 50 MB and 500,000 rows. The email column is found automatically, duplicates are checked and charged once, and you see the cost before anything runs. Results download as CSV with your original columns plus verdict, reason, mail server, provider, catch-all, role and disposable columns, and you can filter by verdict.

Unknown results, invalid syntax and domains with no mail server are free. Single addresses can go through the email verifier, and the pricing page lists the credit packs. If you get stuck, the help center has answers to common questions.

Check a list before you send it.

Live checks with evidence. Unknown results are free, and credits never expire.

Start with 100 free credits

Keep reading