How to verify an email list (free checks first)

Most bounces come from problems you can find without sending a single email. Here is what to check, in order.

What each check catches

CheckCatchesFree?
SyntaxMissing @, spaces, double dots, pasted names and bracketsYes
Domain typogmial.com, hotmial.com, yaho.comYes
MX / DNSDomains that don't exist or accept no mail (null MX)Yes
Disposable domainThrowaway inboxes (mailinator and thousands of others)Yes, with a maintained list
Role addressinfo@, admin@, sales@: shared inboxes, often lower engagementYes
Mailbox exists (SMTP)Deleted or mistyped user namesUnreliable, see below

1. One address: check its domain

Paste the address into the free DNS lookup + MX checker. No MX record, a null MX (0 .) or a domain that does not exist means mail to it will bounce.

2. A list: MX check in the shell

With one address per line in emails.txt (Linux or macOS with dig):

while read -r email; do
  domain="${email##*@}"
  mx=$(dig +short MX "$domain")
  if [ -z "$mx" ] || [ "$mx" = "0 ." ]; then echo "$email,no-mail"; else echo "$email,has-mx"; fi
done < emails.txt

The null-MX test matters: example.com publishes an MX record that says "no mail here", and a simple "has an MX record?" test gets it wrong. Domains without MX can in theory receive mail on their A record, but this is rare enough to treat as undeliverable for a mailing list.

3. Why "does the mailbox exist" checks are unreliable

Some verifiers connect to the recipient's mail server and start sending (RCPT TO) without finishing. In practice: Gmail, Outlook and Yahoo accept any address at that stage or block probing, catch-all domains accept everything, greylisting returns temporary errors, and home and cloud connections usually cannot use port 25 at all. Repeated probing can also get your IP blocklisted. Treat "valid" from such checks as "unknown" unless the service explains how it handled these cases.

4. Thousands of addresses in one run

Our Email Validator & MX Record Checker on Apify runs the free checks above on a whole list: RFC syntax, MX/DNS (null MX included), disposable domains, role and free-provider flags and typo suggestions (gmial.com → gmail.com), one row per address as CSV, Excel or JSON. It deliberately does no SMTP probing. Billed per address.

Frequently asked questions

Can I check if an email address exists without sending an email?

Not reliably. You can prove that the domain accepts mail (MX), but the big providers do not reveal whether a mailbox exists. Sending a confirmation email (double opt-in) is the only certain test.

What bounce rate is acceptable?

Keep hard bounces well under 2%. Gmail and Yahoo also require spam complaints under 0.3% for bulk senders. Remove every hard-bounced address immediately.

Should I remove role addresses like info@?

Not automatically. For B2B they may be the right contact, but they are shared inboxes and are more likely to report mail as spam. Flag them and decide per campaign.

Are free email verifiers safe to use?

Check what they do with your list: uploading customer addresses to an unknown service may breach your privacy obligations. Syntax and MX checks can run locally, as shown above.

Written with AI assistance. The shell loop was run on Linux against the three sample addresses shown on 2026-10-01. The Apify tool is ours; the APIs are free to call directly.