We tell you what we can't verify.

Every verifier advertises one number. It's always measured after the hard addresses have been dropped. We publish both halves: how much of your list we reached a verdict on, and how right those verdicts were.

Runs the syntax, disposable and role checks in your browser. Nothing is sent anywhere, and the SMTP answer needs an API key.

Building it into a product? Get an API key

How a typical B2B list breaks down

valid
71,40271.4%
invalid
12,88112.9%
catch-all
9,7309.7%
unknown
5,9876.0%

Unknown means the server would not give a straight answer. We report it, and we do not bill it.

An example of the shape, not a measured result. Our own benchmark publishes in full, including where we lose.

free checks a monthNo card, and it renews every month.
100
for an unknownAddresses we could not get an answer on are labeled and never billed.
$0
for 1,000 checksPay as you go. Credits do not expire.
$5
per address at volumeAt 1,000,000 credits.
$0.00095

Where the 99% goes

ZeroBounce publishes 99.6%. NeverBounce says 99.9%. Clearout says 99.73%. Hunter ran 40,000 verifications across the field and measured 63% to 70%.

Both sets of numbers are real. They just count different things. The vendor figure asks how often a returned verdict was correct, and it's calculated after the catch-alls and the servers that refuse to answer have been taken out of the denominator. That's most of the difficulty on a B2B list.

What gets measuredTypical vendor claimWhat it leaves out
Accuracy of returned verdicts99%+Every address the verifier declined to judge
Share of the list judged at allRarely publishedCatch-all domains, Yahoo, throttled servers
Independent field benchmark63–70%Nothing — it counts the whole list

Vendor figures checked September 2026 on each company's own pricing page. Field benchmark: Hunter's published 40,000-verification test.

How a check actually runs

No message is ever sent to the address. The connection closes before the point where mail would be delivered.

  1. Syntax and domain

    We parse the address, then look up the domain's MX records. No mail exchanger and no fallback means nothing can be delivered there, and we stop.

  2. The SMTP conversation

    We open a connection, greet the server, name a sender, then ask about the recipient with RCPT TO. Its answer to that one command is the whole test.

  3. Read the response code

    250 accepted. 550 no such user. A 4xx usually means greylisting rather than a bad address, which is why a single-shot verifier misreads it.

  4. Test for catch-all, then quit

    We ask about an address that cannot exist. If the server accepts that too, the domain takes anything and we label it catch-all rather than valid.

One call, and the answer it returns

Shell
curl -s -X POST "https://api.zapbounce.com/v1/verify" \
  -H "Authorization: Bearer $ZAPBOUNCE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"ada@example.com"}'

{
  "email": "ada@example.com",
  "result": "catch_all",
  "reason": "accept_all_domain",
  "domain": "example.com",
  "mx_found": true,
  "mx_host": "mx1.example.com",
  "smtp_code": "250",
  "role": false,
  "disposable": false,
  "free_provider": false,
  "did_you_mean": null,
  "billed": true,
  "checked_at": "2026-09-18T10:02:41Z"
}

Every response names the result, the reason behind it, and whether it was billed.

The server's answer decides the verdict

A verifier is only as good as its reading of the response code, and most of the disagreement between vendors starts right here.

We read the code the way a mail server means it, which is the subject of the result codes reference.

  • A 4xx is a server asking for patience. It says nothing about whether the address exists.
  • A 250 from a domain that accepts everything proves nothing, so it is labeled catch-all.
  • A refusal to answer is reported as unknown, and it costs you nothing.
CodeWhat the server meansHow we score it
250Recipient acceptedvalid
550No such userinvalid
250 to anythingDomain accepts every recipientcatch-all
421 / 450Throttled or greylistedunknown

Pricing without the asterisk

Credits don't expire. Duplicates aren't counted twice. Unknowns aren't billed at all. A credit buys one definite answer: valid, invalid or catch-all.

CreditsPricePer address
1,000$5$0.00500
10,000$25$0.00250
50,000$89$0.00178
100,000$139$0.00139
500,000$549$0.00110
1,000,000$949$0.00095

Free tier: 100 credits every month, no card. Kickbox and Hunter expire unused credits after twelve months; ours stay until you spend them.

What no verifier can do

Questions we get asked

Does verifying send an email to the address?

No. We close the connection after asking about the recipient and before the stage where a message body would be transmitted. The mailbox owner sees nothing.

Why do two verifiers disagree about the same address?

Usually because one of them guessed. Catch-all domains and throttled servers give ambiguous answers, and vendors differ in whether they resolve that to valid, to risky, or to an honest unknown.

What bounce rate should I be aiming for?

Under 2% is healthy and over 5% puts your sending reputation at risk. Cleaning a list moves the number, but so does how you collected the addresses in the first place.

Do you keep my list?

Retention settings and deletion are covered on the security page, and you can delete an upload from the API.

Can ChatGPT verify an email address?

No. A language model has no way to open an SMTP connection to the receiving server, so any verdict it offers is a guess about the format of the string.

Run a hundred addresses through it

Free every month, no card, and the unknowns come back labeled.