Email Validator & Verifier API | Bulk Email Checker · Apify
Email Risk Validator - Bulk Email Checker & MX Signals avatar

Email Risk Validator - Bulk Email Checker & MX Signals

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Email Risk Validator - Bulk Email Checker & MX Signals

Email Risk Validator - Bulk Email Checker & MX Signals

Bulk email verification for CRM and lead lists. Check syntax, MX, disposable/free/role domains, typo suggestions, and optional SMTP signals. Risk hygiene only — not ownership or inbox-delivery guarantee.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

Validate and clean email lists in bulk — syntax, DNS/MX, disposable and risk signals, optionally deeper SMTP probing — and download the results as Excel, CSV, or JSON.

  • Paste addresses from CRM exports, lead lists, or forms; get one clean row per email.
  • Fast checks by default: syntax (including internationalized addresses), DNS/MX and domain status, disposable / free / role flags, and likely domain-typo suggestions such as gmial.com → gmail.com.
  • Optional SMTP Deep mode probes mailbox acceptance signals (no message is sent) and can detect catch-all domains.
  • Every run writes a RUN_SUMMARY record; a failed input writes ERROR_SUMMARY.
  • Pay per event: $0.0005 per result row on every plan, plus a small $0.005 start fee.

Results are hygiene and risk signals. This Actor does not prove mailbox ownership, marketing consent, or guaranteed inbox delivery.

What does Email Risk Validator do?

Email Risk Validator turns a list of raw email strings into an Apify Dataset of structured validation rows. You paste emails, choose Fast or Deep mode, and cap how many addresses to process; the Actor writes one row per email plus a run-level summary.

  • Fast mode (default, enableSMTP off): syntax validation, DNS/MX lookup and domain status, disposable / free-provider / role-account flags, typo suggestion, risk level with reasons and a confidence score.
  • SMTP Deep mode (enableSMTP on): additionally probes RCPT acceptance — accepted, rejected, catch_all, temp_error, blocked or timeout — and with checkCatchAll detects catch-all domains. No email body is ever sent.
  • Free-plan guard: on the free Apify plan the Actor allows 10 runs and up to 1,000 results per run (a limit set by the Actor developer, not Apify); reaching it finishes the run cleanly with a FREE_TIER_LIMIT status instead of a cryptic error.

No local setup or third-party email-API key is required.

What data can you get from Email Risk Validator?

FieldDescriptionExample
inputThe email string as you pasted ituser@mailinator.com
inputIndexPosition of the input in your list0
emailThe address that was checkeduser@mailinator.com
normalizedEmailNormalized form used for checksuser@mailinator.com
localPartPart before the @user
domainDomain partmailinator.com
syntaxValidWhether the address passes syntax rulestrue
validComposite hygiene result — not a delivery or ownership guaranteefalse
domainStatusmx, fallback_a, null_mx, nxdomain, no_mx, temp_error or unknownmx
mxFoundWhether usable MX/A records were foundtrue
mxRecordsMX hostnames returned["mail.mailinator.com"]
disposableDomain is a disposable/temporary mail providertrue
freeProviderDomain is a free webmail providerfalse
roleAccountAddress is a role/generic inbox such as info@false
suggestionLikely correction for a misspelled domainuser@gmail.com
riskLevellow, medium or highhigh
confidenceConfidence score between 0 and 10.55
reasonsCodes explaining the risk level["syntax_ok", "disposable_domain"]
smtpStatusDeep-mode RCPT result; not_checked when SMTP is offnot_checked
catchAllWhether the domain accepts any local part (Deep mode)null
smtpMxHostMX host used for the Deep probenull
smtpCodeSMTP reply code from the Deep probenull
ownershipVerifiedAlways false; this Actor never verifies ownershipfalse
errorPer-row error message when a check failednull
errorCodeMachine-readable error codenull

