Bulk Email Verification Guide 2026 - How to Clean a List of 10K-10M Addresses | BounceZero
BlogEmail Verification

Bulk Email Verification Guide 2026
How to Clean a List of 10K-10M Addresses

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.

By BounceZero Team |July 2026 |9 min read

Why bulk verification matters

5-15%

invalid rate on typical opt-in lists

15-30%

invalid rate on purchased or scraped B2B lists

25-30%

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.

Step 1 - Prepare your file

1

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.

2

Remove blank rows

Blank rows consume credits if not stripped. Most spreadsheet apps let you filter and delete blanks.

3

Deduplicate

Sending duplicates through verification wastes credits. Excel: Data › Remove Duplicates. Python: df.drop_duplicates('email').

4

Normalise casing

Lowercase all addresses before upload. email.strip().lower() is enough - addresses are case-insensitive in practice.

5

Strip trailing whitespace

Common in CSV exports. Whitespace causes lookups to fail and the address appears invalid.

Step 2 - Understand the result fields

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.

Step 3 - Handle catch-all addresses

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.

Score 0.65-1.0
Include in send

Low delivery risk. The mailbox pattern and domain history suggest this address is real.

Score 0.40-0.65
Use judgment

Medium risk. Consider the value of the prospect vs. the domain’s bounce exposure.

Score 0.0-0.40
Suppress

High risk. Statistical likelihood is that the mailbox doesn’t exist.

Step 4 - Segment your cleaned list

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

Re-verification schedule

Cold outreach lists
Every 30 days
High turnover - SDR lists and scraped data go stale fastest.
Newsletter subscriber lists
Every 90 days
Lower churn than B2B data but addresses still deactivate.
Purchased / appended B2B data
Before every campaign
Unknown collection date; treat as unverified every time.
Internal CRM / HubSpot contacts
Quarterly
Mix of verified and stale; quarterly cleans keep bounce rate safe.
Any list after 2%+ bounce rate
Immediately
Triggered re-clean after a campaign signals rapid staleness.

The ROI math on bulk verification

Example: 100,000-address list at $3/1K = $300 to verify. Typical 15% invalid rate means 15,000 addresses removed.

Emails skipped
15,000
Sending platforms charge per email - e.g. $15 saved at $1/1K send cost
Hard bounces avoided
15,000
Each bounce risks domain reputation damage worth far more than $0.001
Domain reputation
Protected
One high-bounce campaign can take weeks to recover from
Total verification cost
$300
vs. potential months of inbox placement loss and re-warmup effort

Frequently Asked Questions

How long does bulk email verification take?

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.

What percentage of a typical email list is invalid?

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.

How often should I re-verify my email list?

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.

What file format should I use?

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.

Clean your list in minutes - not days.

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.

AL

Written by

Ayoub Lebda

Founder, BounceZero - Email-infrastructure engineer

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.

Email verification & deliverability explained

Deep-dive guides on how email verification and inbox placement work