Verification that explains itself
Every address gets a confidence level, reason codes, and a Pre-Send Decision (send, review, or suppress) before it reaches your list.
mailbox_not_foundMailbox not foundWhat this means
The mail server confirmed no mailbox exists at this address.
catch_all_domainCatch-all domainWhat this means
The domain accepts mail for any local part, so a specific mailbox could not be confirmed. Confidence is reduced instead of rounded up to valid.
role_based_addressRole-based addressWhat this means
A shared mailbox (e.g. info@, support@) rather than an individual inbox — engagement typically differs from personal addresses.
The problem with a single valid/invalid label
Most verification tools collapse everything they observe about an address into one word: valid or invalid. That label hides the difference between a mailbox that clearly exists, a catch-all domain that accepts anything, and a role address like support@ that technically works but behaves differently in a campaign. Treating all three the same way is how clean-looking lists still produce bounces, spam complaints, and skewed engagement metrics.
Email Verification is built around a different unit of output: a confidence level plus the reason codes that produced it, rolled up into a Pre-Send Decision your team or your policy engine can act on.
How verification works
- Syntax and format. The address is checked against RFC-shaped rules before anything else. Malformed input is rejected immediately.
- Domain and MX posture. We resolve the domain’s mail exchangers and note whether the domain is configured to accept mail at all.
- Mailbox signals. Where the mail server allows it, we check whether the specific mailbox appears to exist, without exposing raw SMTP transcripts on this page.
- Confidence and reason codes. Every observation from the steps above is attached to the result as a reason code (
catch_all_domain,role_based_address,disposable_domain,mx_missing, and others) and rolled into a confidence level. - Pre-Send Decision. Confidence, reason codes, and your account’s policy combine into a recommendation: send, review, or suppress.
The API and the dashboard use the same underlying result shape, so a decision made by a teammate reviewing a list in the UI matches what your integration receives from the endpoint.
Confidence, not a coin flip
A binary checker has to force every address into one of two buckets, even the ones it genuinely cannot resolve. We treat “we don’t know” as a legitimate outcome. When mailbox-level signals are unavailable or ambiguous, the result reflects that with a lower confidence level and the reason codes that explain why, rather than guessing and calling it valid.
Honest about catch-all and major webmail domains
Catch-all domains and large webmail providers are two of the most common sources of false confidence in verification tooling. A catch-all domain will accept a lookup for almost any local part, which means a naive checker can report “valid” for an address that was never actually confirmed to exist. We flag these cases explicitly with reason codes instead of implying certainty we don’t have. The goal is an accurate signal, not a reassuring one.
Built for pre-send workflows
Whether you verify one address before a transactional send or run a Pre-Send Decision as a gate ahead of a campaign export, the contract stays the same across the API and the dashboard: confidence, reason codes, and a recommendation, not a bare status you have to interpret on your own.
Reason codes
Every flag this feature can attach to a result, and what it means for your send.
mailbox_not_foundMailbox not foundWhat this means
The mail server confirmed no mailbox exists at this address.
catch_all_domainCatch-all domainWhat this means
The domain accepts mail for any local part, so a specific mailbox could not be confirmed. Confidence is reduced instead of rounded up to valid.
role_based_addressRole-based addressWhat this means
A shared mailbox (e.g. info@, support@) rather than an individual inbox — engagement typically differs from personal addresses.
disposable_domainDisposable domainWhat this means
The domain is a known temporary or single-use email provider, not a long-term mailbox.
mx_missingMX record missingWhat this means
The domain has no mail exchanger configured, so it cannot currently receive mail.
greylistedGreylistedWhat this means
The receiving server deferred the check temporarily — a common, usually benign anti-spam tactic that can require a retry.
What does a "valid" result actually mean?
It means the address passed syntax, domain, and mailbox checks with no risk signals attached. We still attach a confidence level and any relevant reason codes, because "valid" on its own does not tell you whether a domain is catch-all or a role-based address like info@, details that change how you should treat the contact.
How do you handle catch-all domains?
A catch-all domain accepts mail for any local part, so mailbox-level checks cannot confirm a specific address exists. We surface this with the catch_all_domain reason code and a reduced confidence level instead of rounding it up to valid or down to invalid. The decision of whether to send is left to your policy, not hidden inside a single status.
What is a Pre-Send Decision, and how is it different from a status?
A status is a label attached to one address in isolation. A Pre-Send Decision combines the engine observations for that address (mailbox signals, domain posture, reason codes) with your account policy to recommend send, review, or suppress. It is guidance built for the moment before you export a list, not a replacement for your own judgment.
Do you store the addresses I submit for verification?
Verification requires looking up each address against mail server signals at request time; retention and deletion specifics for uploaded lists are covered in our Privacy Policy, not repeated here to avoid drift between the two documents.
= .+ :
: : . =-+:: .=: : + . .. +
.. : ..--:.+++ = : : +:. .+=.=.=:: +
: -.=+ :-....=:= .- .. : .- -: =
. . +. = - . .:: -::. .:: :.==:.
- . : = : . . : ::-.:.: . +. +
-. == .= :=: . =. .-
: . - - ::. .+= . Spot risky contacts before your next send, not after
Test your list on 1,000 free credits: no card, no commitment, same engine as the playground above.