Email Validator: Syntax, MX, Disposable & Role Check
Pricing
from $0.50 / 1,000 email checkeds
Email Validator: Syntax, MX, Disposable & Role Check
Bulk email validation without SMTP probing: syntax, MX records via DNS-over-HTTPS, disposable domains, role accounts, free providers, typo suggestions and Gmail normalisation. One row per email.
Pricing
from $0.50 / 1,000 email checkeds
Rating
0.0
(0)
Developer
Ailu Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Email Validator: Bulk Email Syntax, MX Record, Disposable, Role Account and Typo Check (No SMTP)
Clean an email list in bulk before you import it into a CRM or send a campaign. For every address the Actor checks the syntax, looks up the domain's MX records over DNS-over-HTTPS (Cloudflare, with Google Public DNS as fallback), flags disposable domains (about 120,000 known throwaway domains), role accounts (info@, admin@, noreply@ ...), free consumer providers (Gmail, Outlook, Yahoo, iCloud, Proton, GMX, Yandex, Mail.ru, QQ, Naver ...) and likely typos such as hotmial.com with a corrected didYouMean address. It also returns a Gmail-normalised address for de-duplication. The Actor never connects to mail servers and never sends anything, so it is fast, cheap and cannot hurt your sender reputation; rows whose DNS lookup failed are free.
Use cases
- Remove invalid, disposable and mistyped addresses from sign-up forms and lead lists.
- Separate personal addresses from generic role mailboxes before outreach.
- Split B2B leads from free-mailbox (consumer) leads.
- De-duplicate Gmail addresses written with dots or +tags (
J.Doe+promo@gmail.com=jdoe@gmail.com). - Pre-filter a list cheaply before a paid SMTP verification service.
Input
| Field | Default | Meaning |
|---|---|---|
emails | 5 sample addresses (role, Gmail with dots and +tag, disposable, typo, invalid) | Addresses to check, one per line. Case-insensitive duplicates are checked once. |
maxConcurrency | 10 | Addresses checked in parallel. |
maxItems | 1000 | Maximum number of addresses checked in this run. |
Example: { "emails": ["sales@acme.com", "john@gmial.com", "x@mailinator.com"], "maxItems": 5000 }
Output
| Field | Meaning |
|---|---|
id | First 16 hex characters of SHA-1 of the lower-cased address |
email, normalizedEmail | Input and normalised form (lower case; Gmail dots and +tag removed) |
status | valid, risky, invalid or unknown |
reason | Why, e.g. role account, domain does not exist, syntax: consecutive dots in local part |
syntaxValid, domain | Syntax verdict and lower-case domain |
hasMx, mxRecords, hasImplicitMx | MX records (up to 5, preferred first); A/AAAA fallback |
isDisposable, isRoleAccount, isFreeProvider | Flags |
didYouMean | Suggested correction for provider typos |
catchAll | Always null (needs SMTP, see below) |
fetchedAt | Time of the check |
Status rules: invalid = bad syntax, non-existent domain (NXDOMAIN), null MX or neither MX nor A record. risky = deliverable domain but disposable, role account or likely typo. valid = deliverable domain and none of these. unknown = DNS failed on both resolvers (free row).
Sample row:
{"id": "4428a0907a9e828e", "email": "J.Doe+newsletter@Gmail.com", "normalizedEmail": "jdoe@gmail.com","status": "valid", "reason": "MX records found", "syntaxValid": true, "domain": "gmail.com", "hasMx": true,"mxRecords": ["gmail-smtp-in.l.google.com", "alt1.gmail-smtp-in.l.google.com", "alt2.gmail-smtp-in.l.google.com", "alt3.gmail-smtp-in.l.google.com", "alt4.gmail-smtp-in.l.google.com"],"hasImplicitMx": false, "isDisposable": false, "isRoleAccount": false, "isFreeProvider": true, "didYouMean": null, "catchAll": null,"fetchedAt": "2026-11-04T11:37:20.485Z"}
How it works and limits
- No SMTP: port 25 is blocked on Apify and probing mailboxes is abusive, so the Actor cannot tell whether a specific mailbox exists or whether a domain is catch-all (
catchAllis alwaysnull). Avalidaddress can still bounce if the mailbox was deleted. - DNS:
MXquery viacloudflare-dns.com, fallbackdns.googleon HTTP errors or SERVFAIL; when there is no MX,A/AAAAis checked (implicit MX). A single0 .record (RFC 7505 null MX) means the domain accepts no mail. Answers are cached per domain within a run; at most 10 queries per second per resolver. - Syntax covers the common unquoted form (letters, digits and
!#$%&'*+/=?^_{|}~-, Unicode letters allowed). Quoted local parts and IP-literal domains are reported as invalid. - Disposable detection uses the open-source
disposable-email-domainsnpm list (MIT); new throwaway domains appear every day, so coverage is never complete. - Typo suggestions only target well-known consumer providers.
Pricing
Pay per result: $0.50 per 1,000 rows (result event). Platform usage is billed separately by Apify. Removed/free rows are not charged.
Rows with status unknown (DNS failure) are free.
Legal
Not affiliated with Cloudflare, Google or any email provider. Uses the public Cloudflare DNS-over-HTTPS and Google Public DNS JSON APIs only. Data licence/terms: https://developers.cloudflare.com/1.1.1.1/privacy/public-dns-resolver/ and https://developers.google.com/speed/public-dns/terms. Only the domain part of each address is sent to the DNS resolvers. You are responsible for having a lawful basis to process the addresses you check (GDPR, CAN-SPAM).
FAQ
Is "valid" a guarantee of delivery? No. It means the address is well-formed and its domain accepts mail. Only an SMTP check (not done here) or a real send can confirm a mailbox.
Why is support@company.com "risky"? Role mailboxes are shared and often filtered; many outreach tools treat them as risky. Use isRoleAccount to decide yourself.
Why do I get both didYouMean and status risky for a domain with MX records? Typo domains such as hotmial.com often have MX records operated by third parties; mail sent there does not reach the intended person.
How fast is it? Hundreds of addresses per minute; lists with many addresses on the same domains are faster thanks to the DNS cache.