Email list hygiene is not running a CSV through a verifier and naming the output clean-final-v3.csv.
Before another campaign, every row needs a source, a current status, suppression history, a permitted action, and an owner. If that context disappeared during a merge or export, the list is not ready.
Stop and quarantine the file when
- the original source is unknown;
- acquisition or enrichment dates are missing;
- unsubscribe, complaint, or suppression history was dropped;
- the file mixes clients or campaigns without identifiers;
- verification results have no date or provider;
- duplicates cannot be resolved to one canonical record;
- prior bounce evidence was overwritten;
- nobody owns the send/no-send decision.
Do not use another verification pass to hide an ownership problem.
Make one person responsible for the gate
The data researcher, verifier, campaign operator, client owner, and compliance owner may all touch the file. One named person still needs to decide whether it can enter the sequencer.
Define the roles:
| Role | Decision |
|---|---|
| Source owner | Where the record came from and whether the intended use is permitted |
| Data owner | Identity, company, field normalization, and duplicate handling |
| Verification owner | Provider result, date, conflict, and recheck path |
| Suppression owner | Unsubscribe, complaint, bounce, policy, and client exclusion precedence |
| Campaign owner | Segment fit and final send/research/quarantine action |
| Legal or compliance owner | Rules that apply to the market, source, jurisdiction, and organization |
This checklist cannot grant legal permission to contact someone. Keep that decision with the organization's responsible owner and counsel.
The pre-send hygiene checklist
1. Preserve provenance
For every record, keep:
- original source;
- acquisition or enrichment date;
- company and person identifiers;
- market, segment, and campaign context;
- client or business unit;
- source URL or job ID when available;
- the owner who approved the source.
Provenance lets you compare outcomes by source later. Without it, one bad data feed can contaminate several campaigns while the team blames the inboxes.
2. Rebuild suppression before deduplication
Collect suppression from every relevant system:
- unsubscribes;
- complaints;
- hard bounces;
- policy exclusions;
- client-specific do-not-contact records;
- previous manual removals;
- internal or customer records that should never enter outreach.
Merge those decisions into the canonical contact before removing duplicates. If the suppressed copy is discarded first, the surviving row may look eligible even though the person already opted out or failed a prior campaign rule.
Use this order when several files are being combined:
- Preserve every original row and source ID.
- Normalize candidate identity fields without deleting originals.
- Collect suppression and prior-send evidence from every system.
- Resolve records to a canonical person/address according to the written key.
- Apply suppression precedence to the canonical record.
- Add the current verification result without overwriting the older one.
- Assign the final acceptance action, reason, date, and owner.
- Export only the accepted segment while retaining the full audit record elsewhere.
Do not deduplicate each source file independently and then merge the survivors. The suppressed copy may be in one file while the “clean” copy is in another.
3. Normalize the identity fields
Trim whitespace. Normalize casing where appropriate. Parse names and domains carefully. Keep the original values alongside the normalized ones when transformations could be disputed.
Choose duplicate keys deliberately:
- exact email;
- normalized email;
- person plus company;
- profile URL;
- internal contact ID;
- a combination of those fields.
One person changing companies is not the same record as one CSV repeating the same address three times.
4. Record the verification state
Verification is one part of the hygiene record.
| State family | Default handling | Required context |
|---|---|---|
| Valid | Eligible for targeting review | Provider, date, source, and reason fields |
| Invalid | Suppress | Failure reason and suppression date |
| Unknown | Quarantine or recheck | Attempt date and next decision owner |
| Catch-all | Separate risk decision | Domain, result, campaign, and owner |
| Disposable | Suppress unless policy documents another action | Detection source and date |
| Role-based | Review against targeting policy | Address type and campaign reason |
Do not turn the tool's label into a permanent fact. People change jobs, mailboxes disappear, and domains change configuration. Set a recheck rule based on age, source, and campaign risk.
Write the recheck rule
Avoid a universal “verify every 30 days” policy unless the organization has evidence and an owner for it. Use the conditions that make the record stale or uncertain.
| Condition | Possible action |
|---|---|
| Person changed roles or companies | Research identity and verify the new address |
| Domain changed or stopped resolving | Quarantine and investigate the company/domain |
| Prior result was unknown or catch-all | Recheck or keep under the separate risk decision |
| Verification is older than the source policy allows | Reverify before acceptance |
| Recent hard invalid-address response | Suppress regardless of an older valid result |
| Temporary or mailbox-full response | Preserve the class and use the timed policy |
| Provider results disagree | Keep both and assign manual review |
| New campaign has materially different targeting | Repeat targeting review even if the address is unchanged |
Record the trigger and next review date. A date without a reason becomes another field nobody trusts.
5. Keep prior send evidence
Store more than a total bounce rate.
For each earlier send, preserve:
- campaign and date;
- sending domain and mailbox group;
- delivered or accepted state available from the system;
- full bounce response and class;
- reply or negative-response class;
- unsubscribe or complaint state;
- provider restriction or connection event;
- copy and tracking version.
A mailbox-full response, invalid address, policy block, and disabled sending account are different problems. Flattening them into failed removes the evidence the next campaign needs.
The acceptance table
Create one final action field. Do not make the sequencer infer it from twelve columns.
| Action | Meaning | Who can approve it |
|---|---|---|
| Send | Passed source, suppression, verification, and targeting checks | Campaign owner |
| Suppress | Must not enter the campaign | Suppression policy owner |
| Reverify | Status is too old or inconclusive | Data owner |
| Research | Identity, company, or role needs confirmation | Research owner |
| Quarantine | Conflict or missing evidence blocks action | Operations lead |
| Remove | Record is malformed, irrelevant, or outside policy | Data owner |
Keep the decision date and reason. “Send” without a timestamp eventually becomes another stale status.
Review a sample of the accepted rows
Before importing the full file, manually inspect a fixed sample from each source, segment, and acceptance state that remains eligible.
Check:
- person and company identity;
- current role where required by the campaign;
- domain and work-email consistency;
- source and acquisition date;
- verification result and age;
- suppression check and precedence;
- required personalization or segment fields;
- final action, reason, and owner.
Also sample suppressed and quarantined rows. The purpose is to verify the rules are being applied, not to find a way to move more records into send.
If one source has a materially higher correction or quarantine rate, stop that source and review it separately. Do not average the problem away across the entire list.
Handoff fields for the sequencer
The accepted export should include enough context to audit the next step:
contact_id
source
source_date
client_or_business_unit
segment
email
verification_provider
verification_status
verified_at
suppression_checked_at
acceptance_action
acceptance_reason
decision_owner
campaign_id
Store suppression and prior outcomes outside the one campaign import too. A new sequencer or workspace should not erase the decision history.
Feed the next campaign back into the hygiene record
After launch, preserve the evidence by contact and source:
| Campaign evidence | Hygiene update |
|---|---|
| Hard invalid-address response | Suppress and record the exact response and date |
| Temporary or mailbox-full response | Keep the class and apply the timed retry/recheck rule |
| Unsubscribe or complaint | Apply suppression at the intended organization/client scope |
| Reply from wrong person | Correct identity and review the source-matching workflow |
| Reply from intended person | Confirm identity without treating it as proof for every record from the source |
| Provider policy rejection | Investigate the sending layer; do not relabel the address invalid |
| Connection or account failure | Keep it out of the list-quality score |
This prevents every failed send from becoming “bad data” and every reply from becoming “the database is accurate.” The evidence belongs to the layer it actually describes.
Before release, the campaign owner should be able to state the total rows received, duplicates resolved, suppressions applied, records reverified, records researched, rows quarantined, final accepted count, policy version, review sample, and approval timestamp. If those numbers cannot be reconciled back to the source files, the export is not ready for the sequencer.
Save that reconciliation with the campaign record. The next refresh should start from the governed contact history, not from the last exported CSV.
If two operators cannot reproduce the accepted count from the same source files and policy version, stop the handoff. Fix the merge order, missing status, or undocumented exception before anyone schedules the file. Reconciliation is the last control against a clean-looking export that lost its suppression or provenance on the way through the workflow.
Cheap Inboxes does not clean or verify lists. Its infrastructure starts after the list-quality gate. Better domains and mailboxes cannot compensate for stale, mis-targeted, or poorly governed data.
If bounces or replies change after launch, use the cold email deliverability diagnostic to separate data from authentication, provider, copy, and sending behavior. When the file is accepted, the infrastructure checklist covers the next handoff.
Marketing-list advice is not automatically cold-outbound policy
Most public list-hygiene guidance is written for subscriber email marketing. It commonly discusses opt-in, engagement, re-engagement, and inactive subscribers. Those sources can help explain why records decay and why suppression matters.
They are not a substitute for the rules that apply to your market, data source, campaign, and jurisdiction. Keep legal and compliance decisions with the responsible owner and counsel. This checklist is an operating record, not legal approval.
No row reaches the campaign without provenance, current status, suppression history, a permitted action, and a named owner. That is what “clean” should mean to the team.
