Email Verifier & Checker - Bulk Verify Email Addresses
Pricing
from $0.86 / 1,000 email verifieds
Email Verifier & Checker - Bulk Verify Email Addresses
Email verifier and email checker: verify email addresses in bulk with a live SMTP mailbox check, MX, catch-all, disposable and role detection. Email validation that cuts bounces. $0.95 per 1,000, pay only for valid/invalid.
Pricing
from $0.86 / 1,000 email verifieds
Rating
5.0
(2)
Developer
PNDA
Maintained by CommunityActor stats
3
Bookmarked
51
Total users
38
Monthly active users
2 days ago
Last modified
Categories
Share
β Email Verifier & Validator β Bulk SMTP Email Verification, Catch-All Check
Bulk email verifier and email validator for cleaning email lists before you send. Paste a list (or send it through the API) and get, for every address, a clear verdict β valid, invalid, catch-all, risky or unknown β with the reason behind it.
For each email the Actor checks the syntax, looks up the domain's MX records, then runs a live SMTP mailbox check (RCPT TO) against the recipient's mail server to confirm that the mailbox exists. No email is ever sent. It also flags catch-all domains, disposable / temporary email providers, role accounts (info@, sales@, support@) and free providers (Gmail, Outlook, Yahoo), and suggests fixes for typos like gmial.com β gmail.com.
You only pay for conclusive results: $0.95 per 1,000 emails returned as valid or invalid. Catch-all, risky, unknown and duplicate emails are free.
Export results to JSON, CSV, Excel or HTML, or plug the Actor into n8n, Make, Zapier, Clay, Google Sheets or your own code through the Apify API.
π Don't have the emails yet? Email Finder finds the work email of a person from their name and company domain, already verified ($4.99 per 1,000 emails found).
π‘ Who is it for?
- Cold email & sales teams cleaning lead lists from Apollo, LinkedIn, Google Maps or any scraper before a campaign β fewer bounces, better sender reputation.
- Growth & marketing teams running email list hygiene on newsletters and CRM exports (HubSpot, Salesforce, Pipedrive, Mailchimp, Brevo).
- Agencies verifying client lists in bulk without a monthly SaaS subscription.
- Developers who need an email validation API for sign-up forms, onboarding or data pipelines.
- Data teams enriching and deduplicating contact databases.
βοΈ How it works
Each unique email goes through five checks, in order:
| Step | Check | What it catches |
|---|---|---|
| 1 | Syntax validation | Malformed addresses (john@@acme, not-an-email) |
| 2 | Typo detection | gmial.com, hotmial.com, yahooo.com, gmail.con, acme.cmo β corrected suggestion |
| 3 | DNS / MX lookup | Domains with no mail server (double-checked with a second DNS lookup to avoid false invalid) |
| 4 | Live SMTP mailbox check | Mailboxes that don't exist, are disabled or have a full inbox (SMTP codes 550β553, etc.) |
| 5 | Catch-all, disposable & role detection | Accept-all domains, throwaway providers (Mailinator, Yopmail, 10minutemailβ¦), generic inboxes |
Duplicates are removed case-insensitively, so every address is verified β and billed β once.
π₯ Input
| Field | Type | Required | Description |
|---|---|---|---|
emails | array of strings | β | The emails to verify β one per line in the Console, an array through the API |
checkCatchAll | boolean | β | true (default): catch-all domains get the status catch-all. false: they are reported as risky. Never billed. |
timeoutSecs | integer | β | Max wait per mail server, 5β120 s (default 30). Servers that don't answer return unknown (free). |
concurrency | integer | β | Emails verified in parallel, 1β10 (default 5) |
Example input
{"emails": ["rand@sparktoro.com","john@gmial.com","info@acme.com","test@mailinator.com"],"checkCatchAll": true,"timeoutSecs": 30,"concurrency": 5}
π€ Output
One row per unique email. Example item:
{"email": "rand@sparktoro.com","status": "valid","reason": "Mailbox exists","suggestion": null,"syntaxValid": true,"domain": "sparktoro.com","mxFound": true,"mxHost": "aspmx.l.google.com","disposable": false,"roleAccount": false,"freeProvider": false,"catchAll": false,"smtpConnected": true,"deliverable": true,"fullInbox": false,"disabled": false,"smtpCode": null,"smtpMessage": null,"charged": true}
A typo example:
{"email": "info@gmial.com","status": "invalid","reason": "Domain has no mail server (MX)","suggestion": "info@gmail.com","mxFound": false,"roleAccount": true,"charged": true}
A SUMMARY record in the run's key-value store counts results per status, duplicates and billed emails.
Statuses
| Status | Meaning | Billed |
|---|---|---|
valid | The mail server confirmed the mailbox exists. Safe to send. Role accounts stay valid with roleAccount: true. | β yes |
invalid | Bad syntax, no MX record, mailbox rejected or disabled (SMTP 550β553 "user unknown"). Remove it. | β yes |
catch-all | The domain accepts every address (accept-all), so the single mailbox can't be confirmed. | β free |
risky | Disposable / temporary email provider, full inbox, or catch-all when checkCatchAll is off. | β free |
unknown | No clear answer: timeout, greylisting, temporary server error. Re-run later. | β free |
Field reference
| Field | Meaning |
|---|---|
status / reason | The verdict and a human-readable explanation |
suggestion | Corrected address when the domain looks like a typo of a common provider |
syntaxValid | RFC-style syntax check passed |
mxFound / mxHost | The domain has a mail server, and which one (Google Workspace, Microsoft 365β¦) |
smtpConnected / deliverable | The SMTP server answered / accepted the mailbox |
smtpCode / smtpMessage | Raw SMTP reply code and message when the server rejected the address |
catchAll | The domain accepts any address |
disposable | Throwaway / temporary email provider |
roleAccount | Generic inbox: info@, sales@, support@, admin@β¦ |
freeProvider | Gmail, Outlook, Yahoo, iCloud⦠|
fullInbox / disabled | Mailbox full / mailbox disabled |
charged | Whether this row was billed |
π Why use this Email Verifier
- β Real SMTP verification, not just syntax and MX β the mail server itself is asked whether the mailbox exists.
- β Pay only for conclusive answers β catch-all, risky and unknown are free. On B2B lists, where 20β40% of addresses sit on catch-all domains, that is a real saving.
- β
Fewer false
invalidβ "no MX" answers are double-checked with a second DNS lookup before an email is rejected. - β Typo correction built in β recover leads instead of deleting them.
- β Budget-safe β set Maximum cost per run and the Actor never goes over it.
- β No API key, no subscription, no credits that expire β pay per result, export anywhere.
- β Pipeline-ready β chain it after any scraper, or call it from n8n, Make, Zapier or the Apify API.
π Comparison
| This Actor | Typical Store email verifiers | Email verification SaaS | |
|---|---|---|---|
| Price per 1,000 | $0.95 | $0.89 β $5.00 | monthly plans or prepaid credits |
| Catch-all billed | No | Yes | Usually yes |
| Unknown / timeout billed | No | Yes | Varies |
| Duplicates billed | No (deduplicated) | Often yes | Varies |
| Live SMTP mailbox check | β | β / partial | β |
| Typo suggestions | β | Rare | Some |
Example β 1,000 B2B emails with 30% on catch-all domains: you are billed for ~700 results, about $0.67.
πΌ Use cases
- Clean a cold email list before uploading it to Instantly, Lemlist, Smartlead or Apollo sequences.
- Lower your bounce rate under 2% to protect domain reputation and deliverability.
- Validate emails scraped from Google Maps, LinkedIn, YouTube channels or websites.
- CRM hygiene β re-verify old contacts quarterly and drop dead mailboxes.
- Sign-up form validation β call the API synchronously and reject disposable or mistyped emails.
- Lead enrichment β keep only
validemails, flagcatch-allfor a lower-priority sequence.
π° Pricing
Store discounts: on Apify Silver, Gold, Platinum and Diamond plans, some events cost up to 20 % less. The Pricing tab of the Store page shows the exact price for each plan.
Pay per event: $0.95 per 1,000 verified emails ($0.00095 per email returned valid or invalid), plus Apify's tiny per-run start fee. Catch-all, risky, unknown and duplicate emails cost nothing.
| Run | Emails | Max cost |
|---|---|---|
| Small list | 100 | ~$0.10 |
| Campaign list | 1,000 | ~$0.95 |
| Large list | 10,000 | ~$9.50 |
| Database cleanup | 100,000 | ~$95 |
Costs are a maximum: every catch-all or unknown result lowers the bill.
Works with a free Apify account too. Free-plan accounts can use every feature at the same per-result prices, paid from their monthly Apify credit. The only limits are your credit and your maximum cost per run.
π Use it through the API
Synchronous call β send emails, get results back in the same request:
curl -X POST "https://api.apify.com/v2/acts/pnda~email-verifier/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"emails": ["rand@sparktoro.com", "nobody@example.com"]}'
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("pnda/email-verifier").call(run_input={"emails": ["rand@sparktoro.com"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["email"], item["status"], item["reason"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('pnda/email-verifier').call({ emails: ['rand@sparktoro.com'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
β FAQ
Does it send emails to the addresses?
No. The SMTP conversation stops at RCPT TO, before any message is sent. Recipients see nothing.
How accurate is the email verification?
valid and invalid come straight from the recipient's mail server, so they are as reliable as SMTP allows. When the server can't give a definite answer, the email is reported as catch-all, risky or unknown instead of being guessed β and you are not charged.
What is a catch-all email? A catch-all (accept-all) domain accepts mail for any address, so no SMTP verifier can confirm one specific mailbox. Many Google Workspace and Microsoft 365 company domains are configured this way. These results are free here.
Why do I get unknown?
Some servers delay unknown senders (greylisting) or answer slowly. The Actor retries once; if the answer is still unclear, the result is unknown and free. Re-run those emails later or raise timeoutSecs.
Can it detect disposable and temporary emails?
Yes β Mailinator, Yopmail, 10minutemail, Guerrilla Mail and similar providers are flagged disposable and returned as risky.
How fast is it?
About 60 emails in 12 seconds with concurrency: 10. Slow mail servers take longer; lists of tens of thousands run fine in a single run.
Can I verify a CSV file?
Paste the email column into the emails field, or read your CSV in code and send the array through the API. Export results back to CSV or Excel from the dataset.
Is it a ZeroBounce / NeverBounce / Hunter alternative? For list cleaning, yes: same kind of SMTP verification, pay-as-you-go, no subscription, and you don't pay for catch-all or unknown results.
Can I use it on the free Apify plan? Yes. It works with a free Apify account too, at the same prices, paid from your monthly Apify credit (pricing).
How do I control spending? Set Maximum cost per run in the run options. The Actor stops before it would exceed it.
Does it store my data? The Actor only checks whether a mailbox exists; it doesn't store or enrich personal data beyond your run's dataset, which you control and can delete at any time.
Related actors
- Email Extractor: Need emails first? Extract the contacts published on a list of websites, already verified.
- Email Finder: Have a name and a company? Find the person's work email, verified.
- Google Maps API & Scraper: Building a local B2B list? Get businesses with their website emails, then verify them here.
- Shopify & WooCommerce Stores Database: Building an e-commerce list? Start from Shopify and WooCommerce stores filtered by country and category.
βΆοΈ Start now
Paste your email list. Click Run. Download the clean list. Valid emails in, bounces out β and you only pay for real answers.