Six-stage email verification, explained stage by stage
A verification result is only as useful as the checks behind it. Here is what each stage proves, what it cannot prove, and where the false confidence hides.
Every verification tool returns something like valid, invalid, or risky. Those labels compress a lot of very different evidence, and understanding which stage produced the verdict is what tells you whether to trust it.
Stage 1: syntax
Does the address parse as an address at all? This catches typos, stray whitespace, and the surprisingly common case of two addresses pasted into one cell. It is nearly free and rejects a meaningful slice of any imported CSV.
What it cannot tell you: whether anyone is behind the address. A syntactically perfect address for a domain that does not exist still passes this stage.
Stage 2: domain
Does the domain resolve, and is it registered? Dead domains accumulate in any list older than a few months as companies fold, rebrand, or migrate. This stage removes them before they become bounces.
Stage 3: MX records
A domain can resolve and still be unable to receive mail. MX lookup confirms there is a mail exchanger configured. A domain with no MX record will bounce every message sent to it, regardless of how plausible the local part looks.
Stage 4: catch-all detection
This is the stage that produces most of the false confidence in the industry. A catch-all domain accepts mail for every possible address, so a mailbox probe returns a positive result whether or not the mailbox exists.
If a verifier reports "valid" on a catch-all domain without saying so, it is reporting the domain configuration, not the mailbox. Treat those addresses as unconfirmed.
Stage 5: role addresses
Addresses such as info@, sales@, support@, and admin@ are usually distribution lists rather than people. They are technically deliverable, which is why they pass the earlier stages, and they are disproportionately likely to generate complaints and disproportionately unlikely to reply.
Flagging rather than deleting is the right default here. In some segments a role address is the only reachable contact, and that is a decision for the campaign owner rather than the verifier.
Stage 6: mailbox
The final stage probes whether the specific mailbox exists. Where the receiving server answers honestly, this is the strongest signal available short of sending a real message. Where it does not, which includes most catch-all configurations and several large providers that deliberately obscure this, the result is inconclusive and should be reported as such.
Reading the result
- Valid, non-catch-all, non-role: safe to send.
- Valid on a catch-all domain: unconfirmed. Send in small volumes, or not at all on a new domain.
- Role address: a judgement call about the segment, not a technical failure.
- Invalid at any stage before the mailbox probe: remove it. These are the addresses that generate hard bounces.
The reason to run all six stages rather than one is that they fail differently. A single-stage verifier gives you one label and no way to tell which of these situations you are in.