IntermediateAction GuideEmail Deliverability

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.

DataPrep Engineering TeamPublished: 2025-06-05Last verified: 2026-07-153 min read

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.

CriterionExcel / SheetsPython / CloudDataPrep (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. 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. 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. 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.

Works fully offline · No cookies · No tracking pixels

Common Errors & Fixes

Error / SymptomRoot CauseFix
3.69% bounce rate on first campaign → account suspended94K 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 2Elevated bounce rate during warming triggers Gmail throttling, extending the warmup periodStart 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?
Mailchimp → Audience → Settings → Manage contacts → Unsubscribed AND Cleaned. Export both. 'Cleaned' = hard bounces. 'Unsubscribed' = voluntary + spam complaints. You need BOTH for a complete suppression list.
Should I also remove inactive subscribers (no open in 12+ months)?
Yes, strongly recommended. Inactive subscribers won't bounce but won't engage—tanking your open rate, which Gmail uses as a reputation signal. Remove anyone with no opens in 6+ months during IP warming.

Ready to clean your data?

100% local processing · Zero uploads · Blazing fast

Trusted by 2,400+ data teams · 18M+ rows processed monthly

DP

DataPrep Engineering Team

We build privacy-first data preparation tools that run entirely in your browser. Every workflow on this page has been tested against production datasets exceeding 500K rows. We verify each guide against real platform exports quarterly.

Last reviewed by the engineering team on 2026-07-15.