Email Verifier & Validator for Bulk Email Lists
Pricing
from $0.37 / 1,000 verified emails
Email Verifier & Validator for Bulk Email Lists
Bulk email verification and email list cleaning without sending mail. Checks syntax, live MX/DNS, disposable and role addresses, fixes typos (gmial.com to gmail.com) and labels every email valid, risky, invalid or unknown with a reason.
Pricing
from $0.37 / 1,000 verified emails
Rating
0.0
(0)
Developer
Jason
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
What does Email Verifier & Validator do?

Email Verifier & Validator checks email lists in bulk without sending a single email. For every address it returns a clear status (valid, risky, invalid or unknown), the reason in plain English, a 0-100 score, and the evidence behind it:
- Syntax: RFC length and character rules; malformed strings are skipped for free
- Live DNS / MX check: the domain exists, publishes mail servers, and those servers resolve to a public address
- Null MX detection (RFC 7505): domains like
example.comthat publicly refuse all email - Disposable / throwaway domains: 9,900+ domains (mailinator, guerrillamail, 10minutemail, yopmail ...)
- Role inboxes:
info@,sales@,support@,press@,kontakt@,noreply@... flagged - Free providers: Gmail, Yahoo, Outlook, iCloud, GMX, Proton ... flagged
- Typo fixes:
gmial.com->gmail.com,hotmial.com->hotmail.com,acme.con->acme.comindidYouMean - Gmail username rules: Gmail addresses that cannot exist (illegal characters, too long) are marked invalid
- Same mailbox detection:
j.o.h.n+news@gmail.comandjohn@gmail.comare linked withsameMailboxAs - Mail provider (Google, Microsoft 365, Proofpoint, Mimecast, Zoho ...) and SPF / DMARC presence
Paste a list, or chain it after another Actor: give it the dataset of Website Contact Extractor or any lead scraper and it verifies every email found, keeping sourceWebsite and sourceCompany on each row.
How much does it cost to verify emails?
Pay per result: you pay only for addresses that come back as a result row. Duplicates and values that are not email addresses are free.
| Apify plan | Price per 1,000 emails |
|---|---|
| Free | $0.53 |
| Starter (Bronze) | $0.47 |
| Scale (Silver) | $0.42 |
| Business (Gold and up) | $0.37 |
Plus $0.00005 per run start. No platform usage fees on top. 10,000 emails cost about $5.30 on the Free plan, and the monthly $5 free credit covers roughly 9,000 emails. A run of 1,000 addresses finishes in a few seconds.
Honest about what it does not do
It does not probe individual mailboxes (no SMTP check). Confirming that one specific mailbox exists needs an SMTP conversation on port 25, and Apify, like every major cloud, blocks outbound port 25. We measured it from an Apify run: the MX lookup answered in 6 ms, while port 25 connections to Gmail, iCloud and Zoho mail servers were unreachable or timed out. Tools that promise per-mailbox proof on Apify are sending your list to an outside service.
So valid means: well-formed address, on a domain whose mail servers work, with no risk signal. It is not proof that a person reads that inbox, and every row says so (mailboxChecked: false, catchAll: null). This check removes the bulk of hard bounces (dead domains, no mail servers, typos, throwaway domains) without your list ever leaving Apify.
Statuses and reasons
| status | reason | Meaning |
|---|---|---|
valid | domain_accepts_mail | Well-formed, domain has working mail servers, no risk flags |
valid | role_account | Same, but a shared inbox (info@, sales@ ...) |
risky | possible_typo | Domain looks like a typo of a big provider; see didYouMean |
risky | disposable_domain | Throwaway inbox service |
risky | a_record_only | No MX record; mail falls back to the web server address |
risky | gmail_username_unusually_short | Gmail username under 6 characters (rare legacy accounts) |
invalid | domain_not_found | Domain does not exist |
invalid | no_mail_server | Domain exists but has no mail server |
invalid | domain_accepts_no_mail | Null MX: the domain refuses all email |
invalid | mail_server_unreachable | MX hosts do not resolve to a public address |
invalid | gmail_username_not_allowed | This Gmail address cannot exist |
unknown | dns_error | DNS did not answer in time; retry later (not a bad address) |
Input
{"emails": ["support@github.com", "jane.doe@gmial.com", "test@mailinator.com", "hello@this-domain-does-not-exist-9f3k2.com"],"inputDatasetId": "","emailFields": "","maxEmails": 10000,"includeInvalidSyntax": false,"checkSpfDmarc": true}
emails: one per line;Name <a@b.com>, commas and semicolons are fine.inputDatasetId: verify the emails in another run's dataset. Field names are auto-detected (emails,email,primaryEmail,emailAddress,contactEmail) or set them inemailFields.includeInvalidSyntax: on = strings that contain an @ but are malformed come back asinvalidrows (charged); off (default) = skipped for free and listed in the OUTPUT record.
Output
One row per unique, well-formed address:
{"email": "jane.doe@gmial.com","status": "risky","reason": "possible_typo","reasonText": "The domain looks like a typo of a big provider (see didYouMean).","score": 20,"didYouMean": "jane.doe@gmail.com","domain": "gmial.com","isDisposable": true,"isRoleAccount": false,"isFreeProvider": false,"domainExists": true,"hasMxRecords": false,"mxRecords": [],"mailProvider": null,"hasSpf": false,"hasDmarc": false,"mailboxChecked": false,"catchAll": null,"normalizedMailbox": "janedoe@gmail.com","sameMailboxAs": null,"flags": ["disposable_domain", "possible_typo", "a_record_only"],"checkedAt": "2026-10-20T17:20:00Z"}
The OUTPUT record of each run has the totals per status, duplicates removed, and every skipped (non-email) value with the reason.
Spending limits
If you set a maximum cost per run, the Actor verifies as many addresses as fit and stops cleanly, telling you how many were left out (never charged). If the limit is below the price of one email, nothing is verified and the status message tells you how to raise it.
Tips
- Filter the dataset by
status=validfor sending; reviewrisky; dropinvalid; retryunknown. - Run it on a schedule against fresh lead lists, or via webhook right after your scraper finishes.
- Works with the Apify API, Python and JavaScript clients, Make, Zapier, n8n and the Apify MCP server.
FAQ
Does it send emails? No. Only DNS questions about each domain are asked.
Is it legal? Checking the technical validity of addresses you already hold is routine. How you got the list and what you send is governed by GDPR, CAN-SPAM and local rules.
Can it detect catch-all domains? Not without SMTP access, which Apify blocks, so catchAll is always null rather than a guess.
Found a wrong verdict? Open an issue with the address's domain and we will fix the rule.