TL;DR
- Send-tested on our list, cheapest first:
- WizLeads: 0.59% bounce rate, 852 kept, $19.50 per 10,000 pro-rata, billed on every call.
- Debounce: the lowest bounce rate we measured (0.15%), while rejecting 330 addresses; $25.
- MillionVerifier: $39; unknown and catch-all results are free for now, under a programme it can withdraw.
- LeadMagic: an enrichment API with validation; 0.85%; about $49.50 per 10,000 pro-rata.
- NeverBounce: 0.56% while rejecting 289; $50; a
timeoutparameter suits signup forms. - ZeroBounce: kept the most (888) and bounced the most (3.72%); the widest API we read; $129 pay as you go.
- Compared on published prices and docs:
- Reoon: the cheapest price we found, $11.90 per 10,000.
- BounceBan: bills successful verifications only; $40.
- Abstract: $19 a month for 5,000 requests; 3 requests a second.
- Clearout: credits never expire; $58 for 10,000 a month.
- Emailable:
test_keys and 250 free credits; $60. - Bouncer: free sandbox addresses; unknowns are free; $60.
- Kickbox: a sandbox key and a clear price ladder; $70; credits expire in a year.
- Hunter: 0.5 of a plan credit per verification; about $122.50 per 10,000 pro-rata.
- Mailgun, AWS SES, SendGrid: no new vendor if you already send there; $100 on Mailgun and SES.
In our send test of 1,000 real-estate emails, five of six verifiers bounced under 1% of the addresses they approved, and ZeroBounce bounced 3.72%. Debounce's 0.15% came with 330 rejections, so check what a tool rejects as well as what it passes.
Three checks settle the choice before you pay: what the API bills on an unknown or catch-all result, whether it gives you a sandbox or free credits, and how it behaves on a B2B list. Several vendors advertise 99%-plus accuracy, and none of the pages we read publishes the list behind it, so we built one.
We pushed 1,000 real-estate decision-maker emails from Apollo (April 2026) through six providers on the same day, sent to every address each one kept, and counted the bounces.
Validation and verification APIs are one product: WizLeads' verify-email endpoint and every other API here run syntax, DNS, MX and SMTP checks behind an HTTP endpoint, so this compares the response contract and the billing rules; for tools without an API, the email verification tools ranking is the roundup.
The comparison
The table is ordered by price. It gives the published cost of 10,000 verifications, the free allowance and the test mode, from each vendor's pricing page or docs. Bounce rate is from our send test. These 12 rows are the APIs we compare on price, billing and test mode; LeadMagic, Reoon, Clearout, Hunter and SendGrid are covered in the sections below.
| API | 10,000 verifications | Billed on | Credit expiry | Free credits / test mode | Send-tested bounce rate |
|---|---|---|---|---|---|
| WizLeads | $19.50 pro-rata | 0.5 credits per email, any result | roll over one billing period | 500 credits once (1,000 checks) | 0.59% |
| Debounce | $25 | every call; catch-all check costs 10 | none | 100 credits | 0.15% |
| Abstract API | $38 pro-rata ($19 a month buys 5,000) | every request | per month | 100 requests a month | not tested |
| MillionVerifier | $39 | good and bad only | none | 100 credits + test key | 0.99% |
| BounceBan | $40 | successful verifications only | rolls over | Free Mode for single checks | not tested |
| NeverBounce | $50 | one credit per verification, no exception stated | 12 months | 10 credits | 0.56% |
| Bouncer | $60 | unknowns and duplicates free | none | 100 credits + sandbox | not tested |
| Emailable | $60 | unknowns and duplicates refunded on lists | none | 250 credits + test keys | not tested |
| Kickbox | $70 | unknowns refunded | 1 year from purchase | 100 verifications + sandbox key | not tested |
| Mailgun | $100 | per validation, no exemption stated | per-validation meter | none; 5,000 in the $90 Scale plan | not tested |
| AWS SES | $100 | every validation | per-validation meter | none; 2,500 a month in the Pro plan | not tested |
| ZeroBounce | $129 pay as you go; $99 a month on ONE | every call except unknowns | 2 years after last purchase (accounts after 1 June 2026); never on ONE | 100 a month + sandbox | 3.72% |
The cheapest row costs about 15% of the dearest for the same unit of work. Among the five send-tested rows, the four cheapest sit within 0.84 points of each other on bounce rate, and only ZeroBounce, the dearest, separates.
Test before you pay: sandboxes and free credits
An email verification API sandbox returns scripted or random verdicts, so it works as an email verification testing API for your code path and your bounce handling, never for accuracy. Five vendors document a test path we could read, and all but MillionVerifier say it uses no credits:
- ZeroBounce lists about 30 fixed addresses such as
valid@example.comandcatch_all@example.comin its sandbox docs. Testing with them "will not use any of your credits", though you still send your real key. - Kickbox's Sandbox Mode key returns "deliverable" by default, and local parts such as
rejected-email@force other results. - Emailable's test keys start with
test_and "will not use credits or perform real verifications". - MillionVerifier's developer docs give a shared
API_KEY_FOR_TESTthat "will return random results", plus fixed-result keys. - Bouncer lists seven sandbox addresses at
sandbox.usebouncer.com"that can be used free of charge".

