Email Verification API — Bulk Deliverability & MX Checks
Pricing
from $20.00 / 1,000 email verifications
Email Verification API — Bulk Deliverability & MX Checks
Verify email addresses in bulk with syntax validation and MX-record checks, detect disposable and role addresses, and clean your email lists. Reduce bounce rates and improve sender reputation. No API key. Pay per record.
Pricing
from $20.00 / 1,000 email verifications
Rating
0.0
(0)
Developer
NexGenData
Maintained by CommunityActor stats
0
Bookmarked
41
Total users
4
Monthly active users
6 days ago
Last modified
Categories
Share
✅ Email Verification Tool — syntax + DNS MX checking, no subscription
Bulk-check email addresses for syntax validity and DNS MX records, with disposable-domain, free-provider and role-account flags. Pay per result, no monthly plan, no API key beyond your Apify token.
What this Actor checks — and what it does not
| Check | Done? | How |
|---|---|---|
| Address syntax | ✅ | RFC-shaped pattern, length-capped local part and domain labels |
| Domain accepts mail | ✅ | live DNS MX record lookup at run time |
| Disposable / temp-mail domain | ✅ | matched against a curated list of 142 known throwaway domains |
| Free provider (gmail, outlook, …) | ✅ | matched against a curated list of 32 consumer providers |
| Role account (info@, sales@, …) | ✅ | matched against a list of 45 function-address local parts |
| Mailbox actually exists | ❌ | not checked |
| SMTP / RCPT TO probe | ❌ | not performed |
| Catch-all detection | ❌ | not performed |
| Spam-trap / bounce-history scoring | ❌ | not performed |
This Actor performs no SMTP connection of any kind. A status of valid means "well-formed address at a domain that is configured to receive mail" — not "this mailbox exists". Every row carries "verificationMethod": "syntax+dns_mx" so the limitation travels with the data.
That distinction matters when you compare it to ZeroBounce, NeverBounce or Kickbox: those run SMTP-level checks that this Actor does not. Use this when you want to strip malformed addresses, dead domains, throwaway domains and role accounts out of a list cheaply and without a subscription — the bulk of what makes a list bounce.
Pricing — the live, current prices
| Event | Price |
|---|---|
| Actor start | $0.00005 (per GB of run memory, minimum one) |
| Result row in the dataset | $0.02 |
One address that gets a verdict = one row = $0.02.
Worked examples at the live price:
- 1,000-address list = $0.00005 + (1,000 × $0.02) = $20.00005
- 500 signup checks a day = $10.00005/day
You are not charged for:
- an address whose domain's DNS lookup never completed (timeout / SERVFAIL) — it produces no row
- retries and failed sub-requests — those are absorbed by the platform
A malformed address and a dead domain are real verdicts, so they do produce a row and are charged.
What you get per address
| Field | Meaning |
|---|---|
email | the address, lowercased |
status | valid / risky / invalid |
reason | accepted / role / disposable / no_mx / syntax |
isValid | boolean shorthand: MX present and not a disposable domain |
syntaxValid | address is well-formed |
mxValid | the domain has MX records |
domain, localPart (alias local_part) | split address parts |
mxRecords | up to 5 {priority, server} entries, lowest priority first |
mx_records | the same servers as a flat list of hostnames |
isDisposable / is_disposable | throwaway domain |
isFreeProvider / is_free_provider | consumer mail provider |
isRoleAccount / is_role_account | function address rather than a person |
verificationMethod | always syntax+dns_mx |
checkedAt | UTC timestamp of the check |
Both the camelCase and snake_case spellings are present in every row, so either naming convention works downstream.
Input
| Parameter | Type | Description |
|---|---|---|
emails | string / array | Addresses, one per line or comma-separated. Aliases: email, emailList, addresses. |
singleEmail | string | A single address, for one-off API calls. |
Quick start (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("nexgendata/email-verification-tool").call(run_input={"emails": "jane.doe@stripe.com\ninfo@apify.com\nuser@mailinator.com\nnot-an-email"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["email"], item["status"], item["reason"])
Example row (real shape, from a live run — the MX records below were resolved live):
{"email": "jane.doe@stripe.com","status": "valid","reason": "accepted","isValid": true,"syntaxValid": true,"mxValid": true,"domain": "stripe.com","localPart": "jane.doe","local_part": "jane.doe","mxRecords": [{"priority": 10, "server": "aspmx.l.google.com"},{"priority": 20, "server": "alt1.aspmx.l.google.com"}],"mx_records": ["aspmx.l.google.com", "alt1.aspmx.l.google.com"],"isDisposable": false,"isFreeProvider": false,"isRoleAccount": false,"verificationMethod": "syntax+dns_mx","checkedAt": "2026-09-05T12:47:39Z"}
Verdict table
| Address | Status | Reason | Why |
|---|---|---|---|
jane.doe@acme.com | valid | accepted | well-formed, domain has MX |
info@acme.com | risky | role | function address, not a person |
user@mailinator.com | invalid | disposable | throwaway domain (it does have MX) |
user@nonexistentdomain-zzz-12345.com | invalid | no_mx | domain resolves to no mail server |
not-an-email | invalid | syntax | malformed |
someone@gmail.com | valid | accepted | valid; also flagged isFreeProvider |
How the run ends
The Actor always says what happened, in plain English, in the run's status message:
- Rows returned — "Checked N of M address(es) by syntax and DNS MX record (no SMTP probe): X valid, Y risky, Z invalid…", plus how many were skipped because their DNS lookup did not complete. Only delivered rows were charged.
- Resolver dead — if DNS did not answer for any domain in the list, the run fails with a message naming the cause. Nothing was charged, so a broken resolver can never masquerade as a clean list.
- No input — the run succeeds with 0 rows and names the fields to supply (
emails/singleEmail). Nothing was charged. - Time limit — the run stops cleanly and says it stopped early at the run time limit; only rows already delivered were charged.
Use cases
- Cold-email hygiene — strip malformed addresses, dead domains and throwaways before a campaign
- CRM cleanup — bulk-check existing contacts and quarantine the ones with no mail server
- Signup-form validation — reject typos and disposable domains at registration, via
/run-sync-get-dataset-items - Lead-list QA — sanity-check a purchased or scraped list before handing it to sales
- Fraud / abuse triage — flag disposable and role-account signups for review
FAQ
Q: Is this the same as ZeroBounce / NeverBounce / Kickbox? A: No. Those perform SMTP-level mailbox checks. This Actor does syntax + DNS MX only, and says so in every row. It removes the majority of hard-bounce causes without a subscription, but it cannot tell you whether an individual mailbox exists.
Q: Why is a valid-looking address marked risky?
A: It is a role account (info@, sales@, support@…). Those deliver, but they are usually poor outbound targets and are more likely to mark mail as spam.
Q: Why did an address get no row at all? A: Its domain's DNS lookup never completed. That is not a verdict, so it is not delivered and not charged. The status message counts these.
Q: How fresh is the data? A: MX records are resolved live at run time.
Q: GDPR / CCPA? A: The check is metadata about an address's mail configuration. You are the data controller for downstream outreach.
Related NexGenData Actors
| Use case | Actor |
|---|---|
| Extract emails from websites | website-email-extractor |
| Contact info scraper (emails + phones + socials) | contact-info-scraper |
| Find emails on a domain | company-email-finder |
| Company enrichment from domain | company-enrichment-tool |
| Lead-list enricher (CSV in → CSV out) | lead-list-enricher |
Integration surface
Apify console, Apify API (REST + webhooks), Python / JS SDKs, Zapier, Make.com, n8n, MCP, and built-in schedules.
Support
NexGenData ships updates regularly. Bug reports via the Apify console issues tab get a response within 24 hours.
Home: thenextgennexus.com Full catalog: apify.com/nexgendata