Bulk Email Verifier: MX, Disposable, Role & Typo Check icon

Leads & companies · Live on Apify

Bulk email verifier for lead lists and sign-ups

Paste email addresses. Each one gets one of 4 statuses: deliverable, risky, undeliverable or unknown, with the reasons. No emails are sent.

About $0.41 for 1,000 emails$0.0004 per email + $0.005 per run. Apify bills you, not us.One email in a run of its own: about $0.0054.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

email[email protected]
statusrisky
reasonsrole_account, mailbox_not_verified

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: [email protected] in Email addresses. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Bulk Email Verifier checks a list of email addresses and gives every address a status: deliverable, risky, undeliverable or unknown, with the reasons. It checks syntax, DNS MX records, disposable and role addresses, free providers and domain typos. It does not open an SMTP connection, so it cannot confirm that a mailbox exists. No API key from an email provider. Your list is not sent to any third-party verification service.

  • Checks the syntax by the email standards (RFC 5321 / 5322). For example, [email protected] is invalid because of the two dots.
  • Looks up the domain in DNS: MX records, a "null MX" record (RFC 7505) that says "this domain takes no mail", and the A/AAAA fallback when there is no MX.
  • Flags disposable domains (temporary inboxes like mailinator.com), role addresses (info@, support@, sales@…) and free providers (gmail.com, outlook.com…).
  • Suggests a fix for a likely typo: [email protected] → [email protected].
  • Names the mail provider from the MX hosts, for example Google or Microsoft.
  • Gives one status and a list of reason codes.

Good for

  • Remove bad and risky addresses before an email campaign, so fewer emails bounce.
  • Check emails found by a lead scraper before you add them to a CRM.
  • Find typos and disposable addresses in sign-up lists.
  • Check lists that you do not want to share with another verification company.

Not a good fit

  • It does not connect to the mail server (SMTP). It cannot say if one mailbox exists, and it cannot detect catch-all domains. See Limitations.
  • It does not send emails.
  • It does not promise 100% accuracy. DNS and mail servers change all the time.

Who uses it

Lead generation teams

Check emails from a lead scraper before they go to a CRM.

Product teams

Catch typos and temporary inboxes in sign-up lists.

Privacy-minded senders

Verify lists you do not want to share with a vendor.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.005Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Email checked$0.0004 (from $0.00034 on paid Apify plans)One address checked with a deliverable, risky or undeliverable result. Unknown results are not charged.

Examples

  • One email: about $0.0054.
  • 1,000 emails: about $0.41.
  • Every day 100 emails, for 30 days: about $1.35 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 12,000 emails.

Prices checked on 24 October 2026. See the current price on Apify.

Your data

  • No emails are sent. The tool checks the address format and the domain's DNS records.
  • Your list and the results stay in your own Apify account (the run and its dataset). Apify keeps them as its data retention rules say, and you can delete them.
  • Only the domain names (like gmail.com) leave Apify, for public DNS lookups.
  • Roles under GDPR: you are the controller of your list. Apify processes it for you under its Data Processing Addendum. We see anonymous usage statistics (like the number of runs), and your run data only if you turn on "Share run data with developers" in Apify. It is off by default.
  • Checking a list does not make it legal to email it. You need your own legal basis to send, and in many EU countries marketing emails to people need their consent first. See our terms and the Apify terms.

More: Apify data retention, our privacy policy and data questions in our FAQ.

Questions

How many emails can I check?

Up to 10,000 addresses per run. Split bigger lists.

Do I pay for unknown results?

No. Unknown rows and removed duplicates are free.

Does it show the mail provider?

Yes. It names the provider from MX records, for example Google or Microsoft.

Is my email list stored or shared?

Your list goes only into your own Apify account: the input and the results are in your run and its dataset. Apify keeps them for the time its data retention rules say, and you can delete them at any time. We see your run data only if you turn on "Share run data with developers" in Apify; it is off by default. Only the domain names, like gmail.com, leave Apify, for public DNS lookups. No email is sent to anyone.

Why is a fake gmail.com address "deliverable"?

The tool does not ask the mail server if one mailbox exists. It checks the domain: gmail.com accepts mail. So the reason list shows mailbox_not_verified. Use an SMTP check after this tool if you need it.

Do I need an account or API key from an email verification service?

No. Everything runs inside the Actor. You only need an Apify account.

Should I delete every risky address?

Not always. Role addresses like sales@ are often real. Disposable addresses and typos are usually worth removing or fixing.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Paste your addresses into Email addresses (emails), one per line. The form already has 5 example addresses.
  3. Keep the other settings at their defaults.
  4. Click Start.
  5. Open the Output tab and check the Status and Reasons columns.
