BookMySpot

List Hygiene

How to Clean an Email List in 6 Steps

To clean an email list, export it, fix formatting, remove duplicates, verify every address, suppress bounces and unsubscribes, and then deal with inactive subscribers through a re-engagement send. Those six steps remove the addresses that cause hard bounces and spam complaints, which are the two numbers mailbox providers and sending platforms watch most closely. Plan on an afternoon for a list of a few thousand contacts, most of it spent on the last step.

Below is the full procedure, with the spreadsheet formulas and decision rules for each step.

Before you clean your email list: know why you’re doing it

Cleaning is usually triggered by one of three things:

  • A deliverability warning. Your provider flags a high bounce rate, or Gmail’s spam rate climbs. Amazon SES, for instance, places accounts under review at a 5% bounce rate and may pause sending at 10%.
  • An old segment you want to mail again. Contacts that haven’t heard from you in a long time are the most likely to bounce or complain.
  • An import. A CSV from an event, a CRM migration, or a sales tool.

The reason matters because it tells you how aggressive to be. A warning from your provider calls for removing anything doubtful. A routine quarterly cleanup can be gentler.

One rule applies regardless: cleaning removes bad addresses, not missing consent. If the list includes people who never opted in, no amount of cleaning makes it safe to mail. That’s a permission problem, covered in consent, records and the rules that outlive your list.

Step 1: Export the list and keep a backup

Export every contact with the fields you’ll need to make decisions:

  • Email address
  • Signup date and signup source
  • Last open date, last click date, last purchase or login date if you have them
  • Status (subscribed, unsubscribed, bounced, complained)

Save the untouched export as list-original-YYYY-MM-DD.csv and work on a copy. Microsoft’s own guidance for its Remove Duplicates tool notes that the deleted rows are permanently removed and recommends copying the original data first. The same advice applies to every step here.

Step 2: Fix formatting problems

Most “invalid” addresses in exported lists are formatting accidents, not dead inboxes. Look for:

  • Leading or trailing spaces
  • Uppercase letters (harmless for delivery, but they break deduplication)
  • Non-breaking spaces copied from web pages
  • Trailing punctuation such as jane@example.com. or jane@example.com,
  • Two addresses in one cell (a@x.com; b@y.com)
  • Display names pasted with the address (Jane Doe <jane@example.com>)

In a helper column, normalize each address. In both Excel and Google Sheets:

=LOWER(TRIM(SUBSTITUTE(A2, CHAR(160), " ")))

The SUBSTITUTE matters: Microsoft notes that TRIM only removes the standard space character (ASCII 32), not the non-breaking space (character 160) that often comes from web forms and copied tables.

Lowercasing the whole address is a practical choice. Strictly speaking, RFC 5321 says the part before the @ must be treated as case sensitive, but the same section discourages relying on that, and major mailbox providers don’t distinguish case. Domains are never case sensitive.

Split cells with two addresses into separate rows, and pull addresses out of “Name

” formats before going further. Our guide to cleaning an email list in a CSV or spreadsheet has formulas for each of these.

Step 3: Remove duplicates and malformed addresses

With a normalized column, duplicates are easy to find. To flag every repeat after the first occurrence:

=IF(COUNTIF($B$2:B2, B2) > 1, "duplicate", "")

Then filter on “duplicate” and delete those rows, or use Data > Remove Duplicates in Excel on the normalized column. In Google Sheets, =UNIQUE(B2:B) returns the distinct values in order of first appearance.

Next, flag addresses that can’t possibly work. In Google Sheets:

=REGEXMATCH(B2, "^[a-z0-9._%+'-]+@[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,}$")

In Excel for Microsoft 365, the REGEXTEST function takes the same pattern. Anything returning FALSE needs a look. Some will be fixable typos; others, like n/a, test, or none@none, should go.

This pattern is deliberately simple. It will reject a few rare but technically legal addresses, so review the FALSE rows rather than deleting them blindly. For the reasons regex can only be a first filter, see email validation regex. For deeper deduplication, including which record to keep when two rows collide, see how to remove duplicate and malformed emails.

Step 4: Verify the remaining addresses

Formatting checks can’t tell you whether a domain accepts mail or whether “gmial.com” was a typo. That’s what verification is for. At minimum, check each address for:

