Email Verifier & Validator for Bulk Email Lists avatar

Email Verifier & Validator for Bulk Email Lists

Pricing

from $0.37 / 1,000 verified emails

Go to Apify Store
Email Verifier & Validator for Bulk Email Lists

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

Jason

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

What does Email Verifier & Validator do?

Email Verifier & Validator for Bulk Email Lists - sample output

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.com that 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.com in didYouMean
  • Gmail username rules: Gmail addresses that cannot exist (illegal characters, too long) are marked invalid
  • Same mailbox detection: j.o.h.n+news@gmail.com and john@gmail.com are linked with sameMailboxAs
  • 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 planPrice 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

statusreasonMeaning
validdomain_accepts_mailWell-formed, domain has working mail servers, no risk flags
validrole_accountSame, but a shared inbox (info@, sales@ ...)
riskypossible_typoDomain looks like a typo of a big provider; see didYouMean
riskydisposable_domainThrowaway inbox service
riskya_record_onlyNo MX record; mail falls back to the web server address
riskygmail_username_unusually_shortGmail username under 6 characters (rare legacy accounts)
invaliddomain_not_foundDomain does not exist
invalidno_mail_serverDomain exists but has no mail server
invaliddomain_accepts_no_mailNull MX: the domain refuses all email
invalidmail_server_unreachableMX hosts do not resolve to a public address
invalidgmail_username_not_allowedThis Gmail address cannot exist
unknowndns_errorDNS 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 in emailFields.
  • includeInvalidSyntax: on = strings that contain an @ but are malformed come back as invalid rows (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 = valid for sending; review risky; drop invalid; retry unknown.
  • 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.