Bulk Email Verifier — MX, Disposable & Typo Check avatar

Bulk Email Verifier — MX, Disposable & Typo Check

Pricing

from $0.49 / 1,000 e-mail checkeds

Go to Apify Store
Bulk Email Verifier — MX, Disposable & Typo Check

Bulk Email Verifier — MX, Disposable & Typo Check

[$0.70/1K e-mails] Bulk email verifier for lead lists: syntax, live MX lookup, throwaway and role addresses, typo fixes, duplicate spellings, 0-100 score. Paste a list, a CSV or Google Sheet link, or another Actor's dataset. Domain-level check, no mail sent, no run fee.

Pricing

from $0.49 / 1,000 e-mail checkeds

Rating

0.0

(0)

Developer

Matvey

Matvey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

7 hours ago

Last modified

Share

Bulk Email Verifier cleans a list of e-mail addresses before you send to it. Paste the addresses, link a CSV file or a Google Sheet, or point it at the dataset of another Actor, and every address comes back as deliverable, risky, undeliverable or unknown — with the reason, a 0–100 score, the mail host, disposable, role and free-mailbox flags, a typo suggestion (gmial.com → gmail.com) and a pointer when two spellings are the same mailbox. No API key, no login, no e-mail is ever sent. $0.70 per 1,000 addresses, no fee per run.

This Actor is a focused entry point for the query "bulk email verifier". It runs the e-mail half of the same engine as Email Verifier & Phone Validator, at the same price per row. Need phone numbers checked in the same run, or a company website found from a name? Use that one.

What does Bulk Email Verifier check?

CheckWhat you getWhy it matters
Syntaxundeliverable / syntax for malformed stringsPasted junk never reaches your sending tool
Domain existsundeliverable / domain_not_foundA domain that does not resolve is a guaranteed hard bounce
Mail servers (live MX lookup)deliverable when the domain publishes mail servers, domain_accepts_no_mail when it does notA domain with a working website but no mail server bounces every message
Throwaway domainsemailIsDisposable, from a list of about 8,700 servicesSign-up spam and burner addresses out of your CRM
Role accountsemailIsRole for info@, sales@, support@ …Deliverable, but nobody's personal inbox
Free mailboxesemailIsFree for Gmail, Yahoo, Outlook …A B2B lead on a free mailbox is usually a sole trader
Mail hostemailProvider (google, microsoft, zoho, proofpoint, mimecast …) and emailMxHostTells you what filtering your message will face
TyposemailSuggestion when the domain is one or two letters off a big providersales@gmial.com becomes a fixable contact instead of a bounce
Duplicate spellingsemailNormalized and emailDuplicateOf (john.doe+news@gmail.com = johndoe@gmail.com)One person, one send
ScoreemailScore 0–100Sort or cut a list at a threshold without reading five flags

What it does not do — read this before you buy

It does not probe individual mailboxes. Confirming that one specific mailbox exists needs an SMTP conversation on port 25, and Apify's cloud blocks outbound port 25. So deliverable here means the address is well formed and its domain accepts mail — not that a person is behind it. A made-up address on a real domain (nobody-here-123@gmail.com) comes back deliverable. Every row says this in checkLevel: "domain_mx".

What that means in practice:

  • It removes bounces caused by bad syntax, dead or mistyped domains, domains without mail servers and throwaway services, and it removes duplicate sends.
  • It does not catch an old employee's mailbox on a live company domain, and it does not detect catch-all domains. If your list is old B2B data where people change jobs, a mailbox-level (SMTP) verifier will catch more — at a higher price per address.
  • We have not measured the bounce rate of lists cleaned with this Actor, so we do not promise one. Judge it on your own first send.

Where port 25 is open, mailbox probes are not a guarantee either: Gmail and Microsoft 365 often accept any recipient at that stage and bounce later.