CheckWhat it catchesTypical action
SyntaxBroken structureRemove or fix
Domain and MX recordsDomains that don’t exist or don’t accept mailRemove
Common typosgmial.com, yaho.com, hotmal.comCorrect only if you’re confident, otherwise remove
Disposable domainThrowaway inboxesUsually remove from marketing lists
Role-based addressinfo@, sales@, support@Keep only if someone actually opted in
Free providergmail.com, yahoo.com in a B2B listFlag, don’t remove

You can paste a list into our free email verifier to run all of these checks. It looks at syntax, domain and MX records, disposable domains, role accounts, free providers, and typos. It does not connect to the recipient’s mail server, so it won’t tell you whether a particular mailbox exists. For that level of checking on large files, you’d add an SMTP-based service, and even then some results come back as “unknown” or “catch-all.”

A note on role-based addresses: AWS’s sending guidance points out that aliases like postmaster@ and abuse@ are highly unlikely to sign up intentionally and are sometimes added maliciously. Remove those outright.

Step 5: Suppress bounces, complaints, and unsubscribes

Pull your sending platform’s bounce, complaint, and unsubscribe records and make sure every one of those addresses is suppressed, not just marked in a column you might forget about.

  • Hard bounces: suppress after the first one.
  • Soft bounces: suppress after repeated failures. M3AAWG’s Sender Best Common Practices describes removing an address that bounces consecutively at least two times over two weeks or more as generally considered best practice.
  • Spam complaints: suppress immediately and permanently.
  • Unsubscribes: suppress immediately. CAN-SPAM requires honoring opt-outs within 10 business days, and Yahoo asks bulk senders to process them within 2 days.

If you’re re-importing a cleaned file into your email platform, import the suppressed addresses as unsubscribed or suppressed, not as active contacts, so they can’t sneak back in.

Step 6: Handle inactive subscribers

This step separates a real cleanup from a cosmetic one. Inactive contacts are valid addresses that don’t respond. They hurt you in two ways: they dilute the engagement signals mailbox providers use, and some old, abandoned addresses eventually stop working or get repurposed.

Google’s sender guidelines tell senders to consider unsubscribing recipients who don’t open or read their messages, and to periodically confirm that recipients still want to be subscribed.

A simple process:

  1. Define inactive. Pick a window based on how often you send. A weekly newsletter might use six months without a click; a quarterly sender might use eighteen months.
  2. Build the segment. In a spreadsheet with last-click dates in column E, flag inactive contacts with =IF(TODAY()-E2 > 180, "inactive", "active"). Treat blank dates as inactive.
  3. Send a re-engagement series. Two or three messages asking whether they want to stay. See re-engagement email campaigns.
  4. Suppress non-responders. Anyone who doesn’t click or reply gets suppressed under your sunset policy.

Be careful with opens as your activity signal. Apple’s Mail Privacy Protection downloads remote content in the background by default, so an “open” from an Apple Mail user may not mean anyone read anything. Clicks, replies, purchases, and logins are more reliable.

After the cleanup: keep the email list clean

A clean list starts decaying the day you finish. To keep it clean:

  • Validate addresses on every signup form, and consider confirmed opt-in.
  • Make bounce and complaint suppression automatic.
  • Re-run Step 6 on a schedule, not only when something goes wrong.
  • Track bounce rate by signup source so you can find the leaky form or import.

FAQ

How often should I clean my email list?

Suppression of bounces, complaints, and unsubscribes should happen automatically after every send. A fuller cleanup, including verification and an inactive review, makes sense quarterly for most senders, and always before mailing a segment you haven’t contacted in a long time.

Will cleaning my email list reduce my bounce rate?

Yes, if you remove invalid domains, typos, and addresses that have already hard bounced. It won’t eliminate bounces, because some mailboxes close between your cleanup and your next send, and some servers accept verification checks but reject mail later.

Is it safe to clean an email list for free?

Yes, for the checks that don’t require special access: formatting, duplicates, syntax, domain and MX records, disposable domains, and typos. A free tool like the verifier on this site handles those. Mailbox-level checks over SMTP usually come from paid services.

Should I delete inactive subscribers or keep them?

Send them a short re-engagement series first. Keep anyone who clicks or replies, and suppress the rest instead of deleting them so they aren’t re-added by a future import.

Check your list before you send

Free email verifier: syntax, MX, disposable and role-based addresses, typos. Paste up to 100 at once.

Verify emails free