Callbacks. A batch job only finishes when your handler gets the callback, so test that too. ZeroBounce's send-file endpoint takes a return_url. Kickbox's batch call takes an X-Kickbox-Callback header. Emailable's batch call takes a url and resends hourly until it gets a 200, for up to 3 days. NeverBounce's job create takes a callback_url.
We found no sandbox page that says it fires those callbacks, so run a few real credits through a request bin. Emailable's test keys also accept a simulate parameter. WizLeads' API reference documents no callback: you poll GET /tasks/{task_id}.
WizLeads' API reference documents no sandbox, so its 500 free credits are the test budget. To measure accuracy, run 100 addresses from your own list, with known bounce outcomes, through two finalists. The email verification API free tiers we found, each from the vendor's own pricing or product page:
- WizLeads: 500 credits once, which is 1,000 checks at 0.5 each
- Emailable: 250 credits
- Kickbox, Bouncer, MillionVerifier and Debounce: 100 each
- ZeroBounce: 100 a month, on a business or premium domain
- Reoon: 20 a day plus 100 instant credits
- Abstract: 100 requests a month
- Clearout: 100 once
- NeverBounce: 10 on registration, per its billing help
- BounceBan: Free Mode, single checks only
- Hunter: 50 credits a month, which is 100 verifications at 0.5 each, per its pricing page
What "billed on" actually costs you
Vendors split four ways on what a non-answer costs, and on a B2B list that matters more than the sticker price. On the 1,000 Apollo-sourced real-estate contacts we tested, WizLeads flagged 212 addresses (21.2%) as catch-all and 159 (15.9%) as behind a Secure Email Gateway.
Every call billed, or no exemption stated. AWS SES's pricing page charges $0.01 per address validated. Mailgun's pricing page meters validations at $1.20 per 100 for the first 5,000 and $0.80 per 100 for the next 45,000, with no exemption stated. WizLeads charges 0.5 credits on every call, including the misses. NeverBounce's billing help says one credit per verification and states no exception for unknown results.
Unknown free or refunded. ZeroBounce's pricing page says one credit per address verified, with no charge for unknown results or for removing duplicates. Kickbox credits the verification back when it cannot produce a definitive result. Emailable returns unknown and duplicate credits when a list finishes. Bouncer does not charge for duplicates inside a list or for unknown results.
Unknown and catch-all both free. Of the tools here, only MillionVerifier states that it currently extends the exemption to catch-alls. Its Terms call that "a discretionary promotional goodwill programme", so it is a price you can lose. Its help centre withdraws it from accounts whose lists hold an outstandingly large number of unknown or invalid addresses, and names scraped lists as the reason.
Successful verifications only. BounceBan's pricing page bills one credit per successful verification.
On a charge-every-call vendor, a list where a fifth goes unresolved costs about 25% more per resolved verdict than the table suggests (1 / 0.8 = 1.25). Pick the model against your list shape.
The six APIs we send-tested
Same list, same day, same send. Kept valid is how many of the 1,000 each provider passed as mailable, and bounce rate is the bounces we got when we mailed them, divided by the addresses each tool kept, with the full method in the 1,000-address verification benchmark.
| API | Kept valid | Bounces | Bounce rate | Rejected |
|---|---|---|---|---|
| WizLeads | 852 | 5 | 0.59% | 148 |
| ZeroBounce | 888 | 33 | 3.72% | 112 |
| LeadMagic | 822 | 7 | 0.85% | 178 |
| NeverBounce | 711 | 4 | 0.56% | 289 |
| MillionVerifier | 709 | 7 | 0.99% | 291 |
| Debounce | 670 | 1 | 0.15% | 330 |
Debounce rejected 330 addresses, a third of the list. NeverBounce came within 0.03 points of WizLeads while rejecting 141 more. ZeroBounce kept the most and bounced the most. At 1,000 addresses the five low-bounce rows are statistically indistinguishable, and only ZeroBounce's 33 bounces separate.
WizLeads