How to verify a list of e-mails in bulk

  1. Open the Input tab.
  2. Paste addresses into 📧 E-mail addresses, one per line — or give a public link in 📄 Or a link to a list (a CSV or TXT file, or a Google Sheet shared as "anyone with the link can view"), or pick a dataset in 🔗 Or a dataset from another Actor.
  3. Optional: choose 🎯 Keep only — for example Clean list returns only deliverable addresses with one spelling per mailbox, Problems only returns what to delete.
  4. Press Start. One DNS answer per domain is reused for every address on it; in our test a list of 10,000 addresses on 2,500 domains finished in under a minute.
  5. Export as CSV, JSON or Excel, or read the dataset through the API.

An empty API call works too: with no input the Actor checks an eight-address example list that shows every verdict once.

⬇️ Input

{
"emails": ["owner@acme.com", "info@gmail.com", "hello@mailinator.com", "sales@gmial.com"],
"keep": "all"
}

From a file or a sheet:

{
"fileUrl": "https://docs.google.com/spreadsheets/d/<sheet-id>/edit#gid=0",
"keep": "clean"
}

Every address found anywhere in the file is checked; the other columns of the file are not copied. To keep your own ids, pass objects through the API — extra fields ride along to the output row:

{
"emails": [{ "email": "jane@acme.com", "crmId": "A-1042" }]
}

After a lead scraper:

{
"inputDatasetId": "aBcD1234efGh5678",
"emailField": "email, emails, contactEmail",
"keep": "clean"
}

A field that holds a list of addresses (as many contact scrapers write it) is expanded, one row per address.

keep values: all, clean, deliverable_email, person_email, business_email, unique, problems.

⬆️ Output

One row per address.

{
"email": "sales@gmial.com",
"type": "email",
"emailStatus": "risky",
"emailReason": "disposable_domain",
"emailDomain": "gmial.com",
"emailProvider": null,
"emailMxHost": null,
"emailIsRole": true,
"emailIsFree": false,
"emailIsDisposable": true,
"emailSuggestion": "gmail.com",
"emailNormalized": "sales@gmial.com",
"emailHasTag": false,
"emailScore": 5,
"checkLevel": "domain_mx",
"checkedAt": "2026-10-06T02:06:04.729Z"
}
VerdictMeaningWhat to do
deliverableWell formed, domain publishes mail servers, not a throwaway serviceKeep
riskyThrowaway domain, likely typo, or the domain has no MX record and relies on its A recordFix the typo or drop
undeliverableBad syntax, domain does not exist, or domain accepts no mailDrop
unknownThe domain's name servers did not answer in time (retried once). In our 10,000-address test this was about 2% of rows, all on domains whose own DNS was brokenRe-run later — do not treat as bad

Views in the Output tab: Verified e-mails, Problems only, Duplicates. A run summary (counts per verdict) is saved as SUMMARY in the key-value store.

How much does it cost?

Pay per event: $0.0007 per e-mail checked ($0.70 per 1,000), cheaper on Bronze, Silver and Gold Store plans. No fee per run, no proxy charge. Only the rows that come back are billed: with 🎯 Keep only set to Clean list, the addresses filtered out cost nothing. Exact repeats in your input are removed before checking, and a file or dataset with no addresses costs nothing. The Apify Free plan ($5 monthly credit) covers about 7,000 addresses a month.

ListPrice
1,000 e-mails$0.70
10,000 e-mails$7
100,000 e-mails$70

FAQ

Does it send e-mails? No. Nothing is sent and no mailbox is contacted, so your sending reputation is not touched.

Is it a ZeroBounce or NeverBounce replacement? For domain-level cleaning — dead domains, typos, throwaways, duplicates — yes, at a fraction of the price. For mailbox-level verification, no: see What it does not do.

Can I run it from Make, Zapier, n8n or my own code? Yes — through the Apify API or the Apify integrations. Run it after any scraper by passing its dataset id.

Can I schedule it? Yes, with Apify Schedules, for example to clean the leads a scraper collects every night.

Is it legal? It looks up public DNS records and compares the address against public lists; it does not access any mailbox. You remain responsible for how you use the addresses — follow GDPR, CAN-SPAM and the rules of your sending platform.