How to use Email Risk Validator

  1. Open Email Risk Validator in Apify Console (a free Apify account is enough to try it).
  2. Paste addresses into emails — one per line.
  3. Leave enableSMTP off for Fast mode, which is the recommended default for large cleanups.
  4. Set maxResults to a small number such as 5 for your first run.
  5. Click Start and open the Dataset tab when the run finishes.

The emails field is required — an empty or missing list stops the run at once with an input error and charges no result rows. The input form's sample values make a good first run.

Fast mode (default)

Fill emails and keep enableSMTP off. Every listed address is checked for syntax, domain status, disposable/free/role flags and typos. Recommended batch: 100–5,000 emails.

SMTP Deep mode

Turn enableSMTP on for mailbox-acceptance signals, and keep checkCatchAll on to detect catch-all domains. Keep Deep batches small (2–50 emails) — probes are slower and some providers rate-limit or block them; in that case smtpStatus reports the outcome honestly (timeout, blocked, temp_error) and Fast fields are still delivered.

What to fill in

FieldWhat to enterDefault
emailsEmail addresses to validate, up to 100,000Required; form shows samples
maxResultsMaximum rows written to the dataset, up to 100,0001000
enableSMTPtrue to add Deep SMTP probingfalse
checkCatchAlltrue to also detect catch-all domains in Deep modetrue
concurrencyParallel Fast checks, 1–2010
dedupetrue to skip case-insensitive duplicatesfalse

Fast mode:

{
"emails": ["ceo@apple.com", "user@mailinator.com", "a@gmial.com"],
"maxResults": 5,
"enableSMTP": false
}

Deep SMTP mode:

{
"emails": ["info@example.com"],
"maxResults": 5,
"enableSMTP": true,
"checkCatchAll": true
}
  • maxResults caps the rows one run writes. Free-plan users are capped at 1,000 results per run.
  • A malformed input stops the run at once with a clear error, before any row is charged.
  • The INPUT_ECHO record in the run's key-value store shows exactly how your input was read.

Output example

{
"input": "user@mailinator.com",
"inputIndex": 0,
"email": "user@mailinator.com",
"normalizedEmail": "user@mailinator.com",
"domain": "mailinator.com",
"localPart": "user",
"syntaxValid": true,
"valid": false,
"domainStatus": "mx",
"mxFound": true,
"mxRecords": ["mail.mailinator.com"],
"disposable": true,
"freeProvider": false,
"roleAccount": false,
"suggestion": null,
"riskLevel": "high",
"confidence": 0.55,
"reasons": ["syntax_ok", "disposable_domain"],
"smtpStatus": "not_checked",
"catchAll": null,
"error": null
}

You can export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table.

Why use this Email Risk validator?

  • Pay per delivered row. You pay for result rows written to the dataset, not for addresses tried.
  • Two depth levels in one Actor. Fast mode handles bulk hygiene; Deep mode adds SMTP signals only where you need them.
  • Clear status, not cryptic errors. Reaching the free-plan limit ends the run cleanly with FREE_TIER_LIMIT; a bad input names the field and the fix.
  • Honest signals. When a provider rate-limits a Deep probe, smtpStatus says timeout/blocked/temp_error and the Fast fields are still delivered.
  • Typo rescue. suggestion surfaces likely misspellings such as gmial.com so you can correct high-value contacts.
  • No setup. No local install and no third-party email-API key — everything runs on Apify.

How much does it cost to use Email Risk Validator?

The Actor uses pay-per-event pricing: $0.005 per run start plus $0.0005 per result row. Platform usage is included in these prices — you do not pay separate Apify compute usage on top.

Apify planPrice per rowPrice per 1,000 rows
Free$0.0005$0.50
Starter$0.0005$0.50
Scale$0.0005$0.50
Business$0.0005$0.50
Platinum$0.0005$0.50
Diamond$0.0005$0.50
  • maxResults caps the rows of a run; the free Apify plan is further capped at 1,000 results per run and 10 runs of this Actor in total.
  • The whole run stops at the Maximum cost per run you set in the run options (maxTotalChargeUsd in the API).
  • The start event is charged once per GB of run memory, minimum once — at the default 512 MB that is a single $0.005 charge.
  • The Apify Free plan includes $5.00 in monthly usage credit (about 9,990 rows at $0.0005 per row across Free-plan runs capped at 1,000 results per run).

