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 timeout parameter 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.

API10,000 verificationsBilled onCredit expiryFree credits / test modeSend-tested bounce rate
WizLeads$19.50 pro-rata0.5 credits per email, any resultroll over one billing period500 credits once (1,000 checks)0.59%
Debounce$25every call; catch-all check costs 10none100 credits0.15%
Abstract API$38 pro-rata ($19 a month buys 5,000)every requestper month100 requests a monthnot tested
MillionVerifier$39good and bad onlynone100 credits + test key0.99%
BounceBan$40successful verifications onlyrolls overFree Mode for single checksnot tested
NeverBounce$50one credit per verification, no exception stated12 months10 credits0.56%
Bouncer$60unknowns and duplicates freenone100 credits + sandboxnot tested
Emailable$60unknowns and duplicates refunded on listsnone250 credits + test keysnot tested
Kickbox$70unknowns refunded1 year from purchase100 verifications + sandbox keynot tested
Mailgun$100per validation, no exemption statedper-validation meternone; 5,000 in the $90 Scale plannot tested
AWS SES$100every validationper-validation meternone; 2,500 a month in the Pro plannot tested
ZeroBounce$129 pay as you go; $99 a month on ONEevery call except unknowns2 years after last purchase (accounts after 1 June 2026); never on ONE100 a month + sandbox3.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.com and catch_all@example.com in 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_TEST that "will return random results", plus fixed-result keys.
  • Bouncer lists seven sandbox addresses at sandbox.usebouncer.com "that can be used free of charge".
Bouncer sandbox docs: seven test addresses that can be verified 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.

APIKept validBouncesBounce rateRejected
WizLeads85250.59%148
ZeroBounce888333.72%112
LeadMagic82270.85%178
NeverBounce71140.56%289
MillionVerifier70970.99%291
Debounce67010.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 homepage: Sales Navigator scraping, email enrichment and verification in one tool

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 homepage with its free email verifier box

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 homepage: verified work emails, mobiles and company data through app, API and CLI

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 homepage: email verification service with a signup box

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 homepage: email validation tool for list cleaning

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.