Bulk Email Verifier - Syntax, MX & Disposable
Pricing
from $2.00 / 1,000 results
Bulk Email Verifier - Syntax, MX & Disposable
Verify emails with deterministic checks: syntax, MX records, disposable detection (~7.5K list), role-address + free-provider flags, and SPF/DKIM/DMARC domain health. No live SMTP probing (port 25 blocked on Apify), so mailbox existence stays 'unknown'. No API key needed.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Thirdwatch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
Bulk Email Verifier — Syntax, MX & Disposable
Clean an email list before you send: catch bad syntax, dead domains, disposable/throwaway addresses, role inboxes, and free-provider accounts — and reduce your bounce risk.
⚠️ Honest scope — read this first
This actor checks the things that can be confirmed reliably without sending mail. It does NOT confirm that a specific mailbox exists.
It reliably tells you:
- Is the address well-formed (valid syntax)?
- Can the domain receive mail at all (does it publish mail-exchange records)?
- Is it a disposable / throwaway domain?
- Is it a role address (
info@,sales@,support@)? - Is it a free consumer provider (Gmail, Yahoo, Outlook)?
- Does the domain publish sender-authentication records (SPF / DKIM / DMARC)?
It cannot tell you whether one exact mailbox (jane@acme.com) is live, full, or will hard-bounce — confirming that requires a live mailbox handshake that is not available on this platform. So the mailboxExists field always stays unknown.
A valid result therefore means well-formed + the domain can receive mail + no red flags — it is not a guarantee that the address is deliverable, and we never claim "verified deliverable" or "guaranteed valid." Use this as a high-quality list-hygiene filter that removes the obvious garbage (bad syntax, dead domains, disposables, role inboxes) before your campaign goes out, so your bounce rate and spam score stay low.
What you get
For every email in your list you get a clear status (valid / invalid / risky / unknown), the individual signals behind that status, a confidence score, and a plain-English reason. Domain checks are reused per domain within a run, so a list of 1,000 emails that spans only 50 unique domains stays fast and cheap. No account, no API key, no setup.
Output fields
| Field | Type | Description |
|---|---|---|
email | string | The input address (as provided) |
status | string | valid, invalid, risky, or unknown |
syntaxValid | boolean | Address is well-formed |
mxFound | boolean | Domain can receive mail |
mxHost | string | Primary mail host for the domain, if any |
isDisposable | boolean | Domain is a known disposable / throwaway provider |
isRole | boolean | Address is a role inbox (info, sales, support, …) |
isFreeProvider | boolean | Domain is a free consumer mailbox (Gmail, Yahoo, …) |
domainHealth.spf | boolean | Domain publishes an SPF record |
domainHealth.dkim | boolean | A DKIM key was found (best-effort) |
domainHealth.dmarc | boolean | Domain publishes a DMARC record |
smtpCheck | string | Always blocked — live mailbox probing is not available here |
mailboxExists | string | Always unknown — see honest-scope note above |
confidence | number | 0–100 confidence in the status |
reason | string | Human-readable explanation of the classification |
How status is decided
| status | When |
|---|---|
invalid | Bad syntax, or the domain cannot receive mail |
risky | Domain works but there's a quality flag: disposable domain or a role address |
valid | Valid syntax + domain can receive mail + no red flags (mailbox existence still not confirmed) |
unknown | Reserved for cases that genuinely cannot be determined (e.g. a lookup error) |
Example output
{"email": "info@example.com","status": "risky","syntaxValid": true,"mxFound": true,"mxHost": "mx.example.com","isDisposable": false,"isRole": true,"isFreeProvider": false,"domainHealth": { "spf": true, "dkim": false, "dmarc": true },"smtpCheck": "blocked","mailboxExists": "unknown","confidence": 55,"reason": "Role-based address (not a personal mailbox)"}
Input parameters
| Parameter | Required | Description |
|---|---|---|
emails | Yes | List of email addresses to verify. You can also paste comma- or newline-separated emails into a single entry. |
checkDomainHealth | No | When enabled (default), checks SPF / DKIM / DMARC for each unique domain. Disable to run faster. |
deep | No | Placeholder for future deep mailbox verification. Has no effect today — mailboxExists stays unknown regardless. Default off. |
Example input:
{"emails": ["founder@stripe.com","info@example.com","test@gmail.com","hello@mailinator.com","not-an-email"],"checkDomainHealth": true}
Use cases
- Growth / cold-outreach teams: strip disposables, dead domains, and obvious role inboxes before a send so your bounce rate and spam score stay low.
- Revenue / sales ops: clean scraped or purchased lead lists on import — flag free-provider and role addresses before they hit the CRM, and re-check stored contacts for domains that no longer accept mail.
- Email marketers: pre-screen newsletter and campaign lists to protect sender reputation, and audit which sender domains publish SPF / DKIM / DMARC before a big send.
- Product / forms teams: catch typo'd and throwaway signups during list cleanup without ever sending an email.
Limitations
- Mailbox existence is never confirmed.
mailboxExistsis alwaysunknown. This is a list-hygiene / bounce-risk-reduction tool, not a guarantee of deliverability — it removes obvious bad addresses, it does not promise the rest are live. - DKIM detection is best-effort. DKIM keys live under sender-specific names that can't always be discovered automatically, so a
falsedoes not prove DKIM is unconfigured. - Catch-all domains can't be distinguished from real mailboxes, so a
validon a catch-all domain still can't confirm the individual person. - Transient network hiccups can occasionally cause a known-good domain to report no mail records; re-run if that happens.
- The disposable blocklist is community-maintained and updated periodically, so a brand-new throwaway domain may not be listed yet.
Compared to alternatives
The most comparable option on the Apify Store is ryanclinton/bulk-email-verifier. The key difference is honesty about what each check can and can't prove.
| Bulk Email Verifier (Thirdwatch) | ryanclinton/bulk-email-verifier | |
|---|---|---|
| Syntax, mail-domain, disposable, role, free-provider checks | Yes | Yes |
| SPF / DKIM / DMARC domain health | Yes | Limited / not surfaced |
| Honest about deterministic vs. mailbox-dependent signals | Yes — mailboxExists clearly reported as unknown | Often implies full "deliverability" without separating what's actually confirmed |
| Hidden third-party verification relays / surprise add-on charges | None | Some verifiers route to external relays you don't see |
We don't dress up domain-level signals as mailbox-level guarantees, and there are no hidden relays or surprise charges. You get exactly the deterministic checks described above, clearly labelled, so you know precisely what a valid does and doesn't mean.
FAQ
Does this confirm an email is real / will receive mail?
No. It confirms the address is well-formed and the domain can receive mail, and it flags quality risks. Confirming one specific mailbox would require a live mailbox handshake that isn't available here, so mailboxExists stays unknown. See the honest-scope note at the top.
Why is mailboxExists always unknown?
Because we never connect to the recipient's mail server to probe an individual inbox. That's an intentional, honest limitation — we report what we can actually confirm and nothing more.
Can I verify thousands of emails cheaply? Yes — domain lookups are reused within a run, so cost scales with the number of unique domains, not the number of emails.
What's the difference between risky and invalid?
invalid = deterministically undeliverable (bad syntax, or the domain can't receive mail). risky = the domain works but there's a quality flag (disposable or role address) you probably want to review before sending.
Support and custom builds
Need a deeper mailbox-verification tier, catch-all detection, bounce-list integration, or scheduled re-verification? Contact Thirdwatch at thirdwatch.dev or through the Apify actor support channel.
Last verified: 2026-06