Everything you need to know about verifying a large email list: when to do it, how to prepare your file, what each result field means, how to handle catch-all addresses, re-verification schedules, and the bounce-rate math that justifies the cost.
invalid rate on typical opt-in lists
invalid rate on purchased or scraped B2B lists
B2B list decay per year (≈2%/month)
Sending to a dirty list doesn’t just waste spend - it generates hard bounces that damage your sending domain’s reputation with Gmail and Microsoft. Once bounce rate exceeds 3-5% on a domain, subsequent emails from that domain go to spam for everyone, even clean addresses. Bulk verification removes invalid addresses before that damage occurs.
Export as CSV
Single column labelled email is ideal. Multi-column CSVs work - you’ll select which column to verify. Do not upload .xlsx directly.
Remove blank rows
Blank rows consume credits if not stripped. Most spreadsheet apps let you filter and delete blanks.
Deduplicate
Sending duplicates through verification wastes credits. Excel: Data › Remove Duplicates. Python: df.drop_duplicates('email').
Normalise casing
Lowercase all addresses before upload. email.strip().lower() is enough - addresses are case-insensitive in practice.
Strip trailing whitespace
Common in CSV exports. Whitespace causes lookups to fail and the address appears invalid.
| Field | Values | What to do |
|---|---|---|
| result | valid, invalid, unknown | Send to valid. Suppress invalid. Review unknown with catch_all_score. |
| is_disposable | true / false | Suppress all true - these are throwaway addresses. |
| is_role_address | true / false | Suppress from personal cold outreach. OK for newsletter mass sends. |
| catch_all_score | 0.0-1.0 | >0.65: include. 0.4-0.65: judgment call. <0.4: suppress. |
| mx_found | true / false | false means the domain has no mail server - always invalid. |
| smtp_code | e.g. 250, 550 | 250 = accepted. 550/551 = definitive rejection. |
| free_provider | true / false | Signals consumer vs business address - useful for segmentation. |
A catch-all domain returns “250 OK” for every SMTP probe - real or fake. This means SMTP alone can’t determine whether the specific mailbox exists. BounceZero assigns a catch_all_score (0-1) based on pattern matching, domain reputation, and historical probe data.
Low delivery risk. The mailbox pattern and domain history suggest this address is real.
Medium risk. Consider the value of the prospect vs. the domain’s bounce exposure.
High risk. Statistical likelihood is that the mailbox doesn’t exist.
| Segment | Filter | Send strategy |
|---|---|---|
| Tier 1 - High confidence | result=valid AND is_disposable=false AND catch_all_score>0.65 | Send immediately on primary domain |
| Tier 2 - Catch-all mid-score | result=unknown AND catch_all_score 0.40-0.65 | Send via secondary domain; monitor bounce rate |
| Tier 3 - Role addresses | is_role_address=true AND result=valid | Newsletter / mass send only; not cold personal outreach |
| Suppress | result=invalid OR is_disposable=true OR catch_all_score<0.40 | Do not send; remove from all lists |
Example: 100,000-address list at $3/1K = $300 to verify. Typical 15% invalid rate means 15,000 addresses removed.
Speed depends on list size and domain mix. A 10,000-address list typically completes in 5-15 minutes. A 1,000,000-address list typically takes 1-4 hours. Lists heavy with catch-all domains take longer because each address requires a live SMTP probe that can’t be cached.
Industry averages: 5-15% invalid on lists collected via web forms without real-time validation; 15-30% invalid on purchased or scraped B2B lists; 2-5% invalid on double opt-in lists. Additionally 10-30% of B2B addresses are catch-all.
At minimum: reverify any list older than 90 days before a campaign. For cold outreach: monthly. For newsletters: quarterly. Triggered: any time bounce rate exceeds 2% on a send. B2B lists decay at roughly 25-30% per year - about 2% per month.
CSV with a single column labelled email is ideal. Multi-column CSVs work if you identify the email column. BounceZero also accepts .txt files with one address per line. Do not upload .xlsx - export to CSV first.
Upload CSV or paste addresses. BounceZero verifies each one via live SMTP and returns result, catch_all_score, is_disposable, and more. $3/1K. 100 free credits.
Ayoub built BounceZero's 5-stage validation pipeline, its dedicated BGP-announced IP infrastructure, and the Patroni HA PostgreSQL cluster behind every verification. Previously built high-volume email delivery infrastructure. Trained at 1337 Benguerir (École 42 network, 2019). Open-source: bgp_analyzer.
Deep-dive guides on how email verification and inbox placement work
How to clean an email list in 2026: remove invalid, catch-all, role-based, and disposable addresses
Email list hygiene guide: when to clean, how to remove disposable, catch-all, and spam trap
Tips and deliverability guides
Quarterly B2B email deliverability research
Real lessons from the first cohort
How verification works - the 5-stage pipeline, accuracy, and use cases
Continue through related topics