Email Address Validator — ZeroBounce Alternative avatar

Email Address Validator — ZeroBounce Alternative

Pricing

from $0.90 / 1,000 email validateds

Go to Apify Store
Email Address Validator — ZeroBounce Alternative

Email Address Validator — ZeroBounce Alternative

Validate email addresses with syntax, MX, disposable-domain, role-account, typo, and optional SMTP signals. Export per-address results and scores for list hygiene, with the selected verification tier and limits made explicit.

Pricing

from $0.90 / 1,000 email validateds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

18 days ago

Last modified

Categories

Share

What is Email Address Validator — ZeroBounce Alternative?

Email Address Validator — ZeroBounce Alternative checks a list of email addresses and returns one dataset row per address with a verdict (valid, invalid, risky or unknown), a 0 to 100 score, the main reason, and the signals behind it: syntax, MX records, disposable domain, role account, free provider, typo suggestion and an optional live SMTP probe. Marketers cleaning a send list, sales ops teams checking CRM imports, product teams screening signups and AI agents use it for list hygiene before an address reaches an email platform.

Why list-hygiene teams use it

  • A decision-ready verdict. status, score and primaryReason sit at the top of every row, so filtering a list takes one column.
  • Every signal visible. isDisposable, isRoleBased, isFreeProvider, hasMxRecord and mxRecords show why an address scored the way it did.
  • Typo help. suggestedEmail proposes a fix when a domain looks like a common misspelling.
  • Optional SMTP and catch-all checks. Turn on checkSmtp and checkCatchAll when you want a mailbox-level signal on top of DNS checks.
  • Two verification tiers. standard runs the native checks; premium adds a managed third-party verification verdict in providerStatus, with no API key of your own.
  • Duplicates handled for you. Addresses are normalized to lowercase and repeats are removed before any charge.

Best fit for this Actor

  • Best fit for lists of complete email addresses, from a single address up to 1,000 per run.
  • Use the standard tier for routine list cleaning, and premium when a send decision needs an extra verification verdict.
  • Designed for the validation step itself; each row describes one address.
  • Start with Bulk Website Contact Extractor when you first need to collect public business emails, then pass them into emails here.

How it compares with ZeroBounce

DecisionThis ActorZeroBounceGood fit
ScopeSyntax, MX, disposable, role, free-provider, typo and optional SMTP signals with a score per addressA broader email-validation and deliverability suiteThis Actor for a focused validation step in an Apify or agent workflow
BillingPay per event per validated addressCredits and subscriptionsCompare on the same list size
AutomationApify API, schedules, MCP and a Standby endpointIts own API and integrationsWhichever stack your workflow already uses

ZeroBounce is a trademark of its owner. This independent Actor is not affiliated with or endorsed by ZeroBounce.

Example workflow: cleaning a conference lead list before a campaign

A demand-gen manager starts with 600 addresses collected at a trade show. She pastes them into emails with verificationTier: "standard" and runs the Actor. The dataset returns one row per address with status, score, isDisposable, isRoleBased and suggestedEmail. She exports the rows, fixes the addresses that have a typo suggestion, moves role_based addresses such as info@ to a separate nurture list, and drops invalid rows. She then reruns only the unknown addresses with premium before the send, and feeds the final list to her email platform.

Input

{
"emails": [
"test@gmail.com",
"ceo@apify.com",
"fake@thisdomaindoesnotexist123.io",
"admin@10minutemail.com"
],
"checkSmtp": false,
"checkCatchAll": false,
"verificationTier": "standard",
"maxEmails": 1000,
"concurrency": 10,
"timeoutMs": 8000
}
FieldTypeWhat it controls
emailsarray of stringsOne to 1,000 full email addresses. Required.
verificationTierstringstandard native checks, or premium with a managed verification verdict. Default standard.
checkSmtpbooleanRun a live SMTP RCPT TO probe after syntax and MX checks. Default false.
checkCatchAllbooleanTest whether the domain accepts any address; works together with checkSmtp. Default false.
maxEmailsintegerCap on unique addresses processed, 1 to 1,000. Default 1000.
concurrencyintegerAddresses checked in parallel, 1 to 50. Default 10.
timeoutMsintegerSMTP wait per connection, 1,000 to 30,000 ms. Default 8000.

Output

One row per address. A real standard row:

