Bulk Email Validation API | $0.90/1K | MX + Disposable
Pricing
from $0.90 / 1,000 address verifieds
Bulk Email Validation API | $0.90/1K | MX + Disposable
Validate email addresses in bulk. Syntax check, MX/DNS lookup, disposable and role-account detection, typo suggestions and a deliverability score. No SMTP probing. $0.90 per 1,000 emails.
Pricing
from $0.90 / 1,000 address verifieds
Rating
0.0
(0)
Developer
Extract Kit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Email Verifier & Validator — Bulk Email Validation
Clean your email list before you send. This Actor verifies email addresses in bulk and tells you which are safe to send to, which will bounce, and which are risky — with a reason for every decision.
No API key. No SMTP setup. No account anywhere else.
What it checks
| Check | What it catches |
|---|---|
| Syntax | Malformed addresses, per RFC 5321 length and character rules |
| Domain / MX | Domains that cannot receive mail at all |
| Typo detection | gmial.com → suggests gmail.com — recovers real customers from bad data |
| Disposable | Mailinator, Guerrilla Mail, temp-mail and ~100 other throwaway providers |
| Role accounts | info@, support@, sales@ — deliverable, but they hurt conversion and raise complaints |
| Free providers | Gmail, Yahoo, Outlook — valid, but not business contacts |
| Catch-all | Domains that accept everything, where "valid" means nothing |
| SMTP mailbox (optional) | Individual mailbox existence — see the honest note below |
Why bounce rate matters
Mailchimp, SendGrid and Klaviyo suspend accounts over high bounce rates, and above ~2% your domain reputation starts costing you inbox placement on the mail that does deliver. Verifying first is cheaper than recovering a burned sending domain.
Input
Paste addresses directly:
{"emails": ["ada@example.com", "support@gmail.com", "someone@mailinator.com", "typo@gmial.com"]}
Or point it at a list — the right approach for anything over a few hundred:
{"emailListUrl": "https://example.com/contacts.csv","csvColumn": "email"}
A plain .txt with one address per line works too. For Google Sheets: File → Share → Publish to web → CSV.
Output
One row per input address, in a shape you can filter directly:
{"email": "ada@example.com","normalized": "ada@example.com","canonical": "ada@example.com","status": "deliverable","score": 85,"reason": "mx_valid","domain": "example.com","mxFound": true,"mxHost": "mx.example.com","isDisposable": false,"isRoleAccount": false,"isFreeProvider": false,"didYouMean": null,"checkedAt": "2026-08-16T09:00:00.000Z"}
Four statuses:
deliverable— safe to sendundeliverable— do not send; it will bouncerisky— deliverable but low quality (role account, catch-all domain, or A-record-only)unknown— a check could not complete;reasonsays which
Filter on status, or on score >= 70 to keep deliverable and drop risky. The score is deterministic — the same address always scores the same, so your filters keep working tomorrow.
The run also writes a SUMMARY record with counts by status, so you can see your list quality at a glance.
Honest notes
These are the things most verifiers do not tell you. They are here because a wrong answer costs you more than a missing one.
SMTP checking is off by default, and that is deliberate. Outbound port 25 is blocked on Apify and virtually every cloud platform, so an SMTP probe will usually time out. Worse, Gmail and Outlook accept RCPT TO for addresses that do not exist, so a positive result there proves nothing anyway. When SMTP cannot answer, the address falls back to its DNS-level verdict and smtp.reason records why the probe failed — the score stays capped at mx_valid (85) and the reason is never smtp_verified, so a failed probe can never be mistaken for a confirmed mailbox.
What DNS-level verification can and cannot tell you. It proves the domain accepts mail. It cannot prove one specific mailbox exists. That distinction is reported honestly in reason (mx_valid means the domain is good, smtp_verified means the mailbox was confirmed) rather than being blurred into a single confident-looking "valid".
The disposable list is embedded, not fetched. That keeps the Actor from breaking when a third-party blocklist goes down, but it means isDisposable: false means "not on our list", not "definitely permanent".
Runs do not fail because an address is bad. An address that does not exist is a successful verification with a negative result. The run fails only if there is genuinely nothing to verify or DNS itself is unreachable.
De-duplication
On by default, and provider-aware: Gmail ignores dots and +tags, so a.da+news@gmail.com and ada@gmail.com are the same mailbox and are verified once. Every input row still appears in the output, so results line up with your source file row-for-row.
Pricing
Pay per verified address. You are charged only for results actually delivered to your dataset, one at a time, so your run budget cap is respected exactly.
Common uses
- Clean a list before a Mailchimp / SendGrid / Klaviyo campaign
- Validate signups at import time to keep junk out of the CRM
- De-risk a purchased or scraped lead list before outreach
- Recover mistyped addresses from signup forms via
didYouMean - Filter role accounts out of cold outreach
Integrations
Runs on a schedule, via API, or from Make, Zapier and n8n. Results export as JSON, CSV, Excel or XML.