Example: 100 emails in Fast mode on the Free plan cost 100 × $0.0005 + $0.005 = $0.055; 10,000 emails cost about $5.005.

Use with AI agents and the API

Apify MCP server (Claude, ChatGPT, Cursor, VS Code)

Add this Actor as a tool in any MCP client that supports remote servers:

https://mcp.apify.com?tools=lentic_clockss/email-risk-validator

Sign in with Apify when the client asks (OAuth), or send the header Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns the run and dataset IDs; the agent then reads rows with get-dataset-items. Clients without remote MCP support can run npx @apify/actors-mcp-server --tools lentic_clockss/email-risk-validator with the APIFY_TOKEN environment variable.

Example prompt: "Validate these five email addresses and flag disposable or risky domains."

  • Agent execution note: Set maxResults between 5 and 20 on exploratory tool calls to keep responses compact, and read RUN_SUMMARY and INPUT_ECHO from the default key-value store to inspect normalized inputs and delivered row counts.

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/email-risk-validator").call(
run_input={"emails": ["ceo@apple.com"], "maxResults": 5}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/email-risk-validator').call({
emails: ['ceo@apple.com'], maxResults: 5
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Or over HTTP: POST https://api.apify.com/v2/acts/lentic_clockss~email-risk-validator/runs with the input as the JSON body and your token in the Authorization: Bearer header, then GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Connect the results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or your own webhook from the Integrations tab of the Actor, or schedule regular runs with Apify Schedules.

FAQ

The Actor checks addresses you provide against public DNS records and its own lists; it does not collect anyone's data from a site. You are responsible for how you use the results: email addresses are personal data in many jurisdictions and need a lawful basis, and validation is never a substitute for consent.

Why did my run end as ABORTED?

A run shows ABORTED when it was stopped by hand, hit its timeout or ran out of memory. Check the run log and status message to see which. Rows already delivered stay in the dataset, so inspect it before starting another run.

Does valid=true mean the email will deliver?

No. It means the address passed the checks you enabled — syntax, DNS/MX and list flags, plus SMTP signals when Deep mode is on. Delivery still depends on the provider, your content, reputation and recipient filters.

Does SMTP Deep mode send an email?

No. Deep mode only probes mailbox acceptance signals at the RCPT stage. No message body is sent.

Can Deep-mode results be timeout or blocked?

Yes. Some networks and providers rate-limit or block SMTP probes. When that happens the Fast fields still return and smtpStatus reflects the probe outcome honestly (timeout, blocked, temp_error).

No. It does not replace OTP, magic-link or other ownership verification, and validation is not marketing consent — keep your own opt-in records and suppression lists.

How many results can I get?

One row per input email, up to maxResults (default 1,000, schema maximum 100,000). Free-plan runs are capped at 1,000 rows and 10 runs of this Actor; your Maximum cost per run can stop a run earlier.

Why did my run finish with FREE_TIER_LIMIT?

The Actor's developer allows free Apify plan users 10 runs and 1,000 results per run. When the run quota is reached the run still finishes successfully with that status; upgrade to a paid Apify plan for unlimited runs.

Limitations

  • Results are hygiene and risk signals only — they do not prove mailbox ownership, marketing consent or inbox delivery.
  • Deep SMTP probing can be rate-limited or blocked by the receiving provider; smtpStatus then reports timeout, blocked or temp_error rather than a verdict.
  • Catch-all domains accept any local part, so a catch_all result cannot confirm a specific mailbox exists.
  • Free-plan usage is limited to 10 runs and 1,000 results per run, set by the Actor developer.
  • Disposable and free-provider lists are maintained snapshots; a brand-new provider may not be flagged yet.
  • Do not use Deep probing for abusive mailbox enumeration.

More developer and data tools from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.