Scrub Hard Bounces and Suppression Lists Before ESP Migration
When migrating from Mailchimp to Klaviyo, the new ESP assigns your domain a cold IP reputation. During IP warming, Gmail and Yahoo monitor you ruthlessly under the February 2024 bulk sender requirements (0.3% spam rate threshold for Yahoo, 0.1% hard bounce triggers temporary deferral on new domains per Google Postmaster Tools). A hard bounce rate >2% triggers automated sender penalties. The critical operational mistake: exporting only the 'Active' list from the old ESP, while forgetting the Suppression List (addresses that previously hard-bounced or unsubscribed). Without cross-referencing, dormant bad addresses silently poison your new sender reputation. This workflow performs a local anti-join between your master CSV and suppression CSV, purging dead emails before import.
Why This Matters
A SaaS company migrated 1.2M subscribers to Klaviyo but omitted 94,000 addresses on their legacy suppression list. Their first IP warming campaign generated a 3.69% hard bounce rate, immediately triggering Klaviyo account suspension. The deliverability team spent 11 days on reputation recovery. Three product launch emails were delayed, and full sending volume wasn't restored for 6 weeks—ruining their Q4 calendar. Don't upload unscrubbed lists. Anti-join them locally in seconds.
Why Excel & Python Fail Here
The suppression list is the most forgotten export in ESP migrations. Teams export 'Active Subscribers' and assume that's sufficient. But the suppression list contains: (1) previously hard-bounced addresses, (2) spam complaint filers, (3) manual suppressions by support. These addresses LOOK active in your CRM because they were never explicitly unsubscribed—they just bounced or complained. Importing them into a new ESP with a cold IP is guaranteed reputation suicide.
| Criterion | Excel / Sheets | Python / Cloud | DataPrep (This Page) |
|---|---|---|---|
| Max Rows | ~150K (crashes) | RAM-limited | 1M+ via Wasm |
| Setup Time | Manual formulas | 30–60 min env setup | 0 seconds |
| Data Privacy | Local but fragile | Uploads to cloud | 100% in-browser |
| Cost | License fees | EC2 / SaaS $49+/mo | Free forever |
Step-by-Step Solution
We will use the CSV Deduplicator to execute this entirely in your browser.
- 1
Upload master list and suppression list
Drag and drop both CSVs. The master list is your 'Active' export from the old ESP. The suppression list includes hard bounces, spam complaints, and manual blocks. The tool identifies email columns in both.
- 2
Execute anti-join
The tool performs: master_list ANTI JOIN suppression_list ON email. All addresses present in the suppression list are removed from the master. A report shows: total removed, breakdown by suppression reason.
- 3
Export clean migration file
Download the scrubbed list. A confidence score estimates your expected bounce rate on first send (<0.5% = safe, 0.5–1% = caution, >1% = high risk).
Privacy Guarantee: Zero Bytes Uploaded
All processing happens in your browser via WebAssembly. Your data never touches a server. Try it: disconnect your Wi-Fi right now—the tool will still work.
Common Errors & Fixes
| Error / Symptom | Root Cause | Fix |
|---|---|---|
3.69% bounce rate on first campaign → account suspended | 94K suppressed addresses included in migration (not in 'Active' export) | Always export AND anti-join the suppression list. It's separate from 'Active' subscribers. |
IP warming takes 6 weeks instead of 2 | Elevated bounce rate during warming triggers Gmail throttling, extending the warmup period | Start with a scrubbed list. Target <0.1% bounce during warming per Google Postmaster guidelines. |
Frequently Asked Questions
Where do I find the suppression list in Mailchimp?
Should I also remove inactive subscribers (no open in 12+ months)?
Ready to clean your data?
100% local processing · Zero uploads · Blazing fast
Trusted by 2,400+ data teams · 18M+ rows processed monthly