Hygiene is sequencing, not a single step
A list hygiene pass isn't one check - it's several checks that each catch a different failure mode, and the order matters because earlier checks remove addresses that would otherwise distort later ones. Running engagement-based suppression before basic syntax validation, for example, wastes effort scoring addresses that were never going to be deliverable in the first place.
The sequence, in order
- Syntax and format validation. Strip anything that isn't a structurally valid email address - this catches copy-paste errors, truncated exports, and obviously malformed entries before anything else runs.
- Domain and MX record check. Confirm the domain portion actually has a mail server configured to receive mail. This catches typo'd domains (
gmial.com) and defunct company domains that look fine syntactically but can't receive anything. - Mailbox-existence verification. Where possible, verify the specific mailbox exists, not just the domain - this is the step that catches addresses that were once valid but have since been deactivated.
- Role-account and generic-address flagging. Addresses like
info@,sales@, orsupport@are rarely read by an individual and almost never reply - flag or deprioritise them rather than treating them the same as a named contact. - Suppression list cross-check. Remove anyone who has previously unsubscribed, complained, or hard-bounced on a prior campaign, regardless of which list they came from this time.
- Spam-trap risk review. Addresses sourced from old purchased lists or scraped years ago carry a disproportionately higher chance of having been converted into spam traps - treat lists with unclear provenance as higher-risk and consider a smaller, slower test send before the full volume.
A before/after view of what each step removes
| Step | Typical catch rate on an older or imported list |
|---|---|
| Syntax/format | 1-3% |
| Domain/MX check | 2-5% |
| Mailbox-existence verification | 5-15%, higher on lists over a year old |
| Role-account flagging | 3-8% |
| Suppression cross-check | Varies widely by prior campaign history |
Don't skip hygiene just because the list is small
The instinct to skip a hygiene pass on a small list ("it's only 200 contacts, I'll just send it") ignores that reputation damage from a bad list isn't proportional to list size - a 15% hard-bounce rate from 200 addresses hits a mailbox's reputation just as hard, proportionally, as the same rate from 20,000.
Hygiene isn't a one-time gate for an existing active list
The sequence above is usually framed as a pre-send gate for a new list, but an existing, actively used list needs the same sequence re-run periodically, not just once at the start. Addresses that were valid six months ago can go stale - roles change, companies shut down, mailboxes get abandoned - and a list that passed hygiene at import time will have quietly accumulated risk by the time you're several campaigns deep into using it.
A reasonable cadence is re-running the full sequence before any campaign to a list that hasn't been emailed in the last 30-60 days, since a dormant segment is more likely to have gone stale than one you've been sending to continuously. For lists in constant active use, a lighter version - at minimum the suppression cross-check and a bounce-based cleanup - run before every send catches most of the ongoing decay without the overhead of the full sequence every time. Automate as much of this sequence as your tooling allows rather than running it manually each time - a manual process that takes real effort tends to get skipped under deadline pressure, which is exactly when a skipped hygiene pass does the most damage, since rushed campaigns are often the ones built from whatever list was fastest to pull together. Where full automation isn't available for every step, automate the highest-catch-rate steps first - mailbox-existence verification and suppression cross-checks - and accept a manual process for the lower-impact steps rather than skipping automation entirely because the whole sequence can't be automated at once.
What not to do
Do not run only a syntax check and call the list clean - syntax validation catches the smallest share of actual deliverability risk in the sequence above. Do not merge a freshly hygiene-checked list back together with an older, unchecked segment before sending - the clean segment's performance gets diluted by the segment you didn't check. Do not treat hygiene as a one-time task for a static list; re-run the sequence before each new campaign, since bounces and complaints accumulate between sends.
MailPilot tracks bounce and complaint signals per mailbox in real time, so if a list that passed hygiene still produces unexpected bounces once sent, it shows up immediately against the specific mailbox involved rather than surfacing days later in an aggregate report.
Ready to reach the inbox every time?
Automated email warmup across real peer mailboxes. Live inbox placement monitoring. Free 7-day trial - no credit card required.
Start free trial