Email List Checker: Syntax, MX & Disposable Domains
Pricing
from $2.00 / 1,000 email checkeds
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
7 days ago
Last modified
Categories
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_idthat is echoed on every row.
What each check does
| Check | Meaning |
|---|---|
| Syntax | Pattern 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 records | The 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 provider | Name derived from the MX host: google_workspace, microsoft_365, zoho, mailgun, sendgrid, amazon_ses, ionos, yandex, mail_ru, mimecast, proofpoint, fastmail, yahoo, or other. |
| Disposable | The domain, or a parent domain, is on the bundled list of disposable-mail services. |
| Role address | The 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 alikelycatch-all.ok: none of the checks flagged the address. This does not mean the mailbox exists.
Input
| Field | Type | Description | Default |
|---|---|---|---|
emails | string[] | 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 |
companies | object[] | 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:
| Field | Description |
|---|---|
company_id | Echoed from companies. Left out when the address came from emails. |
email | The address as checked (trimmed). |
status | ok, risky or invalid (see above). |
syntax_ok | True when the address passes the syntax check. |
mx_ok | True when the domain has at least one MX record. |
mx_provider | Provider name derived from the MX host. Left out when mx_ok is false. |
disposable | True when the domain is on the disposable list. |
role_account | True when the local part is a role name. |
catch_all | likely or unknown. A heuristic from the MX host name. |
catch_all_method | Always heuristic: the mail server is not contacted. |
score | 0-100 for sorting a list, not a probability of delivery. invalid is 0 to 15, risky 40 to 55, ok 85 to 95. |
checked_at | ISO 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:
| Event | When it is charged | Price |
|---|---|---|
enrichment-start | Once per run, after the first row has been delivered. A run that delivers nothing is not charged. | $0.001 |
enrichment-result | Per 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.
Related actors
- Website Email Scraper: pull emails and phones from company websites
- Website Contact Extractor: extract team members and decision-makers
- Google Maps Scraper: find local businesses with contact details
- GBP Completeness Audit: score Google Business Profiles for local SEO leads
Support
Questions or a bad result? Open an issue from the Issues tab of this actor and include the run link.