Four results, and unknown is never billed

Every address comes back valid, invalid, catch_all or unknown, with the server's own reply code beside it.

Upload a list to ZapBounce, and every row comes back with one word in the result column. ZapBounce uses four: valid, invalid, catch_all and unknown. Each one answers the same question, which is whether that mailbox exists.

To get the answer, we run our own SMTP check on port 25. We look up the domain's mail server, greet it, name a sender and name your recipient. Then we close the connection before the message stage, so nothing is ever sent and nobody receives anything.

Whatever the server says about your recipient decides the result. A 250 means the mailbox accepted, and a 550 means there's no such user. Every row also carries smtp_code, the literal reply we got, so you can audit our reading of it line by line.

Four results is a deliberate choice. Role, disposable and free-provider are flags beside the result, not results of their own. A role address can still be valid, and a disposable domain can still be catch-all, and you see both facts at once.

What each result tells you to do

Valid: the server accepted the address and the domain rejects made-up names, so the mailbox is real right now. You can send to it, and its reason field reads accepted_email.

Invalid: a definite no. Either the syntax is broken, the domain doesn't exist, there's no mail server, or the server refused this recipient. Remove it before your next send. Its reason field tells you which one, such as mailbox_not_found or no_mail_server.

Catch_all: the server accepted your address and a random one we made up at the same domain. That domain accepts everything, so no SMTP check by anyone confirms the mailbox. Yahoo and AOL domains land here because they answer yes to every probe by policy. Mail these in a smaller, separate send and watch the bounces.

Unknown: the server wouldn't give a straight answer. Its reason field tells you why: greylisted, throttled, probe_blocked, timeout or cannot_verify. Greylisting and throttling clear with time, so a re-check a few hours later often settles it. You're never billed for an unknown.

How the billing rule follows the results

The short version

  • Send to valid, remove invalid, and mail catch_all in a separate, smaller send.
  • Re-check unknowns after a few hours; greylisting and throttling clear with time, and unknowns are free.
  • Read the role and disposable flags alongside the result instead of treating them as verdicts.

Questions people ask

What are the four ZapBounce results?

Valid, invalid, catch_all and unknown. Valid and invalid are definite answers about the mailbox. Catch_all means the domain accepts every address. Unknown means the server wouldn't answer clearly, and it's never billed.

Does ZapBounce send an email to check an address?

No. ZapBounce closes the SMTP connection before the message stage, so no email is delivered and the mailbox owner sees nothing. The check reads only the server's reply to the recipient.

Is a catch_all result billed?

Yes, one credit, because it is a real answer: the domain accepts all mail. We run one random-address probe to find that out and bill it once. Unknown results, duplicates and syntax failures cost nothing.

Why do Yahoo addresses come back catch_all?

Yahoo and AOL accept every recipient during the SMTP check by policy, to stop address harvesting. A made-up address gets the same yes as a real one, so ZapBounce labels those domains catch_all.

What should I do with unknown results?

Re-check them a few hours later. Most unknowns come from greylisting or throttling, which clear with time. The re-check is billed only for the answers it gets, so a second pass costs little.

See both numbers on your own list

100 free checks a month, no card. Addresses we could not get an answer on come back labeled, and we do not bill them.