Cleaning Your List
A list that only grows eventually stops working. People change jobs, abandon inboxes, and lose interest without ever clicking unsubscribe. Keep mailing them and three things happen:
- Gmail and Yahoo notice. Both filter on engagement. A big block of recipients who never open or click tells them your mail isn’t wanted — and that judgement applies to your whole list, including the people who do want it.
- Abandoned addresses become spam traps. Providers recycle dead mailboxes into trap addresses. Hitting one can get your sending domain blocklisted.
- You pay for nothing. Sending volume costs money. Reach costs nothing if nobody reads it.
Cleaning is maintenance, not failure. Run it quarterly.
How Cyber Mail 9000 decides who’s cold
Go to Subscribers → Clean up. Three thresholds define a cold subscriber, and all three must be true:
| Threshold | Default | What it means |
|---|---|---|
| No engagement in | 180 days | No human open and no click in that window |
| Emails received | 5+ | We’ve actually given them a chance to engage |
| On list at least | 90 days | New subscribers get a grace period — they haven’t ghosted yet |
Two toggles are on by default:
- Skip customers — anyone with Stripe purchase history is never flagged. Someone who bought from you is not dead weight, whatever their open rate says.
- Skip anyone we’ve never emailed — you can’t judge a subscriber on silence you caused.
You can also mark tags as untouchable (“Never touch these tags”), which is the right home for tags like vip, beta, or customer.
Why “human opens and clicks”
Apple Mail Privacy Protection pre-loads tracking pixels for every message it receives, whether or not the recipient looked at it. Gmail and Yahoo do similar prefetching. On most platforms that inflates open rates and makes “hasn’t opened in a year” nearly unusable as a signal.
Cyber Mail 9000 classifies every open as human, proxy prefetch, security bot, or unknown, and only human opens count toward engagement. Clicks always count — post-MPP, a click is the strongest signal you have. So Last engaged on the clean page means a real person opened this, or somebody clicked a link — not a machine fetched a pixel.
The win-back loop
Don’t cull straight to unsubscribe. Give people one clear chance to stay. The whole loop takes about a week and needs no setup.
1. Preview and tag. On the clean page, set your thresholds, hit Preview, review the table, and click Tag as cold. The default tag name is cold.
2. Export a copy (optional). Export CSV before any destructive step gives you a record you can re-import if you change your mind.
3. Send one win-back broadcast. Create a broadcast segmented to the cold tag. Keep it short and make the ask explicit:
“You haven’t opened anything from me in six months, so I’m about to take you off the list. If you still want these emails, click here and you’ll stay.”
Give them one link. Any click updates their engagement date — that’s all it takes to survive the next pass. A link to your archive, your best post, or a plain “yes keep me” page all work.
While the win-back is running, exclude the cold tag from your regular broadcasts so those recipients get one clear message instead of two competing ones.
4. Wait seven to ten days.
5. Re-run the preview and unsubscribe the rest. Come back to Subscribers → Clean up and preview again. Anyone who clicked has dropped out of the list automatically — their engagement date is now recent. Select what’s left and click Unsubscribe.
That’s the whole loop. Every step uses features you already have.
Hands-off version: a win-back automation
If you’d rather it run itself, build an automation with the trigger Tag added → cold:
send_email— the win-back message abovewait— 7 dayssend_email— optional last callwait— 3 daysunsubscribe
Then tagging from the clean page enrolls everyone automatically.
The unsubscribe step protects re-engaged subscribers for you. It skips anyone who has engaged since they were enrolled, and anyone who no longer carries the trigger tag — so a click on the win-back email, or a lander submission that removes the cold tag, keeps them subscribed and simply ends the sequence.
Unsubscribe or delete?
Unsubscribe is the right answer almost every time.
| Unsubscribe | Delete | |
|---|---|---|
| Subscriber record | Kept | Erased |
| Send + engagement history | Kept | Erased |
| Consent record | Kept | Erased |
| Re-import can re-add them | No | Yes |
| Reversible | Yes, one at a time | No |
Unsubscribing marks the subscriber unsubscribed with the method list-cleaning, so you can always see later why they left. Crucially, imports never resurrect an unsubscribed address — the suppression holds forever.
Delete is for two situations only: a GDPR-style erasure request, and obvious junk (typo’d addresses, hard bounces, spam signups). It wipes the consent record you may need later — see Proving Subscriber Consent — and a future CSV import will happily add a deleted address straight back. The clean page makes you type DELETE to confirm for exactly that reason.
A sane cadence
- Quarterly: run the clean page with the defaults (180 days / 5+ emails / 90 days).
- Before a big campaign or a provider review: clean first. Deliverability improves immediately when the dead weight stops dragging your engagement rate down.
- After importing an old list: send to it, wait a few weeks, then clean — imported contacts have no engagement history with you yet.
Start conservative. 365 days and 10+ emails received flags only the truly gone. Tighten to 180 or 90 days once you’ve seen a cycle and trust the numbers.