WizLeads kept 852 addresses and bounced 5. Every catch-all address came back valid or invalid, and ZeroBounce and LeadMagic did the same, so the test does not isolate what kept WizLeads' bounce rate low.
curl -s "https://api.wizleads.io/email/verify-email?email=jane@acme-corp.example" \
-H "x-api-key: $WIZLEADS_API_KEY"The documented 200 response carries four fields: email, status (valid, invalid, unknown or error), provider and catchall (YES, NO or UNKNOWN). On a catch-all domain the flag still reads YES, so branch on status.
Pricing: 0.5 credits for every email processed, whatever the result. The $39 a month Freelancer plan carries 10,000 credits, which is 20,000 verifications, or $19.50 per 10,000 pro-rata.
New accounts get the first month for $1, then 20% off for the life of the account. For lists, POST /email/verify-email-batch takes a CSV upload with a task_name and a column_mapping, and returns a task ID. The limit is 10 calls per second across all endpoints, with a 429 above that.
ZeroBounce

ZeroBounce has the widest surface area of the APIs we read: real-time and batch validators, a four-call file workflow, a greylist endpoint, allowlist and blocklist rules, and the sandbox above. It kept 888 addresses and bounced 33 (3.72%), the worst of the six. ZeroBounce and NeverBounce sit far apart on rejections: NeverBounce rejected 289 and ZeroBounce 112.
Its answer to catch-all domains is Verify+, a free add-on that sends an email to the address and reads the bounce, so verification becomes a send. Scoring a catch-all costs one extra credit.
Pricing: pay as you go from a 2,000-credit minimum, $39 for 2,000, $129 for 10,000 and $649 for 100,000, or $99 a month on ONE for 10,000. Its Terms expire credits two years after your last purchase for customers registering after 1 June 2026, unless ONE is active. The pricing page's "Credits never expire" tooltip limits that label to ONE.
LeadMagic

LeadMagic is an enrichment API with validation attached. It kept 822 addresses and bounced 7, a 0.85% rate.
Pricing: validation costs 0.25 credits from a shared pool, on plans from $99 a month for 5,000 credits, about $49.50 per 10,000 pro-rata. Its pricing page says failed lookups are free and that it charges only when it returns a result. Its Terms of 19 October 2026 defer to the pricing page on what each action costs.
NeverBounce
NeverBounce returns five result codes: valid, invalid, disposable, catchall and unknown. The single-check endpoint takes a timeout parameter that caps how long it chases an address before returning unknown, which suits a signup form. Classification was conservative: a 0.56% bounce rate alongside 289 rejections out of 1,000. Its docs define catchall as Accept-all (Unverifiable), so those addresses come back unresolved.
Pricing, per NeverBounce's pricing page: $8 per 1,000 pay as you go, $50 for 10,000, $400 for 100,000, or $49 a month on the 10,000-per-month subscription. Pay-as-you-go credits expire 12 months after purchase.
MillionVerifier

MillionVerifier charges for good and bad results and nothing else, so unknown and catch-all verdicts currently cost zero. Credits never expire, and 10,000 costs $39 against $449 for a million. Its help page says the refund of your last payment, if hard bounces on a campaign sent within 7 days exceed 4%, covers website uploads and not Single API checks.
Its homepage now advertises "Catch-All Included", advanced catch-all verification at no extra cost. That is MillionVerifier's claim and we have not tested it. In our April run it returned catch_all for 170 addresses.
Its reference page mentions no webhook or callback. In our test it posted a 0.99% bounce rate and rejected 291 addresses. It suits list hygiene at scale better than API calls that must decide on a hard domain.
Debounce

