Email List Checker: Syntax, MX & Disposable Domains avatar

Email List Checker: Syntax, MX & Disposable Domains

Pricing

from $2.00 / 1,000 email checkeds

Go to Apify Store
Email List Checker: Syntax, MX & Disposable Domains

Email List Checker: Syntax, MX & Disposable Domains

Check email lists in bulk for bad syntax, missing MX records, disposable domains and role addresses (info@, sales@). Adds a catch-all heuristic and a 0-100 score per address. No mailbox-level check: it does not confirm an address exists. Pay per email.

Pricing

from $2.00 / 1,000 email checkeds

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

7 days ago

Last modified

Share

Email List Checker: Syntax, MX, Disposable and Role Addresses

Check a list of email addresses in bulk for bad syntax, missing MX records, disposable-mail domains and role addresses such as info@ or sales@. Each address gets a status (ok, risky, invalid), a catch-all guess and a 0-100 score you can sort a CRM export by. Use it to clean a list before outreach and to flag the addresses that need a second look.

This actor does not do a mailbox-level SMTP check. It never contacts the recipient's mail server, so it cannot tell you whether a particular mailbox exists or whether a message will be delivered. It is a syntax, MX, disposable-domain, role-address and catch-all-heuristic checker.

What you can do with it

  • Drop addresses with broken syntax or domains that have no MX records before you send.
  • Flag disposable-mail domains in sign-up lists and lead exports.
  • Separate role addresses (info@, support@) from personal ones.
  • Spot domains whose mail host looks like shared web hosting, where catch-all setups are common.
  • Join results back to your own records with a company_id that is echoed on every row.

What each check does

CheckMeaning
SyntaxPattern check with extra rules: one @, no .., no leading or trailing dot in the local part, length limits, a top-level domain of 2 or more letters.
MX recordsThe domain's DNS MX records. mx_ok is true when at least one MX host is returned. A "null MX" (a single .) counts as none.
MX providerName derived from the MX host: google_workspace, microsoft_365, zoho, mailgun, sendgrid, amazon_ses, ionos, yandex, mail_ru, mimecast, proofpoint, fastmail, yahoo, or other.
DisposableThe domain, or a parent domain, is on the bundled list of disposable-mail services.
Role addressThe part before the @ is exactly one of: info, contact, hello, sales, support, admin, hr, jobs, careers, noreply, no-reply, team, office, kontakt, marketing, billing, webmaster, postmaster, abuse.
Catch-all (heuristic)A guess from the MX host name, never a test. Hosts of known mail providers give unknown. Hosts that look like shared web hosting give likely. The value is never no.

How the checks combine into status:

  • invalid: bad syntax, no MX records, or a disposable domain.
  • risky: a role address, or a likely catch-all.
  • ok: none of the checks flagged the address. This does not mean the mailbox exists.

Input

FieldTypeDescriptionDefault
emailsstring[]Email addresses to check. A single string, or several separated by commas or new lines, also works.five sample addresses when both fields are missing
companiesobject[]Entries of { "company_id": "...", "emails": [...] }. The company_id is echoed on every output row.none

Both fields can be used together. Addresses are trimmed and de-duplicated (same company and same address, ignoring case). An explicit empty list checks nothing and charges nothing.

Flat list:

{
"emails": ["jane.doe@gmail.com", "info@apify.com", "throwaway@mailinator.com"]
}

With a company_id for join-back:

{
"companies": [
{ "company_id": "acme-42", "emails": ["ceo@apify.com", "info@apify.com"] }
]
}

Output

One row per address, in input order. Fields:

FieldDescription
company_idEchoed from companies. Left out when the address came from emails.
emailThe address as checked (trimmed).
statusok, risky or invalid (see above).
syntax_okTrue when the address passes the syntax check.
mx_okTrue when the domain has at least one MX record.
mx_providerProvider name derived from the MX host. Left out when mx_ok is false.
disposableTrue when the domain is on the disposable list.
role_accountTrue when the local part is a role name.
catch_alllikely or unknown. A heuristic from the MX host name.
catch_all_methodAlways heuristic: the mail server is not contacted.
score0-100 for sorting a list, not a probability of delivery. invalid is 0 to 15, risky 40 to 55, ok 85 to 95.
checked_atISO 8601 timestamp of the check.

Sample row:

{
"company_id": "acme-42",
"email": "info@apify.com",
"status": "risky",
"syntax_ok": true,
"mx_ok": true,
"mx_provider": "google_workspace",
"disposable": false,
"role_account": true,
"catch_all": "unknown",
"catch_all_method": "heuristic",
"score": 55,
"checked_at": "2026-10-26T10:30:00Z"
}

Pricing

Pay per event:

EventWhen it is chargedPrice
enrichment-startOnce per run, after the first row has been delivered. A run that delivers nothing is not charged.$0.001
enrichment-resultPer checked address delivered to the dataset.$0.002

1,000 addresses cost $0.001 + 1,000 x $0.002 = $2.001. If you set a maximum total charge for the run, the actor stops delivering rows when the next row would exceed it and the run ends with the status "Stopped at the max charge limit. N emails delivered."

Use with AI agents (MCP)

Connect this actor to an MCP-compatible client such as Claude Desktop, Cursor or VS Code.

{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com/?tools=santamaria-automations/email-verifier",
"--header",
"Authorization: Bearer <YOUR_API_TOKEN>"
]
}
}
}

Example prompt: "Use email-verifier to check these 200 addresses and give me the ones with status ok."

FAQ

Does it tell me whether a mailbox exists? No. There is no mailbox-level SMTP check. ok means no check flagged the address, not that it will receive mail.

Why is catch_all never no? The mail server is not asked, so a catch-all setup can be suspected but not ruled out. likely is a guess from the MX host name.

Why is a typo domain like gnail.com marked ok? If the domain has MX records and is not disposable, no check flags it. Typo domains are not detected.

Why is example.com invalid? It publishes a null MX, which means it does not receive mail.

Can I stop at a budget? Yes, set a maximum total charge on the run. Rows stop at the limit and the status message says how many were delivered.

Support

Questions or a bad result? Open an issue from the Issues tab of this actor and include the run link.