Email list hygiene: a checklist for cleaning and preparing your list
List hygiene means regularly removing addresses that will not receive your mail or will hurt you as a sender. Lists decay on their own: people change jobs, abandon mailboxes, mistype at signup. Leave a list alone and bounces and complaints climb, and your domain reputation pays for it.
What to remove from your list
- Hard bounces. An address that returned a 5xx "no such mailbox" error goes after the first time, ideally automatically. The codes are explained in hard vs soft bounce.
- Repeated soft bounces. Although one temporary failure means nothing, a mailbox that is full send after send is one nobody reads.
- Complainers. Amazon SES asks senders to remove them immediately and not even send a note confirming the unsubscribe.
- Duplicates. Two identical messages annoy people and raise the odds of a complaint.
- Typos and disposable addresses. Domains like gmial.com and temporary inboxes that stop working within hours.
- Role addresses. Keep them only where the subscription is certain, because someone in a department reads info@ or sales@, and it may not be the person who signed up.
- Long-inactive subscribers. People who do not open your mail are better left alone, but send them a re-engagement email first and decide based on that.
- Addresses you did not collect. Bought, rented, scraped. They carry spam traps and people who never agreed to hear from you.
Preparing a list for the first send
- Remove duplicates. Trim whitespace and compare addresses without regard to case. RFC 5321 formally treats the mailbox name as case-sensitive but discourages relying on that, and the domain is case-insensitive. For personal gmail.com accounts dots in the name do not matter, so ivan.petrov@gmail.com and ivanpetrov@gmail.com are the same mailbox. Do not apply that rule to Google Workspace or any other domain.
- Drop obvious syntax junk. No @, a doubled @, no top-level domain, spaces or invisible characters inside.
- Run the list through a validator. It checks the domain and MX, asks the mail server whether the mailbox exists, and flags catch-all, disposable and role addresses. uChecker sorts results into three groups (valid, invalid, unknown) and gives a reason for each rejection. Delete the invalid ones and keep unknowns out of the first send.
- Segment the list by source, signup date and engagement, and start with the freshest, most active addresses.
- Check the domain. SPF, DKIM and DMARC must be in place before the first send; the domain health check shows what is missing.
- Grow volume gradually. A new domain or IP needs a warm-up, and Google warns that even abruptly doubling your previous volume can trigger rate limiting.
Cleaning a list after a long pause
If you have not sent in six months or more, do not just upload the list and hit send. Some mailboxes are gone, some may have become traps, and people have forgotten they subscribed. Mail addresses you have not used lately only as a small portion of your overall sending.
- Back up the list and export engagement history from before the pause, if your platform kept it.
- Remove junk and duplicates as in the first-send preparation.
- Validate the whole list before the first send. Your sending platform only learns about dead addresses from bounces, after the damage is done.
- Check the domain and blocklists. Mailbox provider rules have changed: Gmail has required DMARC from senders of over 5,000 messages a day since 2024, and since May 5, 2025 Outlook.com has rejected such senders' mail without SPF, DKIM and DMARC with the code 550 5.7.515. Check the domain with the blocklist checker.
- Open with a re-engagement email. Remind people who you are and why you are writing, add a "keep me subscribed" button and a visible unsubscribe link. It is worth asking inactive subscribers the same question every so often. Amazon SES warns such campaigns are risky in themselves, so send them first to people who were active before the pause, in small batches.
- Remove those who did not respond after the re-engagement email and a few regular sends. More in the guide to reactivating inactive subscribers.
How often to clean
There is no single interval; it depends on how often you send and where addresses come from. A reliable rule is event-based. Bounces and complaints get handled after every send. Any import, whether a partner list or a CRM migration, is checked in full before the first send. A list is rechecked before a big campaign that follows a pause. And new addresses are best caught in the signup form and confirmed with double opt-in.
Most of this can be automated: bounce removal through your platform's webhooks, validation on import through an API. See automating list hygiene with an API and how fast email lists decay.
Checklist
- Hard bounces are removed automatically after the first occurrence.
- Addresses that soft-bounce send after send are taken off the list.
- Complainers are unsubscribed at once, with no confirmation email.
- Duplicates, misspelled domains and disposable addresses are gone.
- Role addresses (info@, sales@) stay only where a subscription is certain.
- Long-silent subscribers got a re-engagement send; non-responders are out.
- New addresses are checked in the form, and imports are checked in full before sending.
- SPF, DKIM and DMARC are set up for every sending service.
To see whether the cleanup worked, watch bounces and complaints. Amazon SES recommends a bounce rate below 2%, and Google advises keeping complaints below 0.1%.
Sources
Find out how many dead and risky addresses your list holds in a few minutes. Upload your list to uChecker. The first 100 addresses are free.
Mark Avrilov · Author
Published Updated
