Email Verifier
Pricing
from $1.36 / 1,000 email verifieds
Email Verifier
Verify email lists with your own ZeroBounce, NeverBounce, MillionVerifier, BounceBan, or Reoon API key. One flat row per address: valid, invalid, catch all, risky, or unknown, plus role, free, and disposable flags. Your key, your credits. Clay ready.
Pricing
from $1.36 / 1,000 email verifieds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Check whether the email addresses on a list will deliver, using the verification service you already pay for. List addresses, pick your service, paste your API key, and get one flat row per address: a plain verdict (valid, invalid, catch all, risky, or unknown), the service's own status, and whether the address is a role address, a free mailbox, or a disposable one. Use it to clean a lead list before a campaign, check a Clay column, or keep bounces down on a sending domain.
The actor works with five services: ZeroBounce, NeverBounce, MillionVerifier, BounceBan, and Reoon Email Verifier. It sends each address to the service you choose, on your key, and reads the answer back into the same columns whichever service you use. It does not open a connection to any mail server itself.
Features
- Your service, your key. Bring the account you already have. No new signup, and your service's own accuracy and pricing apply.
- One layout for every service. The five services spell their answers differently (catch-all, catchall, accept_all). Every row uses the same five verdicts and the same columns, so you can switch services without changing your Clay table.
- Credits protected. An address with broken syntax is never sent, so it costs you nothing at your service. A repeated address is checked once. If your service rejects the key or says the account is out of credits, the run stops sending at once and labels the rest.
- You pay this actor for answers only. An address is charged only when your service gave a real verdict. Unknown answers and errors are free.
- Spelling fixes. Where your service suggests one,
did_you_meancarries the fix, such as gmail.com for gmial.com.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
emails | array | Addresses to verify, 1 to 5,000 per run | |
email | string | One address, for a Clay column with one address per row. Added to emails | |
provider | string | zerobounce | Your service: zerobounce, neverbounce, millionverifier, bounceban, or reoon, in any capitalization |
api_key | secret string | Your API key for that service | |
concurrency | string | 5 | Addresses checked at the same time, 1 to 20 |
max_charge_usd | string | Stop before an actor charge that would pass this amount |
Every input except emails accepts a string, which is what Clay sends. emails is a list; in Clay, map one address per row to email, or wrap a column in a one item list. Your key is stored encrypted by Apify, sent only to the service you chose, and never written to a row or the log.
Where to find your key:
| Service | Where the key is |
|---|---|
| ZeroBounce | Dashboard, API section, API keys |
| NeverBounce | Apps, create a Custom Integration app, API key |
| MillionVerifier | Dashboard, API |
| BounceBan | Account, API key |
| Reoon Email Verifier | Dashboard, API and integrations |
Output
One row per address. Every row has the same columns.
| Field | Type | Meaning |
|---|---|---|
input | string | The entry as you gave it. |
email | string | The address checked, trimmed and lowercase. Empty when the input is not an email address. |
domain | string | The part after the @. |
verdict | string | valid: the mailbox accepts mail. invalid: the service checked and it will not deliver, or the input is not an email address. catch_all: the domain accepts every address, so this mailbox cannot be confirmed. risky: it may deliver but is a spam trap, abuse, disposable, or full mailbox. unknown: the service could not tell. |
provider | string | The verification service that checked the address. |
provider_status | string | The status as the service wrote it, for example catch-all at ZeroBounce or catchall at NeverBounce. |
provider_sub_status | string | The service's extra detail where it gives one: the sub status at ZeroBounce, the flags at NeverBounce, the sub result at MillionVerifier, accept_all at BounceBan. |
is_role | boolean | true for a shared address such as info@ or sales@, where the service says so. |
is_free_email | boolean | true for a free mailbox provider such as Gmail, where the service says so. |
is_disposable | boolean | true for a temporary or throwaway address, where the service says so. |
did_you_mean | string | A spelling fix the service suggests, such as gmail.com for gmial.com. |
row_status | string | ok: the service gave a verdict of valid, invalid, catch_all, or risky (charged). inconclusive: the service answered unknown (free). not_sent: the input is not an email address, so it was not sent (free). error: the service failed, refused your key, or the run stopped before this address (free). |
error_reason | string | Why a row is inconclusive, not_sent, or error, for example invalid_syntax, the service's own message about your key or credits, or input_invalid for input the run could not use. |
billable_events_json | string | What this row was billed as, for example {"email-verified":1}. {} means free. |
checked_at | string | When the row was written, UTC. |
Example row:
{"input": "Jane Doe <Jane.Doe@Example.com>","email": "jane.doe@example.com","domain": "example.com","verdict": "valid","provider": "zerobounce","provider_status": "valid","provider_sub_status": null,"is_role": false,"is_free_email": false,"is_disposable": false,"did_you_mean": null,"row_status": "ok","error_reason": null,"billable_events_json": "{\"email-verified\":1}","checked_at": "2026-10-28T18:00:00.000Z"}
How each service's answer maps to the verdict:
| Verdict | ZeroBounce | NeverBounce | MillionVerifier | BounceBan | Reoon |
|---|---|---|---|---|---|
| valid | valid | valid | ok | deliverable | safe, role_account |
| invalid | invalid | invalid | invalid | undeliverable | invalid, disabled |
| catch_all | catch-all | catchall | catch_all | risky on an accept all domain | catch_all |
| risky | spamtrap, abuse, do_not_mail | disposable | disposable | risky | disposable, spamtrap, inbox_full |
| unknown | unknown | unknown | unknown | unknown | unknown |
A status a service adds later and the actor does not know yet is reported as unknown, never as invalid.
The run also writes a RUN_SUMMARY record to its key-value store with counts per verdict and row status, the requests made, and the charges.
Pricing
Two separate bills:
- Your verification service bills each check to your account there, at your plan's price. This actor never sees or changes that bill.
- This actor charges per event:
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
email-verified, one address your service answered valid, invalid, catch all, or risky | $0.0016 | $0.00152 | $0.00144 | $0.00136 |
apify-actor-start, once per run (one per GB of memory; the default 128 MB is one) | $0.0006 | $0.0006 | $0.0006 | $0.0006 |
Per 1,000 verified addresses: $1.60 on the free plan, $1.36 on Gold.
Free rows: an unknown answer, an error row, an address with broken syntax, and a repeat of an address in the same run. A run whose input is refused, for example with no key, writes one free row and charges only the run start.
Free plan cap: 1.50 USD of evaluation a month, about 938 verified addresses. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd, and it checks that limit before it sends addresses to your service, so it does not spend your service credits on addresses it could not return.
Mamba Labs pays the platform costs of your run.
Usage examples
Apify Console or API. Paste your addresses, pick your service, add your key, and start the run. Read the rows with GET https://api.apify.com/v2/datasets/{datasetId}/items.
{"emails": ["jane@example.com", "sales@example.org"],"provider": "neverbounce","api_key": "YOUR_NEVERBOUNCE_API_KEY"}
You supply the key. The Store example input holds YOUR_ZEROBOUNCE_API_KEY in api_key, which is a marker for your own key and not a working value. Replace it with your ZeroBounce key, or change provider and paste that service's key. A run that still carries the marker, or has no key, sends nothing to any service and writes one free input_invalid row that tells you to add your key; only the run start is charged.
Clay. Add an Apify column, pick this actor, map your email column to email, set provider, and paste your key in api_key. Filter on verdict.
Error handling
| Case | What you get |
|---|---|
| No addresses, an empty list, no key, an unknown service, a wrong type, or more than 5,000 addresses | One free row, row_status error, error_reason starting input_invalid:, and the run ends successfully. Only the run start is charged |
| An entry that is not an email address | A free row, row_status not_sent, verdict invalid, error_reason invalid_syntax. Not sent to your service |
| Your service rejects the key or says the account is out of credits | That row carries the service's message. The run sends nothing more, writes every remaining address as an error row whose note starts not_sent: with the same message, and ends successfully. All free |
| Your service rate limits or fails for a moment | Two more tries, 2 and 4 seconds apart, then a free error row |
| BounceBan is still checking (greylisting) | The actor polls BounceBan's free status call for the result rather than sending the address again |
| The run nears its timeout | It stops starting new addresses 90 seconds before the timeout, writes the rest as free not_started rows, and ends successfully |
Limitations
- The verdict is your service's. Accuracy, catch all handling, and what counts as risky differ by service and plan.
- Catch all domains accept every address, so most services cannot confirm a single mailbox on them. BounceBan resolves many of them; the others usually return catch all.
- The actor does not check mailboxes itself. Apify blocks the outbound mail port, so every mailbox check runs at your service.
- Your service's rate limits apply. Lower
concurrencyif your plan allows few checks per second.
Mamba Labs actor suite
Built by Mamba Labs.