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

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

ProblemWhy cleaning cannot solve it
The people move on23% 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 them40% of email addresses go dead within two years (NeverBounce). The cleaned file starts decaying the same day it is returned.
Catch-all domains stay unknowableAn 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

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

← Back to TAPAC