Docs · Concepts
Results and catch-all
Every check asks the address's own mail server, and the answer says what it said. This page covers what each verdict and status means, how a check works, and why a catch-all domain is never called valid.
Verification verdicts
POST /verify answers with one verdict. The free email verifier on magpiecrm.com gives the same verdicts today.
| Verdict | What it means | What to do |
|---|---|---|
valid | The mail server said the mailbox exists. | Safe to send. |
invalid | The address can't get email: it isn't well formed, its domain takes no email, or the mail server said the mailbox doesn't exist. | Don't send: it will bounce. |
catch_all | The domain accepts every address, so its mail server can't say whether this mailbox exists. | Send with care: it may bounce later. |
risky | The mailbox may exist, but could bounce. | Send with care. |
unknown | No clear answer: the mail server didn't answer in time, or wouldn't say. | Try again later, or send with care. |
The checks
Each answer carries the checks behind the verdict. A check that wasn't run is null.
| Check | What it says |
|---|---|
checks.syntax | The address is well formed. |
checks.domain | The domain exists and has mail servers (its MX records). |
checks.mailbox | What the mail server said: exists (exists), missing (doesn't exist), accepts_all (can't tell: the domain accepts every address), unknown (no clear answer). |
checks.disposable | The address is at a throwaway email service. |
checks.role | It's a shared role address, such as info@ or sales@. |
checks.free | It's at a free email provider, not a company's own domain. |
checks.provider | The mail provider, when it's recognised. |
How an address is checked
Our verification servers look up the domain's mail servers, then start to deliver an email to the address, as any mail server would. The mail server's answer to the recipient says whether the mailbox exists. They stop there, before any message is sent, so the person never receives anything.
jane.smith@northwind.example has a mailbox, the way a sending server would, and hangs up before sending anything.- Find the mail serverOur verification server to DNSAsks
MX northwind.exampleAnswermx.northwind.example - ConnectOur verification server to Company mail serverSendsOpens a connectionReply
220ready - Say helloOur verification server to Company mail serverSends
EHLOReply250hello - Name a senderOur verification server to Company mail serverSends
MAIL FROMReply250OK - Ask about the mailboxOur verification server to Company mail serverSends
RCPT TO:<jane.smith@northwind.example>Reply250mailbox existsor550no such mailbox - Hang upOur verification server to Company mail serverSends
QUITReply221byeNo email is sent. The check stops before
DATA, the command that would carry a message.
Read the code:emailFinder.ts
Try it on an address. This is the free checker that runs on magpiecrm.com, with the same verdicts and checks as POST /verify:
Recorded example: a real result from our free checker on 1 November 2026
The mail server says this mailbox exists. Safe to send.
- Format
- Valid
- Domain takes email
- Yes
- Mailbox
- Exists
- Disposable address
- No
- Role address (info@, sales@)
- No
- Free mailbox provider
- No, a company domain
Checks come from our own servers and our own domain, never yours, and are paced so no mail server is asked too much at once. See Rate limits and pacing.
Catch-all domains
Some domains accept mail for every address, whether or not the mailbox exists. Their mail server says yes to everything, so a yes there proves nothing. Before trusting a yes, the check tests the domain:
- It asks about a made-up address that can't exist.
- If that's accepted, it asks about a second made-up address of a different shape, in a separate session.
- If both are accepted, the domain is catch-all, and the answer is
catch_all, notvalid.
Whether a domain is catch-all is remembered for 30 to 180 days, so it isn't tested on every check.
Sending to catch-all addresses
A catch-all address may work, or may bounce later. MagpieCRM on Magpie Cloud sends unconfirmed addresses in a first batch of up to 50, waits at least an hour, and sends the rest only if under 2% bounced. Doing the same keeps bounces off your domain.
Finder statuses
POST /find works out the likely addresses for a name at a domain, starting with the company's known format, and checks up to 6 with the mail server. It stops at the first one confirmed, and answers with a status:
| Status | What it means |
|---|---|
verified | The company's mail server confirmed the address. It comes back in email. |
catch_all | The domain accepts every address, so no guess can be confirmed there. No email. |
risky | The mail server only gave a risky answer, so nothing was confirmed. No email. |
not_found | Every likely address was rejected, or the domain takes no email. No email. |
unknown | The mail server didn't give a clear answer this time. No email, and trying again later may help. |
Only verified comes with an email, and only a verified find is charged. You never get a guess.
Questions about the APIs? Email pele@magpiecrm.com.