Email Address Validator — ZeroBounce Alternative
Pricing
from $0.90 / 1,000 email validateds
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
Maintained by CommunityActor 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,scoreandprimaryReasonsit at the top of every row, so filtering a list takes one column. - Every signal visible.
isDisposable,isRoleBased,isFreeProvider,hasMxRecordandmxRecordsshow why an address scored the way it did. - Typo help.
suggestedEmailproposes a fix when a domain looks like a common misspelling. - Optional SMTP and catch-all checks. Turn on
checkSmtpandcheckCatchAllwhen you want a mailbox-level signal on top of DNS checks. - Two verification tiers.
standardruns the native checks;premiumadds a managed third-party verification verdict inproviderStatus, 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
standardtier for routine list cleaning, andpremiumwhen 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
emailshere.
How it compares with ZeroBounce
| Decision | This Actor | ZeroBounce | Good fit |
|---|---|---|---|
| Scope | Syntax, MX, disposable, role, free-provider, typo and optional SMTP signals with a score per address | A broader email-validation and deliverability suite | This Actor for a focused validation step in an Apify or agent workflow |
| Billing | Pay per event per validated address | Credits and subscriptions | Compare on the same list size |
| Automation | Apify API, schedules, MCP and a Standby endpoint | Its own API and integrations | Whichever 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}
| Field | Type | What it controls |
|---|---|---|
emails | array of strings | One to 1,000 full email addresses. Required. |
verificationTier | string | standard native checks, or premium with a managed verification verdict. Default standard. |
checkSmtp | boolean | Run a live SMTP RCPT TO probe after syntax and MX checks. Default false. |
checkCatchAll | boolean | Test whether the domain accepts any address; works together with checkSmtp. Default false. |
maxEmails | integer | Cap on unique addresses processed, 1 to 1,000. Default 1000. |
concurrency | integer | Addresses checked in parallel, 1 to 50. Default 10. |
timeoutMs | integer | SMTP 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}
| Field | What it contains |
|---|---|
email, normalizedEmail, domain, localPart | The address as sent, its normalized form and its parts |
status | Verdict: valid, invalid, risky or unknown |
score | 0 to 100 deliverability score |
primaryReason, reasons | Main reason and every reason code in check order |
isValidSyntax, hasMxRecord, mxRecords | Syntax and DNS mail-server results |
isDisposable, isRoleBased, isFreeProvider | List-classification flags |
isCatchAll, smtpCheck | Catch-all and SMTP probe results when those checks are on; smtpCheck is skipped otherwise |
suggestedEmail | Likely typo correction when one is found |
verificationTier, verificationSource | Tier used and whether the verdict is native or from premium verification |
providerStatus, providerCheckedAt, providerCreditCharged | Premium verification status, time and credit flag on premium rows |
validatedAt | When 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:
- Pass the addresses as an array in
emails; keepcheckSmtpoff for a quick pass. - Read rows with
get-dataset-items; group bystatusand sort byscore. - Use
primaryReasonandreasonsto explain each verdict, andvalidatedAtas the check time. - 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 ApifyClientclient = 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 situation | Helpful action | Expected outcome |
|---|---|---|
| A routine list clean | standard tier with checkSmtp: false | Fast verdicts from syntax, DNS and classification |
| A high-stakes send | Rerun unknown rows with premium | A managed verification verdict per address |
| Mailbox-level signal | checkSmtp: true with timeoutMs around 8000 | smtpCheck result per address |
| Catch-all domains | checkCatchAll: true together with checkSmtp | isCatchAll filled in |
| Large lists | Split into runs of 1,000 with concurrency 5 to 15 | Steady, comparable results |
| Typos from signup forms | Apply suggestedEmail and rerun | Corrected 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.