Data quality

How to verify an email before you send

The layers of an email check, what each can and cannot prove, how SMTP behaves, and how to handle deliverable, risky and unknown results with a worked cost.

Updated October 20, 20265 min read

Article

Verifying an address means estimating, before you send, whether a message to it will arrive. That estimate comes in layers, and each layer rules out a different failure. A format check catches typos. A domain check catches dead domains. A mailbox check tries to find out whether the specific inbox exists, and it is the hard one.

This post explains what each layer can and cannot prove, what the SMTP standard actually says about checking a mailbox, and how to treat the results. It ends with a worked cost for a fictional list. Bounces matter because Yahoo asks senders to remove invalid recipients promptly and Google suggests automatically unsubscribing recipients who have multiple bounced messages.

The four layers of a check

The layers run from cheap and certain to expensive and uncertain. Stop a record at the first layer it fails.

What each verification layer can and cannot tell you
LayerWhat it checksWhat it can rule outWhat it cannot tell you
FormatThe address follows the Internet Message FormatTypos, spaces, missing partsWhether the domain or mailbox exists
DomainDNS says the domain exists and has mail serversDead domains, parked domains with no mailWhether any mailbox exists on it
MailboxA mail server is asked whether it will accept the recipientMany addresses that do not existAnything when the server accepts every recipient or hides the answer
Risk signalsLists of disposable domains, role addresses such as info@, and known problem patternsAddresses unlikely to belong to a decision makerWhether a person will want the message

What SMTP says about checking a mailbox

The mailbox layer uses the SMTP conversation. The standard says that when a recipient is known not to be deliverable, the server returns a 550 reply to the RCPT command, typically with a string like no such user. So a 550 at that step is a strong answer.

The reverse is weaker. The same standard notes that in practice some servers do not verify recipients until after the message text has been received, and that an address can look valid yet be impossible to verify in real time, particularly when a server is acting as a mail exchanger for another server or domain. For the VRFY command, it says a server must not return 250 unless it has actually verified the address, and lets a server answer that it cannot verify. The practical reading is that a server that does not reject a recipient has not promised the mailbox exists. A good verifier therefore returns a graded result, not a yes or no.

This is also why we suggest a verification service over a home-made probe: reading ambiguous server answers at scale and turning them into a graded result is the service's whole job.

How to treat each result

Services differ in the labels they use, but the results fall into the same four groups. Decide the rule once, write it down, and apply it to every import.

A handling rule for verification results
Result groupMeaningOur suggested rule
DeliverableThe server accepted the recipientImport and mail normally
UndeliverableThe mailbox or domain does not existDrop the address and suppress it
RiskyAccepts all addresses, disposable domain, role address or a known problem patternLeave out of the main send; mail a small, separate batch only if the account is worth the risk
UnknownThe server did not give a definitive answerHold back and re-check later; do not mail with the main list

A worked cost for a fictional list

Take a fictional list of 25,000 addresses where 8% turn out undeliverable and 6% unknown; both shares are assumptions for the example. That is 2,000 addresses that would bounce and 1,500 you would not know about. Mailed unverified, the bounce rate would be 8% on this list, before counting the unknowns that also bounce.

Several verifiers state on their own pages that unknown results cost nothing: ZeroBounce says it never charges for unknown results, Bouncer says it does not charge for duplicates or unknown results, and Kickbox refunds the credit when it cannot give a definitive result. On that basis the credits actually spent here are 23,500, not 25,000. At Kickbox's list price of $150 for 25,000 verifications, that works out to $6.00 per thousand before the refund. The sum for a smaller 10,000 address list at published list prices is $70 at Kickbox and $60 at Bouncer. Compare these with the cost of a burned sending domain, which you cannot buy back with credits.

Prices change and promotions come and go, so read the vendor's page on the day you buy. The next post in this set compares verification and phone validation prices in more detail.

A routine you can run on every list

Run the same steps every time a list arrives, whether it came from an export, a data provider or a scrape.

  1. Remove exact duplicates and anyone on your suppression list before you spend a credit.
  2. Run the format and domain checks yourself; they are free and fast.
  3. Send the rest to a verification service and store the full result, not just a pass or fail.
  4. Apply the handling rule from the table above and log how many records landed in each group.
  5. Re-verify a list that has sat unused for months, because mailboxes close and people leave jobs.
  6. After the send, put every bounce on the suppression list and compare the real bounce rate with what verification predicted.

Where verification sits in ColdMeetings

ColdMeetings runs email verification inside the import step. Every address passes format, duplicate, region and do-not-contact checks, an earlier-import check and then verification; risky addresses are left out unless you allow them, and an import charges one credit only for each prospect actually imported.

Questions

Can I check one address by sending a test email?
You can, but a bounce arrives after the fact and counts against your sending reputation. Yahoo asks senders to remove invalid recipients promptly, and both providers publish complaint-rate lines, so a test message to an unchecked address is a poor way to find out.
What is a catch-all address?
A domain that accepts mail for any name at the domain, so a mailbox check cannot tell a real person from a made-up name. Verification services usually label these risky or unknown.
  • Deliverability guide8 min read

    Deliverability checklist: auth and lists

    What Gmail and Yahoo ask of senders, how SPF, DKIM and DMARC fit together, and a clean-list routine, with a worked SPF and complaint-rate example.

  • Data quality6 min read

    Email and phone validation APIs compared

    Email verifiers and phone lookup APIs compared on published prices and billing rules, with the per-thousand cost computed and the limits of each tool stated.

  • Deliverability6 min read

    Cold emails landing in spam: find the cause

    Gmail names the reason behind many rejections in an SMTP code. Match the code to its fix, then use per-mailbox rates to find where the problem sits.

Put it to work

Pages in the product and the tools that go with this guide.

Sources

Tell us what you sell and who buys it

What you sell

Who buys it

The button opens a draft in your own mail app. Nothing is sent from this page.

hello@coldmeetings.comEmail us
  • Software companies
  • Agencies
  • Service businesses