Bulk Email Validator – Syntax, MX, Disposable & Typo Check avatar

Bulk Email Validator – Syntax, MX, Disposable & Typo Check

Pricing

from $0.30 / 1,000 email checkeds

Go to Apify Store
Bulk Email Validator – Syntax, MX, Disposable & Typo Check

Bulk Email Validator – Syntax, MX, Disposable & Typo Check

Clean email lists in bulk: RFC syntax, MX / null MX / A-record DNS check, 9,000+ disposable domains, role accounts (info@, admin@), free providers, typo fixes (gmial.com -> gmail.com), normalized address and a 0-100 score. Honest pre-validation: no SMTP mailbox ping. $0.30 per 1,000 emails.

Pricing

from $0.30 / 1,000 email checkeds

Rating

0.0

(0)

Developer

Cemal Atakli

Cemal Atakli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Clean an email list before you send to it or import it. Paste a list, upload a CSV or point the Actor at another Actor's dataset. Each address gets:

  • RFC syntax check (RFC 5321/5322 rules: dots, length limits, allowed characters, reserved domains) with a plain-English reason when it fails
  • Domain DNS check: MX records, null MX detection (RFC 7505, 0 ., "this domain accepts no mail"), non-existent domains (NXDOMAIN), A/AAAA fallback when there is no MX, and a check that the MX hosts resolve
  • Disposable / temporary email detection using 9,000+ domains from the open-source disposable-email-domains list (CC0), with optional live refresh and your own extra domains
  • Typo suggestions: gmial.com → gmail.com, hotmial.com → hotmail.com, yaho.com → yahoo.com, company.con → company.com
  • Role account flag (info@, admin@, sales@, no-reply@...) and free provider flag (Gmail, Yahoo, Outlook, GMX, Yandex, QQ and 280+ more)
  • Normalized address (lowercased, IDN-aware), canonical address (Gmail dots and +tags removed) and the mail provider behind the MX (Google, Microsoft 365, Zoho, Proofpoint...)
  • A final status, valid-format, risky or invalid, plus a 0-100 score and reason codes

It supports international domains (IDN) such as ivan@яндекс.рф or anna@münchen.de, and returns both the Unicode and punycode form.

It costs $0.30 per 1,000 emails. 5,000 emails over ~200 domains take about 4 seconds.

What it does NOT do (please read)

No SMTP mailbox check. This Actor does not connect to the recipient's mail server to ask whether john@company.com exists. Apify (like most clouds) blocks outbound port 25, and SMTP "pinging" is unreliable anyway: catch-all servers, greylisting and anti-harvesting rules make it guess. Every row says so: "smtpCheck": "not_performed".

So valid-format means: the address is well-formed, the domain exists and can receive email, and nothing looks suspicious. It does not prove that the mailbox exists. Use this Actor as cheap pre-validation to remove the obvious junk (typically 5-20% of a scraped or form-collected list), then send, or run only the survivors through a paid SMTP verifier.

Use cases

  • Sign-up and lead form cleanup: find typos (@gmial.com), throwaway addresses (@mailinator.com) and fake domains before they reach your CRM.
  • Before a cold or newsletter campaign: remove invalid and disposable addresses to protect your sender reputation and bounce rate.
  • Scraped contact data: validate the emails field from contact, Google Maps or lead scrapers in one run with datasetId.
  • B2B lead scoring: separate company addresses from free webmail and role inboxes (freeProvider, roleAccount, mailProvider).
  • Cheaper SMTP verification: cut the list first, then send only the valid-format rows to a paid verifier.
  • AI agents: a deterministic tool for "is this email address plausible, and did the user mistype it?"

Input

You can combine the sources below.

FieldWhat it does
emailsList of addresses. Name <a@b.com> and mailto: links are accepted
bulkTextPaste one email per line (or comma/semicolon separated) or a whole CSV/TSV with a header row
sourceFileUrlURL of a CSV/TXT file, for example a Google Sheets "Publish to web" CSV
datasetIdAn Apify dataset ID or name. The email field is auto-detected, and list fields such as emails: [...] are expanded
emailColumnSet this when auto-detection picks the wrong column or field
keepFieldsColumns to copy into each result (for example id, name) so you can join the results back
dedupeRemoves duplicates (case-insensitive, after normalization). On by default; duplicates are not charged
outputFilterall, valid-format, not-invalid, risky or invalid. Hidden rows are not charged
checkDns, checkMxHostTurn the DNS checks on or off
refreshDisposableList, extraDisposableDomainsDownload the newest disposable list at run start and add your own blocklist
dnsServers, dnsTimeoutSecs, dnsConcurrencyDNS tuning. Default: Cloudflare, Google and Quad9 public resolvers, 3 s timeout, 50 domains in parallel
maxEmailsCap for test runs
{
"emails": ["jane.doe@gmail.com", "john.doe@gmial.com", "test@mailinator.com", "someone@example.com", "info@apify.com"],
"dedupe": true,
"outputFilter": "all"
}

