Catch-All Email Verifier & Bulk Email Validator avatar

Catch-All Email Verifier & Bulk Email Validator

Pricing

from $0.25 / 1,000 address verifieds

Go to Apify Store
Catch-All Email Verifier & Bulk Email Validator

Catch-All Email Verifier & Bulk Email Validator

Bulk email verifier and email validator for list cleaning: every address gets good / risky / bad with a one-line reason, and catch-all (accept-all) addresses get a keep / test / discard verdict instead of "unknown". Cut bounces. Paste a list, CSV or Google Sheets link.

Pricing

from $0.25 / 1,000 address verifieds

Rating

0.0

(0)

Developer

LYFE Offshore

LYFE Offshore

Maintained by Community

Actor stats

0

Bookmarked

31

Total users

26

Monthly active users

6 days ago

Last modified

Share

Bulk email verification and list cleaning that gives every row a plain answer: good, risky or bad, with the reason in one sentence — including the catch-all (accept-all) addresses that other email validators return as "unknown". Cut bounces and protect your sender reputation and deliverability before a cold email campaign or a CRM import.

  • Paste a list, a CSV link or a Google Sheets link, or read the output of another Actor.
  • Fast: thousands of addresses in seconds (DNS only, no slow mailbox probing).
  • Honest about catch-alls: a keep / test / discard verdict with a calibrated probability, and the evidence behind it. Published accuracy on a held-out test set.
  • Works where you work: Clay, Make, Zapier, n8n, the Apify API, and AI agents through MCP.

What you get, one row at a time

A real run of the prefilled example (7 rows on one Google Workspace domain):

EmailVerdictProbabilityWhy
tomas.koutny@lyfeoffshore.comkeep0.934local part matches the name via first.last; follows the domain's dominant convention (67% of the list); address is at the employer's domain
john.smith@lyfeoffshore.comkeep0.870matches the name, follows the convention
maria.gonzalez@lyfeoffshore.comkeep0.826matches the name, follows the convention
maria.gonzalzz@lyfeoffshore.comtest0.415one edit away from another address on the list: probably a typo
j.smith@lyfeoffshore.comtest0.360same person already appears under the spelling the domain uses
x7fk92qp@lyfeoffshore.comdiscard0.190machine-generated local part, does not derive from "Bob Jones"
info@lyfeoffshore.comreview0.803role address, not a person

Input: four ways to send a list

Use any of these, or several at once.

FieldUse it forExample
emailsA list of addresses, or rows with a name and company["ann@acme.com", "bob@example.org"]
emailText: one address, or many separated by new lines or commas. Easiest from Zapier, Make, n8n or an AI agent"ann@acme.com, bob@example.org"
csvUrlA CSV or Google Sheets link (shared as "anyone with the link")"https://docs.google.com/spreadsheets/d/…/edit"
inputDatasetIdThe output of another Actor, such as a lead scraperpick it in the input form

Rows with a name and a company score sharper, because the name and the employer are the strongest signals for catch-all addresses:

{
"emails": [
{ "email": "tomas.koutny@lyfeoffshore.com", "first_name": "Tomáš", "last_name": "Koutný", "company": "LYFE Offshore" },
{ "email": "x7fk92qp@lyfeoffshore.com", "first_name": "Bob", "last_name": "Jones", "company": "LYFE Offshore" },
"someone@example.org"
]
}

In a CSV, the columns are found by name (Email, Work Email, First Name, Last Name, Company, …). A file with only addresses works too.

Output example

One dataset row per address. Export it as CSV, Excel or JSON, or read it through the API.

{
"email": "tomas.koutny@lyfeoffshore.com",
"result": "good",
"action": "keep",
"probability": 0.934,
"explanation": "Keep (93% likely real): local part matches the supplied name via \"first.last\".",
"catchAll": null,
"catchAllRisk": "low",
"mxFound": true,
"mxProvider": "Google Workspace",
"role": false,
"disposable": false,
"freemail": false,
"status": "no_smtp_evidence",
"reason": "smtp_not_attempted",
"evidence": [
"local part matches the supplied name via \"first.last\"",
"follows this domain's dominant convention \"first.last\" (67% of the list)",
"the address is at the domain of the employer the row names"
],
"confidence": "high"
}
FieldMeaning
resultgood, risky or bad: the one column to filter on in a spreadsheet, Clay or Zapier
actionkeep, test (send a small batch first), discard, or review (role addresses such as info@)
probabilitycalibrated chance the address is real: when it says 0.70, about 77% of such addresses were real on the test split
explanationthe verdict and its main reason, in one sentence
catchAllRiskhow likely the domain accepts every address (low, medium, high), judged from its mail host
catchAlltrue/false only when a mail server answered; null means not tested (always on Apify, see below)
mxFoundthe domain can receive email at all
mxProviderwho hosts the domain's mail (Google Workspace, Microsoft 365, …)
role, disposable, freemailstandard flags
evidenceevery reason behind the verdict
status, reasontechnical status and reason code (nxdomain, null_mx, domain_typo, disposable_domain, …)

The key-value store holds SUMMARY with the totals per result.

How it decides

The parts every verifier has: syntax (RFC 5321), MX and null-MX (RFC 7505), disposable domains, role addresses, typo'd provider domains, duplicates.

The part that is the point. When a domain accepts every address, SMTP tells you nothing, so the verdict has to come from somewhere else:

  1. Does the local part derive from the name on the row? Aware of diacritics (Koutný → koutny), initials, truncation and hyphenated surnames.
  2. Does it follow the naming convention the rest of your list shows for that domain? If eighteen addresses at acme.com are first.last, the one that is xk29z is not a mailbox.
  3. Does one person appear under several spellings at one domain? That means a guessing tool ran.
  4. Is it one edit away from another address on the list? Then it is a typo, not a second mailbox.
  5. Does the employer named on the row match the domain?

All signals feed one calibrated model. A missing column contributes nothing rather than counting against the row, so a list without names is scored, just less sharply.

How good it is

Measured on a held-out test split of 319 addresses across 57 domains the model was never fitted on, with SMTP switched off (the hardest case: a catch-all that accepts everything and leaks nothing).

Catch-all addresses given a verdict42.9%
Correct when it gives one85.4%
Precision of keep92.9%
Precision of discard77.6%
Genuine addresses lost to discard4.8%
Calibration error4.6%

With a company column, keep precision on that split was 100%; without one, 76%. The method, the test split and the evaluation code are kept with the source.

How it compares

Most email verifiers on the Store do the same basic checks; they differ in what happens to catch-all addresses and in how they reach a mail server (Apify blocks outbound port 25, so SMTP checks need an outside relay or a third-party API).

This ActorTypical verifier
Catch-all addresskeep / test / discard with a probability and reasons"unknown", "risky" or "accept-all"
Speed3,867 addresses on 356 domains in under 3 seconds of work (measured on Apify, 6 Oct 2026)SMTP-based: up to minutes per 1,000
AccuracyPublished, on a held-out test set (below)Rarely published
Mailbox exists (non-catch-all)Not confirmed: no SMTP on ApifyConfirmed by SMTP where they have a relay
Price per 1,000$1.20 Free, $0.60 Business; no start fee$0.30 to $5

Use this Actor when a good part of your list sits on business domains that accept everything, or when you want a fast, cheap first pass that removes dead domains, typos, disposable and role addresses before a paid SMTP check.

Price

Price per 1,000 by your Apify plan (Apify applies the right column automatically):

FreeStarterScaleBusiness and up
Address verified, per 1,000$1.20$0.90$0.80$0.60

No start fee. Pay per event, platform usage included:

  • $1.20 per 1,000 addresses on the Free plan (address-verified), $0.60 on Business

Example: 1,000 addresses ≈ $1.20 (Free) or $0.90 (Starter). 10,000 addresses ≈ $12 (Free) or $6 (Business). Set a maximum cost per run and the Actor processes only as many addresses as that limit pays for, keeping each domain together, and says so in the log.

What it does not do

  • It cannot prove a mailbox exists. Nobody can on a catch-all domain without sending mail. Every verdict there is a probability, and keep is not "guaranteed deliverable".
  • No SMTP on Apify. The platform blocks ports 25/465/587, so status reads no_smtp_evidence and catchAll is null. The catch-all scoring was fitted and measured without SMTP, so this costs the scoring nothing; it does mean non-catch-all mailboxes are not confirmed by an SMTP handshake here.
  • It cannot see that someone left a company. A correctly spelled address for a former employee looks exactly like a current one.
  • It sends no email, scrapes no websites and calls no third-party APIs. It reads your list and asks DNS.

FAQ

How do I verify a list of emails in bulk? Paste them into email (one per line), give a CSV or Google Sheets link in csvUrl, or send a list in emails. Click Start, then export the results as CSV or Excel.

How do I reduce my email bounce rate? Remove the bad rows (dead domains, typos like gmial.com, disposable and malformed addresses), send to good, and send risky in a small test batch first.

What is a catch-all domain? A domain whose mail server accepts mail for every address, real or not. Standard verifiers therefore label those addresses "unknown" or "accept-all". Depending on the list, that can be a large share of B2B addresses.

Which columns should I send? email, plus first_name / last_name (or name) and company if you have them. Column names are detected automatically; set emailField, nameField or companyField if yours are unusual.

Can I make it stricter? Yes. Raise keepThreshold (default 80%) for a cleaner kept set, or raise discardThreshold (default 22%) to cut more.

Is my data stored? No. Addresses are processed in memory. Results go to your own run's dataset, which is in your account.

Can I use it in Clay, Make, Zapier or n8n? Yes. Each has an Apify integration, and the one-call API below works anywhere that can send an HTTP request. Map email in, and result, action and explanation out.

Why did a run stop before the end of my list? Your maximum charge per run (or your plan's monthly credit) was reached. The status message says how many addresses were not checked. Raise "Max charge" in the run options, or split the list.

Can an AI agent use it? Yes. It runs through the Apify API and the Apify MCP server; the input fields are described for that. Send a list of addresses, read action and probability per row.

How do I clean the list first? Duplicates, typos like gmial.com and disposable domains are cheaper to remove with Email List Cleaner ($0.40 per 1,000) before you verify.

Use it from code or an AI agent

One HTTP call runs the verifier and returns the rows:

curl -X POST \
"https://api.apify.com/v2/acts/lyfe_tools~catchall-email-verifier/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"emails": [{"email": "tomas.koutny@lyfeoffshore.com", "first_name": "Tomáš", "last_name": "Koutný", "company": "LYFE Offshore"}]}'

For long lists, start a normal run and read the dataset when it finishes. Through the Apify MCP server an AI agent (Claude, Cursor, …) can call it as a tool: send emails (strings or objects with first_name, last_name, company), read action, probability and evidence.

Part of a lead-list workflow

  1. Find: Local Business Leads (role addresses such as info@, by city and category)
  2. Clean: Email List Cleaner
  3. Verify: this Actor
  4. Check the domain: SPF, DKIM & DMARC Checker, for your own sending domain before a campaign

Each step can read the previous run's dataset through inputDatasetId.

Next step: before you send, check your sending domain with the SPF, DKIM & DMARC Checker.

Questions or a wrong result: open an issue on the Issues tab or write to tools@lyfeoffshore.com. We read every one. If the Actor saved you time, a short review helps other people find it.