Email list cleaning removes dead rows. It does not stop the list from decaying
List cleaning is a well-defined job: take a file, check every address, delete the rows that fail, hand back a smaller file. It works. What it does not do is change the clock, and the clock is the reason the file needed cleaning in the first place.
What a cleaning pass genuinely fixes
- Hard bounces already sitting in the file — mailboxes deleted since the list was built.
- Syntax and domain errors — typos, dead domains, obviously malformed local parts.
- Duplicates — the same person appearing three times under three import dates.
- Role accounts, if you choose to drop
info@andsales@from a personal-outreach campaign.
All four are worth doing before a campaign goes out. The mistake is treating the pass as a state the list is now in, rather than a snapshot with a date on it.
Three things cleaning cannot do
| Problem | Why cleaning cannot solve it |
|---|---|
| The people move on | 23% of business contacts change jobs every year (ZoomInfo, 2025). Cleaning keeps the mailbox and deletes the person's relevance, in that order. |
| Mailboxes close behind them | 40% of email addresses go dead within two years (NeverBounce). The cleaned file starts decaying the same day it is returned. |
| Catch-all domains stay unknowable | An accept-all server says yes to every address. Ten passes produce ten identical unknown answers — the reply describes the server policy, not the mailbox. |
That is the structural issue: cleaning is a snapshot, decay is continuous, and freshly sourced data outperforms stored records by 42% (Harvard Business Review, 2024). A list cleaned in March and sent in September is a different asset from the same list sent in March, and no CSV carries an expiry date.
The cleaning cycle, and its cheaper replacement
The usual answer is to clean on a schedule — monthly, quarterly, before every campaign. Each pass costs money on the full file, and the file is only correct on the day the report was generated. The alternative is to stop maintaining the file and resolve the state at the moment it matters: search for the contacts a campaign needs, and probe each mailbox over SMTP inside the same call, so every row that goes out has been checked seconds earlier.
curl -X POST https://tapacapi.com/v1/contacts/search \
-H "Authorization: Bearer ***" \
-H "Content-Type: application/json" \
-d '{"industry":"saas","job_titles":["head of growth"],
"company_size":"11-200","location":"germany","source":"website","limit":50}'
Existing lists are not wasted: POST /v1/contacts/verify checks a batch of addresses without searching for anyone new, which is the honest version of a cleaning pass — the verdict carries the time it was taken. The difference is that verification is not a maintenance event you schedule, it is a property of the row you are about to use.
What the numbers actually look like
- Addresses verified as they are used land at 2–5% bounce; stored or purchased lists commonly land at 10–35%.
- The gap is not better data — it is a shorter interval between the check and the send.
- Catch-all
unknownrows still need judgement and belong in their own sending segment.
Through an agent this is one call: npx -y @tapacapi/mcp, or the hosted endpoint https://tapacapi.com/mcp with the tools tapac_find_contacts and tapac_status. 100 searches are free, then $0.10–0.50 per verified contact, pay-per-use.
The honest limit. Cleaning still removes the rows that are already dead, and for a large existing file that is worth doing once. It just does not keep the file alive, and a cleaned list sold as "verified" without a date is the same stale asset with a better label.
Where to go next
- Email list cleaning · B2B email finder · B2B lead list
- Catch-all verification · cold email bounce rate · what an SMTP check proves
- Install the TAPAC MCP server — npx, uvx or the hosted endpoint, with the JSON block for Claude, Cursor, Codex and Windsurf.
- Compare TAPAC with Apollo, ZoomInfo, Hunter and Lusha · Pricing · Get a free API key