Use cases
TaskInputYou getKey fieldsNext step
Clean a list before a campaignemailsOne row per addressstatus, reasonsKeep deliverable, review risky, remove undeliverable
Check scraped leadsinputDatasetId + emailFieldOne row per addressstatus, isRoleAccount, mxProviderImport good rows into a CRM
Fix sign-up typosemailsOne row per addressdidYouMean, reasonsAsk the user to correct the address
Block temporary inboxesemailsOne row per addressisDisposableReject or flag the sign-up
Tips for better results
  • Use the input dataset option to check another Actor's output directly.
  • Fix typos with the suggested address, like gmial.com to gmail.com.
  • Set a maximum cost per run. The tool stops before it goes over.
Limits and good to know
  • No SMTP check. Apify does not allow outgoing connections on port 25, so the Actor does not talk to mail servers. A wrong mailbox on a real domain (for example a made-up name at gmail.com) is shown as deliverable with mailbox_not_verified. Use this Actor as a fast, private first filter. If you need mailbox-level checks, use an SMTP verification service after it
  • No catch-all detection. isCatchAll is always null
  • Lists change. The disposable and free-provider lists come from open-source projects (disposable-email-domains, MIT; freemail, ISC). New temporary services may be missing
  • DNS can fail. If DNS does not answer for a domain, the row is unknown and free. If DNS fails for more than half of the domains checked (after 10 domains, or after 30 seconds) or for more than half of the first 100 addresses, the run stops with an error so you do not wait for a list of dead domains

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

Here [email protected] is risky because it is a role address (role_account): it goes to a team, not one person. mailbox_not_verified is on every address, because the tool never asks the mail server.

one result · JSON
{
  "email": "[email protected]",
  "normalized": "[email protected]",
  "status": "risky",
  "reasons": ["role_account", "mailbox_not_verified"],
  "syntaxValid": true,
  "domain": "stripe.com",
  "hasMx": true,
  "mxRecords": [{ "exchange": "aspmx.l.google.com", "priority": 10 }],
  "mxProvider": "Google",
  "isDisposable": false,
  "isRoleAccount": true,
  "isFreeProvider": false,
  "isCatchAll": null,
  "smtpCode": null,
  "smtpChecked": false,
  "didYouMean": null,
  "checkedAt": "2026-10-13T01:57:42.504Z"
}

Use it from code

Actor ID: cliqtomedia/email-verifier. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/email-verifier").call(run_input={
    "emails": [
        "[email protected]",
        "[email protected]",
        "[email protected]"
    ],
    "emailField": "email"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~email-verifier/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"emails": ["[email protected]", "[email protected]", "[email protected]"], "emailField": "email"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/email-verifier")
result = tool.invoke({"run_input": {"emails": ["[email protected]", "[email protected]", "[email protected]"], "emailField": "email"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (17)
FieldTypeMeaning
emailstringThe address as given (trimmed).
normalizedstringLower-cased local part + ASCII (punycode) domain; null when the syntax is invalid.
statusstringdeliverable: valid syntax and a working mail domain, no risk flags. risky: mail domain works but there is a risk flag (disposable, role, typo, no MX…). undeliverable: invalid syntax or the domain cannot receive mail. unknown: DNS lookup failed; not charged. The mailbox itself is never probed (see reasons: mailbox_not_verified).
reasonsarrayMachine-readable reason codes, e.g. invalid_syntax, domain_not_found, null_mx_domain_accepts_no_mail, no_mx_a_record_fallback, disposable_domain, role_account, possible_domain_typo, mailbox_not_verified.
syntaxValidbooleanRFC 5321/5322 syntax check result.
domainstringDomain part in ASCII (punycode).
hasMxbooleantrue when the domain publishes MX records with a mail host that resolves to a public address; false for no MX, null MX or unresolvable MX hosts; null when DNS failed or syntax is invalid.
mxRecordsarrayMX records sorted by priority: {exchange, priority}.
mxProviderstringMail provider detected from MX hosts, e.g. Google, Microsoft, Zoho, Proton; null when not recognised.
isDisposablebooleanDomain is on the bundled disposable / temporary email list.
isRoleAccountbooleanLocal part is a role mailbox (info, support, sales…).
isFreeProviderbooleanDomain is a free webmail provider (gmail.com, outlook.com…).
isCatchAllnullAlways null: catch-all needs an SMTP probe, which this Actor does not perform.
smtpCodenullAlways null: no SMTP connection is made.
smtpCheckedbooleanAlways false: mailbox existence is not probed.
didYouMeanstringSuggested correction for a likely domain typo, e.g. [email protected] for [email protected].
checkedAtstringISO timestamp of the check.
Input settings (5)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Email addressesemailsarray["[email protected]", "[email protected]", "[email protected]", …
Input dataset (optional)inputDatasetIdstring
Email field in the datasetemailFieldstring"email"
Parallel checksconcurrencyinteger20
Remove duplicatesdeduplicatebooleantrue

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure