Bulk Email Validator - Clean Your List Before You Send
Pricing
from $1.00 / 1,000 validated emails
Bulk Email Validator - Clean Your List Before You Send
Remove invalid, dead-domain, disposable and role addresses from any email list, and get a 0-100 send-risk score with a plain-English reason for every row.
Pricing
from $1.00 / 1,000 validated emails
Rating
0.0
(0)
Developer
Alan Salomon
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Bulk Email Validator — clean your email list before you send
Paste a list, link a CSV, or chain it after a scraper. Every address comes back validated, classified and scored, so the junk is gone before it ever touches your sending domain.
This Actor removes the addresses that are provably bad and flags the ones that are risky to send to — without sending anything and without needing an API key.
What it removes and flags
| Check | What it catches |
|---|---|
| Syntax validation | Malformed addresses, typos, broken exports |
| Domain & MX check | Domains that don't exist or can't receive mail at all — usually the biggest slice of a scraped list |
| Disposable detection | Temporary and burner mailboxes |
| Role account detection | info@, sales@, support@, admin@ — deliverable, but rarely a person |
| Free provider detection | Gmail, Outlook, Yahoo and friends, flagged so you can filter a B2B list |
| Mail provider identification | Google Workspace, Microsoft 365, and other hosts |
| Send-risk scoring | A 0–100 score and a recommended action, with the reason spelled out |
What you get per address
| Column | What it's for |
|---|---|
safe_to_send_score | 0–100. The one number to branch on. |
recommended_action | send, send_low_volume, secondary_verification, retry_later, manual_review, suppress |
recommendation_detail | One plain sentence explaining the decision |
status | The verdict: deliverable, undeliverable, risky, unknown |
is_disposable, is_role_account, is_free_provider | Filter your list however you like |
mail_provider | Who actually runs the mailbox |
confidence_score | How sure we are of our own assessment |
reason_codes | Exactly which signals produced the decision |
Every run's dataset ships with two ready-made views. Decisions is the one you want for a clean spreadsheet — export CSV from that tab and you get eight columns in the order you actually read them. Evidence shows the signals behind each call. Exporting the unfiltered dataset gives you every column, sorted alphabetically — useful for analysis, less pleasant to read.
Be clear about what this does and does not check
It does not connect to mail servers to confirm that an individual mailbox exists. No SMTP probing, no mailbox-level verification.
That is deliberate, and it is why this is cheap and fast. What it does instead is remove everything that can be proven bad without touching a mail server — and on a typical scraped or purchased list that is a large share of the file.
Use it as the first pass. Clean here, then, if you need mailbox-level confirmation on what survives, send only the survivors to a per-email SMTP verifier. You pay the expensive per-email price on a much smaller list.
And it will never tell you a catch-all mailbox exists. Nobody can — a catch-all domain accepts every address by design, so no verifier on the market can confirm one, whatever the marketing says. Catch-all domains are reported honestly as unresolved rather than guessed at.
Honest uncertainty is the point. A validator that guesses confidently is how sending domains get burned.
What that means for your scores
Because no mailbox is contacted, an address that passes every check is reported as not disproven, not as confirmed. In practice:
| What you'll see | What it means |
|---|---|
suppress | Provably bad — broken syntax, dead domain, or disposable. Delete these with confidence; this is the bulk of what the Actor removes. |
send_low_volume | Passed every check available. The domain accepts mail and nothing looks wrong. The mailbox itself was not probe-confirmed, so send carefully and watch bounces. Free mailboxes land here too — deliverable, just a weaker target on a B2B list. |
manual_review | A shared role inbox (info@, sales@), or an address we could not process. A human should decide; never treated as bad. |
secondary_verification | Genuinely uncertain — the domain resolves but gave no recognisable mail host. If you need certainty, this is the shortlist to send to a per-email SMTP verifier. |
Branch on recommended_action, not on the number. Without a mailbox check the
confidence ceiling applies to every address, so scores cluster low by design and
nothing reaches the 80s or 90s. The score is a useful ranking within a band; the
action is the decision.
Input
Three ways in, and you can combine them — everything is merged and de-duplicated before validation, so you are never charged twice for the same address:
- Paste addresses into the Email addresses field.
- Link a CSV (published Google Sheet, S3 link, anything downloadable). The email column is detected automatically, whatever it is called.
- Chain a dataset from a previous Actor — put its dataset ID in
inputDatasetIdand this runs straight after your scraper or enrichment step.
Messy input is expected and handled: display names, mailto: prefixes, BOMs,
semicolon delimiters, headerless files, and any column name.
How the scoring works
Two numbers underpin the headline score, and they are deliberately separate:
- Deliverability — will a message be accepted?
- Confidence — how sure are we of that assessment?
safe_to_send_score combines them, then subtracts the outreach-specific risk that
deliverability alone ignores: role inboxes and free mailboxes on a B2B list are
perfectly deliverable and often a bad send. The score is also capped by
confidence — it will never claim an address is safer to send than we are sure of
our own answer.
Every score is explainable. reason_codes tells you exactly which signals produced
it, so you can argue with the result instead of trusting it blindly.
One bad row never breaks your run
An address we cannot process comes back as a row marked manual_review and
retryable, with the same columns as every other row — never dropped, never
silently marked unsendable. Our failure is not your lead's failure, and a CSV whose
shape changes halfway down breaks every formula built on it.
Typical uses
- Clean a scraped or purchased list before it touches your sending domain.
- Cut the cost of email verification — remove the provable junk here, pay per-email only for what survives.
- Run it as the last step of an Apify pipeline so leads land already scored.
- Branch in n8n, Make or Zapier on
recommended_action. - Filter B2B lists on
is_free_providerandis_role_account.
Pricing
Pay per address validated. Duplicates are removed before validation, so you are never charged twice for the same address in a run.