Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Email Verifier icon

Email Verifier

Verify emails in bulk: syntax, MX records, disposable domains, role accounts, optional SMTP check. No mail is sent. No API key, no login.

5 from 2 reviews on Apify 1,631 runs on Apify $0.00199 per email verification ($1.99 / 1,000)
Run this in the cloudRun on Apify →

B2B Leads & Contact Data

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust emails, checkSmtp, smtpTimeoutMs (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00199 per email verification = $1.99 per 1,000

You are charged forWhenPrice
Email verificationOne completed email verification result.$0.00199

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-24, and they are what you are actually charged.

Inputs

FieldWhat it doesType
emailsEmail addresses to verify. Duplicate addresses are normalized and processed once. Leave empty to run the free sample row.array
checkSmtpAttempt a short SMTP EHLO/MAIL FROM/RCPT TO probe against the first MX host. SMTP is best-effort: many providers block enumeration and Apify cloud may block outbound port 25, so inconclusive is reported rather than treated as invalid.boolean
smtpTimeoutMsPer-connection SMTP deadline. It is capped at 8000 ms to keep cloud runs bounded.integer
maxConcurrencyMaximum number of email checks running at once. Lower this for conservative DNS and SMTP traffic.integer

What you get

A structured dataset — each result includes fields like:

emailstatusconfidencesyntaxValidmxFoundisDisposableisRoleAccount

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

2 ready-to-run use cases

Bulk Email Verifier: Syntax, MX, Role, Disposable

Checks each address for valid syntax, working MX records, throwaway domains and role inboxes like info@. No mail is sent, so no mailbox is confirmed.

Disposable Email Checker for a Signup List

Flags throwaway domains, role accounts such as admin@, and domains with no MX record at all. It checks the domain, not whether the inbox exists.

Related tools in B2B Leads & Contact Data

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Shopify Store Leads iconB2B Leads & Contact Data

Shopify Store Leads

Check domains for Shopify, then get public emails, phones, socials, currency, theme and tech. $4.50 per 1,000 confirmed stores.

1 use cases

Thomasnet Suppliers Scraper iconB2B Leads & Contact Data

Thomasnet Suppliers Scraper

Scrape Thomasnet suppliers by product and US location. Get name, phone, website, address, year founded, employees, sales, ISO certs. $0.85 per 1,000.

Ready to run — no setup

LinkedIn Profiles Scraper iconB2B Leads & Contact Data

LinkedIn Profiles Scraper

Get public LinkedIn profile data from URLs you supply. You get name, headline, description, image link and public identifier. $0.90 per 1,000 profiles.

Ready to run — no setup

LinkedIn Companies Scraper iconB2B Leads & Contact Data

LinkedIn Companies Scraper

Get public LinkedIn company data from company URLs. You get name, description, followers, employee count, HQ, website and logo. $0.90 per 1,000, flat rate.

Ready to run — no setup

YouTube Channel Email Scraper iconYouTube & Creator Tools

YouTube Channel Email Scraper

Find the business emails creators publish in their YouTube channel description, plus their linked site's contact pages. $1.50 per 1,000 channels.

Ready to run — no setup

Domain Inspector iconDeveloper & Research Tools

Domain Inspector

Check many domains at once. Get DNS, WHOIS registrar and expiry, TLS dates, redirects, security headers, robots and tech. $1.50 per 1,000.

Ready to run — no setup

See all B2B Leads & Contact Data →

Email Verifier: clean a bulk list, with MX, disposable and role checks

Paste a list of addresses and each one comes back as a row: a status, a 0 to 100 score, and the reason behind it. Whether the domain can actually receive mail, whether it is a throwaway, whether the address is a shared inbox like info@, and whether the domain is a free consumer provider.

Here is the part that decides whether this is the right tool. It never sends mail, so it cannot prove a mailbox exists. Nothing that does not send mail can. valid here means the syntax passed and the domain accepts mail, which is the check you run before a send so bounces do not wreck your sender reputation. It is not a deliverability guarantee.

InputA list of email addresses
OutputOne row per address
CeilingNo fixed list size. The run's own time limit is the real one
Account neededNone, no API key and no mailbox
Price$1.99 per 1,000 addresses checked, flat on every plan

✉️ What Email Verifier does

Each address goes through the same passes. The syntax is checked. The domain is looked up in public DNS for MX records, over DNS-over-HTTPS so the answer is the same wherever the run happens. The domain is matched against a built-in list of disposable providers, the local part against a list of role names, and the domain against the free consumer providers.

A domain that can receive mail says so in public DNS with an MX record, and a domain that has sworn off mail says that too, with a null MX. Both answers are useful, and both are in the row.

Duplicate addresses are lowercased and collapsed before anything is checked, so the same address in your list twice is one row and one charge.

There is also a bounded SMTP probe you can switch on. Read the section on it before you rely on it.

📥 What you give it

{
  "emails": ["[email protected]", "[email protected]", "bad@@example.com"],
  "checkSmtp": false,
  "smtpTimeoutMs": 5000,
  "maxConcurrency": 10
}
FieldDefaultWhat it is
emailsnoneThe list. The form starts with two example addresses in it. Duplicates are collapsed. Leave it empty and you get one free sample row showing the output shape.
checkSmtpfalseTry a short SMTP probe against the domain's first mail host. It never sends a message body. See below for what it can and cannot tell you.
smtpTimeoutMs5000Deadline per connection, capped at 8000, so one dead mail host cannot hold up a run.
maxConcurrency10How many addresses are checked at once, 1 to 25. Lower it if you want gentler DNS traffic.

📤 What you get back

A real row from a recent run. example.com publishes a null MX, which is a domain stating in public that it accepts no mail, so the address is invalid with high confidence:

{
  "ok": true,
  "email": "[email protected]",
  "status": "invalid",
  "confidence": 98,
  "mailboxVerified": false,
  "syntaxValid": true,
  "domain": "example.com",
  "mxFound": false,
  "mxRecords": [],
  "isDisposable": false,
  "isRoleAccount": false,
  "isFreeProvider": false,
  "smtp": null,
  "smtpNote": null,
  "reason": "no_mx_record"
}
FieldWhat it is
emailThe address, lowercased and trimmed.
statusvalid, risky, invalid or unknown.
confidenceA 0 to 100 score behind that status.
mailboxVerifiedtrue only when a mail server accepted this exact recipient, false when one permanently refused it or the domain cannot receive mail at all, null when nobody could ask.
reasonmx_valid, no_mx_record, invalid_syntax, disposable_domain, role_account, smtp_recipient_accepted, smtp_recipient_rejected, dns_inconclusive or sample_only.
mxFound, mxRecordsWhether the domain has mail servers, and the list of them as {priority, exchange} sorted by priority. mxFound is null when DNS itself gave no answer.
isDisposable, isRoleAccount, isFreeProviderThrowaway domain, shared inbox such as info@ or sales@, and free consumer provider.
smtp, smtpNotenull unless you switch the probe on. Otherwise the probe's status, code, stage and reason, plus a short note on how to read it.

🧾 Reading the output

RowHow to spot itCharged
A completed checkok: true and a statusyes
The sample row_sample: true and reason: "sample_only"no
A per-address failureok: false with an errorno
A diagnosticerrorCode of NO_RESULTS or INTERNAL_ERRORno

What each status means:

StatusMeaning
validSyntax passed and the domain accepts mail. Keep it in the list.
riskyThe domain is fine but something about the address is not. A shared inbox or a disposable provider.
invalidBad syntax, or the domain publishes no MX and says it takes no mail.
unknownThe check ran but DNS gave no usable answer, so reason is dns_inconclusive. This is a completed check and it is billed like any other.

The Console's overview table leaves out reason, mailboxVerified and isFreeProvider, which is exactly what you need to tell one unknown from another. Read the JSON for those.

▶️ How to run it

1. Open Email Verifier and click Try for free. 2. Paste your addresses into Email addresses, one per line. 3. Leave Attempt bounded SMTP probe off for a first run. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$1.99 per 1,000 addresses checked. Flat on every Apify plan, no volume tiers.

One charge per completed check. The sample row, per-address failure rows and diagnostic rows are not billed, and a duplicate address collapsed into one row is billed once. Two cases that do count as completed checks and are billed: an address that fails on syntax, and an unknown row where DNS gave no answer.

💡 What people use it for

  • Cleaning a list before a send, so hard bounces do not damage the sending domain.
  • Splitting a signup list into personal and shared inboxes, using isRoleAccount.
  • Dropping throwaway signups, using isDisposable.
  • Checking a purchased or scraped list before deciding whether it was worth the money.
  • Running new signups through on a schedule and flagging the ones whose domain has no mail server.

🚧 What it does not do

  • It never sends mail, so it cannot confirm a mailbox exists or predict a bounce.
  • The SMTP probe does not connect from here. Apify's runners block outbound port 25, measured

across eight mail hosts, so in the cloud mailboxVerified comes back null on every row. Run the actor on your own machine and the probe behaves normally. Big providers refuse to confirm or deny a recipient anyway.

  • Catch-all domains look the same as working mailboxes. There is no way to tell them apart

without sending.

  • The disposable list is built in and holds 16 domains. It catches the common services, not

every throwaway on the internet.

  • No cap on the list size in the input, but results are all worked out before the first row is

written and a run stops at its time limit, which is 5 minutes by default. Split very long lists, or raise the limit before you start.

  • 25 concurrent checks is the ceiling.
  • It is a list-cleaning signal, not consent. Only run addresses you are allowed to process.

🧭 Which lead tool do you need?

If you wantUse
To clean a list of addresses you already haveThis one
Public LinkedIn profiles by keyword, title, company or schoolLinkedIn Profile Search Scraper
The people who work at a given companyLinkedIn Company Employees Scraper
Contact addresses published on YouTube channelsYouTube Channel Email Scraper
Businesses with phone, website and addressGoogle Maps Scraper

❓ Questions people ask

Does it prove the person's inbox exists? No, and neither does anything else that does not send mail. valid means the domain accepts mail and the address is worth keeping.

Why is mailboxVerified always null? Outbound port 25 is blocked on Apify's runners, so the probe never connects in the cloud.

Why is a good address marked risky? Usually because it is a role account. info@ and sales@ are real addresses, and they are also where cold email goes to die.

Am I billed for an address with a typo in it? Yes. Checking it and finding it malformed is a completed check.

Do duplicates cost twice? No. They are collapsed before anything is checked.

Is this legal? Verifying addresses you hold is ordinary list hygiene, but an email address is personal data and data-protection law covers it, so have a reason for holding the list. Apify's write-up on scraping and the law is a good start, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and one address that behaved oddly. The reason field usually explains the verdict on its own.