Debounce had the lowest bounce rate we measured, 0.15%, on standard checks (we did not run its paid catch-all check). It is the second cheapest in our table at $25 per 10,000 from a 5,000-credit minimum. It also rejected 330 addresses, more than any other provider, so its bounce rate partly reflects how much it rejected.
Catch-all validation is a separate operation: Debounce's pricing page bills 10 credits against 1 for a standard check, and its help centre says 10 more, 11 in total. The catch-all share of a B2B list costs several times the headline price.
Validation bundled with your sending platform
If you already send through SES, Mailgun or SendGrid, the validation endpoint needs no new vendor, key or DPA.
AWS SES returns HIGH, MEDIUM or LOW confidence verdicts for checks such as MailboxExists, not booleans. At $0.01 per address it costs $100 per 10,000, and the Pro plan includes 2,500 API validations a month.
Mailgun bills validations per 100: $1.20 for the first 5,000, $0.80 for the next 45,000, then $0.50, $0.35 and $0.25. Scale at $90 a month includes 5,000.
Twilio SendGrid limits its Email Address Validation API to Email API Pro and Premier accounts, and its docs say a separate Email Validation API key is required. Its product page shows no per-validation rate.
The case for it is operational: one vendor, one bill, one security review.
Developer-first verifiers we have not send-tested
None of these email verifier APIs has a bounce number, because none entered our benchmark.
Reoon is the cheapest verifier we found at 10,000 checks. Its public product page lists $11.90 for 10,000 credits and $116.40 for 100,000, which undercuts every tested tool, WizLeads included.
Clearout sells credits with no expiry. Its Monthly plan lists $23 a month for 3,000 credits, $58 for 10,000 and $360 for 100,000.
Kickbox publishes the clearest ladder here, $10 per 1,000 rising to $2,999 per million, with unknown results free. Its terms expire credits one year after purchase. At $70 per 10,000 it sits above Emailable and Bouncer at $60.
Emailable does not expire credits, though its terms let it delete accounts inactive for 12 months, credits included. It sells from a 5,000-credit floor at $38, with 10,000 at $60 and a million at $2,100.
Bouncer sells from a 1,000-credit minimum at $8. Credits never expire, and a separate Shield product handles real-time verification on forms.
BounceBan costs $40 per 10,000 pay as you go, and its Free Mode covers single checks.
Abstract API lists real-time and bulk verification, with Starter at $19 a month for 5,000 requests. Every self-serve tier is capped at 3 requests per second, which slows single-call bulk work.
Hunter spends 0.5 of a plan credit per verified email. At $49 a month for 2,000 credits, Starter covers 4,000 verifications, about $122.50 per 10,000 pro-rata, per Hunter's pricing page, in US dollars.
Real-time and bulk are different contracts
A real-time email verification API call is synchronous, and you own the latency. Four calls we made to the WizLeads endpoint returned in 2.2, 2.3, 2.6 and 1.9 seconds. That sample is too small to count as a benchmark, so keep verification out of your submit handler. Fire it on blur with a 400 to 800 ms debounce, set a hard client timeout with a fallback verdict, and cache by lowercased address for a day.
Keep paid keys on your server. If a form must call a public key, put a CAPTCHA in front of it. Emailable limits public keys to 10 unique requests a day per user, and Debounce to 20 a day per IP. Double opt-in proves ownership but sends to every bad address first. A verify-on-blur call catches them before the send.
A bulk email verification API is a job queue: you submit, get an ID, and poll or wait on a callback. Deduplicate before you upload: Bouncer, Emailable, Debounce, ZeroBounce and NeverBounce's Growth plan say duplicates are free, but MillionVerifier bills the same address in two files.
Write the verdict mapping before you write the integration
Provider taxonomies do not agree, so keep them out of your business logic. Normalize every response into buckets you control, and keep the raw payload to trace a bounce to the verdict that let it through.
// One normalizer per provider, four buckets: send, suppress, low_volume, retry.
function fromWizLeads(r) {
if (r.status === "invalid") return "suppress";
if (r.status === "valid") return "send";
return "retry";
}
function fromZeroBounce(r) {
if (["invalid", "spamtrap", "abuse", "do_not_mail"].includes(r.status) || r.sub_status === "toxic") return "suppress";
if (r.status === "valid") return "send";
if (r.status === "catch-all") return "low_volume"; // unresolved, still billed
return "retry";
}
function fromMillionVerifier(r) {
if (r.result === "invalid" || r.result === "disposable") return "suppress";
if (r.result === "ok") return "send";
if (r.result === "catch_all") return "low_volume";
return "retry"; // unknown
}Four rules make that mapping hold up. Treat unknown as a workflow state: a greylisted mailbox is not a dead one, so retry it once or twice over 24 to 72 hours. Re-verify anything older than 30 days before a send. Send nothing to a spamtrap or abuse status, as the code above does.
Route catch-all traffic through a low-volume lane from a warmed sender that stops on the first bounce.