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
| Check | Catches | Free? |
|---|---|---|
| Syntax | Missing @, spaces, double dots, pasted names and brackets | Yes |
| Domain typo | gmial.com, hotmial.com, yaho.com | Yes |
| MX / DNS | Domains that don't exist or accept no mail (null MX) | Yes |
| Disposable domain | Throwaway inboxes (mailinator and thousands of others) | Yes, with a maintained list |
| Role address | info@, admin@, sales@: shared inboxes, often lower engagement | Yes |
| Mailbox exists (SMTP) | Deleted or mistyped user names | Unreliable, 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.