{
"email": "admin@10minutemail.com",
"normalizedEmail": "admin@10minutemail.com",
"status": "invalid",
"score": 5,
"reasons": ["syntax_valid", "disposable_domain", "role_based", "mx_not_found"],
"primaryReason": "mx_not_found",
"isValidSyntax": true,
"isFreeProvider": false,
"isRoleBased": true,
"isDisposable": true,
"isCatchAll": null,
"hasMxRecord": false,
"smtpCheck": "skipped",
"suggestedEmail": null,
"domain": "10minutemail.com",
"localPart": "admin",
"mxRecords": [],
"validatedAt": "2026-09-29T07:16:13.310Z",
"verificationTier": "standard",
"verificationSource": "native",
"providerStatus": null,
"providerCheckedAt": null,
"providerCreditCharged": null
}
FieldWhat it contains
email, normalizedEmail, domain, localPartThe address as sent, its normalized form and its parts
statusVerdict: valid, invalid, risky or unknown
score0 to 100 deliverability score
primaryReason, reasonsMain reason and every reason code in check order
isValidSyntax, hasMxRecord, mxRecordsSyntax and DNS mail-server results
isDisposable, isRoleBased, isFreeProviderList-classification flags
isCatchAll, smtpCheckCatch-all and SMTP probe results when those checks are on; smtpCheck is skipped otherwise
suggestedEmailLikely typo correction when one is found
verificationTier, verificationSourceTier used and whether the verdict is native or from premium verification
providerStatus, providerCheckedAt, providerCreditChargedPremium verification status, time and credit flag on premium rows
validatedAtWhen the address was checked

On a premium row, providerStatus holds the managed verdict, for example invalid_mx, and primaryReason becomes provider_invalid_mx.

Pricing

This Actor uses Pay per event with Apify platform usage included in the event price. You pay one Email validated event for each address checked and saved with the native workflow, one Premium email verified event for each credit-consuming premium verification saved, and one Actor Start event per run. Duplicate addresses and addresses beyond maxEmails add no events. The live Pricing tab on this page shows the current event prices.

Worked example in words: a standard run on 600 unique addresses costs 600 Email validated events plus one start event. Rerunning 40 of those as premium costs up to 40 Premium email verified events plus one start event.

Interactive API endpoints

This Actor also runs in Standby mode for instant lookups over HTTP. Open the live Endpoints/Standby tab on this page for the current request format and response shape.

Use with AI agents (MCP)

Connect the Actor to an MCP client through Apify MCP and ask:

Validate these 25 email addresses and group them into valid, risky, invalid and unknown. Show the typo suggestions and flag role-based and disposable addresses.

Agent checklist:

  1. Pass the addresses as an array in emails; keep checkSmtp off for a quick pass.
  2. Read rows with get-dataset-items; group by status and sort by score.
  3. Use primaryReason and reasons to explain each verdict, and validatedAt as the check time.
  4. Cost scope: one Email validated event per unique address, so the list length sets the spend.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~zerobounce-alternative/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"emails": ["jane@example.com", "info@acme.io"], "verificationTier": "standard"}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("khadinakbar/zerobounce-alternative").call(
run_input={"emails": ["jane@example.com", "info@acme.io"], "checkSmtp": False}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["email"], row["status"], row["score"], row["primaryReason"])

Best results

Starting situationHelpful actionExpected outcome
A routine list cleanstandard tier with checkSmtp: falseFast verdicts from syntax, DNS and classification
A high-stakes sendRerun unknown rows with premiumA managed verification verdict per address
Mailbox-level signalcheckSmtp: true with timeoutMs around 8000smtpCheck result per address
Catch-all domainscheckCatchAll: true together with checkSmtpisCatchAll filled in
Large listsSplit into runs of 1,000 with concurrency 5 to 15Steady, comparable results
Typos from signup formsApply suggestedEmail and rerunCorrected addresses validated

Builder's note

I designed every row to carry its own explanation, so status and score always come with primaryReason and the full reasons list, and a reviewer can see why an address was graded the way it was. I kept SMTP probing optional because many mail servers answer it inconsistently, and DNS plus classification signals already settle most list-cleaning decisions quickly.

FAQ

Do I need my own verification API key for premium?

No. The premium tier uses the Actor owner's managed credential.

What does risky mean?

risky marks addresses that are deliverable in form but carry a catch-all, role-based or disposable signal.

Can I validate a single address?

Yes. Pass it as a one-item array in emails.

Responsible use

This Actor performs protocol-level checks for legitimate list hygiene, signup screening and CRM cleanup. Email addresses are personal data under laws such as the GDPR, so process them with a lawful basis, honor opt-outs and suppression lists, and follow anti-spam rules in your jurisdiction.