Output

One dataset row per email. The Overview table shows the verdict, Why risky / invalid lists the problems with explanations, and Domain & DNS shows the MX details. A SUMMARY record holds the run totals. Export as JSON, CSV or Excel.

{
"input": "john.doe@gmial.com",
"email": "john.doe@gmial.com",
"status": "risky",
"score": 5,
"reasons": ["DISPOSABLE", "TYPO_SUSPECTED", "NO_MX_A_FALLBACK"],
"reason": "Disposable / temporary email domain; Domain looks like a typo of a popular domain; No MX record; ...",
"syntaxValid": true,
"localPart": "john.doe",
"domain": "gmial.com",
"domainAscii": "gmial.com",
"isIdn": false,
"smtputf8": false,
"canonical": "john.doe@gmial.com",
"plusTag": null,
"dnsStatus": "ok",
"domainExists": true,
"mxFound": false,
"mxRecords": [],
"mailProvider": null,
"nullMx": false,
"aRecordFallback": true,
"disposable": true,
"roleAccount": false,
"freeProvider": false,
"typoSuggestion": "john.doe@gmail.com",
"smtpCheck": "not_performed",
"source": "emails",
"rowNumber": 2
}

Status and reason codes

StatusReason codeMeaningScore impact
invalidSYNTAX_INVALIDNot a valid address (the reason text says why)0
invalidDOMAIN_NOT_FOUNDThe domain does not exist (NXDOMAIN)≤ 10
invalidNULL_MXThe domain publishes a null MX (RFC 7505): it accepts no email≤ 10
invalidNO_MAIL_SERVERNo MX and no A/AAAA record≤ 10
invalidMX_HOST_UNRESOLVABLEMX records point to hostnames that do not resolve≤ 10
riskyDISPOSABLETemporary / throwaway email domain−80
riskyTYPO_SUSPECTEDLooks like a typo of a popular domain, see typoSuggestion−60
riskyDNS_TIMEOUT, DNS_ERRORThe domain could not be checked (timeout or SERVFAIL); retry later−45
riskyNO_MX_A_FALLBACKNo MX record; mail would go to the website's server−40
riskyROLE_ACCOUNTShared inbox (info@, sales@, admin@, no-reply@...)−30
riskyDNS_NOT_CHECKEDcheckDns was off−25
riskyUNICODE_LOCAL_PARTNon-ASCII mailbox name, needs SMTPUTF8 support−10
valid-format–Well-formed, domain can receive mail, nothing suspicious100

freeProvider and plusTag are informational and do not lower the score.

Pricing

Pay per event: $0.0003 per email checked ($0.30 per 1,000), plus a tiny start fee ($0.00005). Blank cells, values without an @, removed duplicates and rows hidden by the output filter are not charged. Set a Maximum cost per run and the Actor stops cleanly when it reaches it.

ActorPrice per 1,000 emailsSMTP check
ryanclinton/bulk-email-verifier$5–
This Actor$0.30No (stated up front)

Competitor price from the Apify Store in October 2026; it may change.

FAQ

Why no SMTP check? Outbound port 25 is blocked on Apify and on most cloud providers, and SMTP probing gives false results on catch-all and greylisting servers. We would rather tell you that plainly than sell a guess. Some "SMTP verifier" Actors in the Store have success rates around 50% for exactly this reason.

Is valid-format the same as deliverable? No. It means the address passed every check that can be done without contacting the mailbox. Bounces from deleted mailboxes are still possible.

Why is a typo domain also marked disposable? Some typo domains (like gmial.com) are registered by third parties to catch mistyped mail, and the open disposable list blocks them. Either way, do not send to them; use typoSuggestion.

How fast is it? Each domain is resolved once per run and cached. 5,000 emails over 190 domains took about 4 s in our tests; the offline checks alone run at about 13,000 emails per second. Lists with many unique domains are limited by DNS (about 50 domains in parallel by default).

Is my data sent anywhere? Only the domain names are sent to the DNS resolvers you choose (public resolvers by default). The full addresses never leave the Actor.

Where does the disposable list come from? From the community-maintained disposable-email-domains project, released under CC0 (public domain). A snapshot ships with the Actor; set refreshDisposableList to download the newest version at run start.

Use with AI agents / Apify MCP

The Actor is fast, cheap and deterministic, which makes it a good tool for AI agents. Add it to Claude, Cursor or any MCP client through the Apify MCP server (https://mcp.apify.com?actors=gazidev/email-syntax-mx-validator) and ask, for example, "Check these 200 sign-up emails and list the typos with corrections". You can also call it over the API:

curl -X POST "https://api.apify.com/v2/acts/gazidev~email-syntax-mx-validator/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"emails":["john@gmial.com","test@mailinator.com","ceo@apify.com"]}'

Other Actors by gazidev

Scraped contacts? Pair this Actor with our website contact finder and phone number validator to build clean, enriched lead lists.