Bulk Email Verifier — MX, Disposable & Deliverability
Pricing
from $0.70 / 1,000 results
Bulk Email Verifier — MX, Disposable & Deliverability
Verify thousands of emails at once: syntax, MX/domain check, disposable & role-based detection, free-provider flag and a deliverability score. Fast, cheap, keyless bulk email validation for lead lists and list cleaning.
Pricing
from $0.70 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
0
Monthly active users
a day ago
Last modified
Categories
Features
Share
✉️ Bulk Email Verifier — Syntax, MX, Disposable & Deliverability Score
Verify 1,000+ to millions of email addresses in seconds — RFC syntax validation, live DNS MX lookup, 7,900+ disposable domain blocklist, role-based & free-provider flags, and a 0–100 deliverability score.
Verify thousands — or millions — of email addresses at once. This bulk email verifier cleans any email list and returns, for every address: syntax validity, live MX / domain mail-server verification, disposable & temporary email detection, role-based inbox detection, a free-provider flag, and a 0–100 deliverability score with a clear valid / risky / invalid status. It is a fast, high-throughput, keyless email verification API — no login, no coding, no per-credit SaaS markup. Use this email verifier to scrub B2B lead lists, cold-outreach prospects, newsletter subscribers, signup forms, and scraped contacts before you hit send.
Export verified results to JSON, CSV, Excel, or API (plus automatic Key-Value Store OUTPUT summary for instant synchronous API integrations).
🚀 Built for B2B growth marketers, sales & SDR teams, lead-generation agencies, RevOps engineers, recruiters, and developers who need to validate email addresses in bulk, protect domain sender reputation, eliminate hard bounces, and segment CRM lists at scale.
⚡ At a glance
| Capability | Details |
|---|---|
| 📥 Scale & throughput | Verify 1,000+ to millions of emails per run with zero artificial caps (~500 emails in <4 seconds) |
| 🌐 Live DNS & MX check | Resolves live DNS MX records (hasMx, primary mxHost) with intelligent domain-level caching |
| 🗑️ Disposable blocklist | Matches against a live-refreshed community blocklist of 7,900+ disposable/throwaway domains (Mailinator, Yopmail, 10MinuteMail, GuerrillaMail…) |
| 👥 Role & free-provider flags | Flags 40+ role-based prefixes (info@, sales@, support@, admin@, billing@) and 25+ consumer providers (Gmail, Outlook, Yahoo, iCloud, Proton) |
| 🎯 Deliverability score (0–100) | Deterministic deliverabilityScore (92 business valid, 82 free valid, 65 role risky, 35 disposable risky, 0 invalid) |
| ⚡ Parallel concurrency | Configurable worker pool (maxConcurrency: 1–200, default 50) with input-order preservation |
| 🔄 Sync API & KVS mirror | Pushes every record to the default Dataset and writes a structured summary + items payload to Key-Value Store OUTPUT |
| 💾 Export & automation | Bulk export JSON, CSV, Excel, XML, or connect directly to Clay, Apollo, Smartlead, Instantly, HubSpot, Make, Zapier, and n8n |
🔎 Why verify emails in bulk?
A dirty email list quietly destroys outbound and lifecycle email programs. Every hard bounce signals to Gmail, Microsoft 365, and Yahoo that your sending hygiene is poor — dragging down domain and IP reputation until even your warmest emails land in spam. Disposable sign-ups inflate database counts while never converting, and generic role accounts (info@, admin@, security@) carry lower reply rates and higher complaint risk. Furthermore, marketing automation platforms (HubSpot, Klaviyo, Mailchimp, ActiveCampaign) charge by contact tier — meaning every dead or throwaway address is a recurring monthly tax.
Traditional SaaS email verification tools (ZeroBounce, NeverBounce, Hunter, MillionVerifier) charge per-credit fees that quickly become expensive when cleaning 10,000 to 1,000,000 scraped leads. This bulk email verifier processes your entire list in a single run on Apify. Because it is DNS/MX-driven with domain caching, it verifies whether each domain has active mail exchangers (MX records), screens out syntax errors and throwaway providers, classifies role vs. personal and business vs. free accounts, and assigns an actionable 0–100 score in seconds.
Common reasons teams use Bulk Email Verifier:
- 🎯 Scrub cold-outreach & B2B lead lists before importing into Instantly, Smartlead, Lemlist, Apollo, or Outreach.
- 🛡️ Cut hard-bounce rates below 1% and protect primary and secondary sending domains.
- 🚫 Purge disposable & burner signups from SaaS free trials, waitlists, lead magnets, and newsletter forms.
- 🗂️ Segment B2B vs. B2C contacts using
isFreeProvider(false= corporate domain,true= Gmail/Yahoo/Outlook) andisRoleBased(false= named individual,true= shared team inbox). - 🔗 Verify scraped leads automatically in multi-actor pipelines right after running a Google Maps, LinkedIn, website contact, or directory scraper.
- 💰 Audit purchased or legacy CRM databases before paying per-seat or per-contact storage fees.
✨ What this email verifier does
- ✅ Zero-cap bulk email verification — pass 10, 1,000, 50,000, or 1,000,000+ email addresses in
emails; every address is verified and emitted in exact input order. - ✅ RFC-5322 style syntax validation — catches malformed strings, missing
@symbols, invalid local characters, and broken TLD structures before touching DNS. - ✅ Live DNS MX record resolution — queries DNS for each domain's Mail Exchange (
MX) records, sorts by priority, and extracts the primary mail server (mxHost, e.g.aspmx.l.google.com,outlook-com.olc.protection.outlook.com). - ✅ Smart domain MX caching — caches DNS lookups per unique domain (
mxCache) so a 100,000-row list across 5,000 domains performs only 5,000 DNS queries instead of 100,000. - ✅ 7,900+ disposable domain detection — downloads the latest
disposable-email-domainsblocklist at startup (with a built-in high-frequency fallback list) whencheckDisposable: true. - ✅ 40+ role-based inbox classifier — detects shared departmental prefixes (
info,admin,support,sales,contact,billing,hr,careers,press,legal,privacy,security,noreply, etc.). - ✅ 25+ free email provider classifier — flags consumer webmail domains (
gmail.com,outlook.com,yahoo.com,icloud.com,proton.me,aol.com,zoho.com,gmx.com,yandex.com,fastmail.com, etc.). - ✅ Clear status + 0–100 deliverability score — assigns
status(valid,risky,invalid),isValid("true"/"false"),deliverabilityScore("0"–"92"), and a human-readablereason. - ✅ 100-email built-in demo mode — running with an empty
emails: []input automatically verifies a realistic 100-address benchmark mix (corporate, free webmail, role accounts, disposable burners, dead domains, and bad syntax) in seconds. - ✅ Dataset + Key-Value Store
OUTPUTmirror — writes individual rows to the default Dataset and saves a complete summary object (totalVerified,uniqueDomains,summary,items) to the Key-Value StoreOUTPUTkey for synchronousrun-syncAPI calls.
🎯 Use cases
| Persona | How they use Bulk Email Verifier |
|---|---|
| 📈 Outbound Sales & SDR Teams | Filter scraped prospect lists to keep only status = "valid" and deliverabilityScore = "92" (corporate named accounts) before launching cold sequences. |
| 🧲 Lead-Generation Agencies | Clean 10,000+ scraped contacts per client delivery, stripping dead domains (hasMx = "false") and throwaway addresses (isDisposable = "true"). |
| 🛠️ RevOps & CRM Administrators | Enrich HubSpot/Salesforce leads with mxHost (to identify Google Workspace vs. Microsoft 365 tenants), isFreeProvider, and isRoleBased. |
| 📧 Newsletter & Lifecycle Marketers | Validate subscriber imports and prune invalid / disposable signups to keep bounce rates low and inbox placement high. |
| ⚡ Clay, Make & n8n Builders | Call the Actor via synchronous webhook/API to score and route inbound form signups in real time. |
| 👔 Technical Recruiters & Sourcers | Verify candidate personal and work email addresses before sending sourcing campaigns. |
📥 Input
Paste your email addresses (one per line in the Console UI, or as a JSON array via API). All fields are optional — leaving emails empty triggers a 100-address mixed demo run.
| Field | Type | Default | Description |
|---|---|---|---|
emails | array of strings | 5-email prefill (100 on empty {}) | Email addresses to verify (strings or {email} objects). Supports 1,000+ to millions of addresses per run. |
checkDisposable | boolean | true | Match domains against the live 7,900+ disposable/temporary email blocklist. |
maxConcurrency | integer | 50 | Number of parallel verification workers (1–200). Increase to 100–200 for lists over 10,000 emails. |
proxyConfiguration | object | { "useApifyProxy": false } | Optional Apify Proxy settings. Off by default because DNS MX resolution runs directly without needing HTTP proxies. |
Example input — verify a lead list
{"emails": ["john.doe@gmail.com","nathan.allen@twilio.com","info@apify.com","sales@microsoft.com","test@mailinator.com","nobody@thisdomaindoesnotexist-xyz9.com"],"checkDisposable": true,"maxConcurrency": 50}
📤 Output
The Actor emits one structured record per input email to the Dataset (in exact input order) and mirrors the full summary + items to the Key-Value Store OUTPUT record.
Example 1 — Corporate deliverable address (valid, score 92)
{"email": "nathan.allen@twilio.com","status": "valid","isValid": "true","deliverabilityScore": "92","reason": "deliverable","domain": "twilio.com","syntaxValid": "true","hasMx": "true","mxHost": "alt1.aspmx.l.google.com","isDisposable": "false","isRoleBased": "false","isFreeProvider": "false","scrapedAt": "2026-11-10T03:00:00.000Z"}
Example 2 — Role-based business address (risky, score 65)
{"email": "info@apify.com","status": "risky","isValid": "false","deliverabilityScore": "65","reason": "role-based address","domain": "apify.com","syntaxValid": "true","hasMx": "true","mxHost": "aspmx.l.google.com","isDisposable": "false","isRoleBased": "true","isFreeProvider": "false","scrapedAt": "2026-11-10T03:00:00.010Z"}
Example 3 — Disposable or dead-domain address (risky / invalid)
{"email": "nobody@thisdomaindoesnotexist-xyz9.com","status": "invalid","isValid": "false","deliverabilityScore": "0","reason": "no MX record (domain cannot receive mail)","domain": "thisdomaindoesnotexist-xyz9.com","syntaxValid": "true","hasMx": "false","mxHost": "","isDisposable": "false","isRoleBased": "false","isFreeProvider": "false","scrapedAt": "2026-11-10T03:00:00.020Z"}
📋 Output field reference
🎯 Verdict & Deliverability Scoring
| Field | Type | Coverage | Description |
|---|---|---|---|
email | string | 🟢 High (100%) | Normalized (trimmed, lower-cased) email address checked. |
status | string | 🟢 High (100%) | Overall classification: valid, risky, or invalid. |
isValid | string | 🟢 High (100%) | "true" when status === "valid", "false" otherwise (string-typed for clean CSV/Excel export). |
deliverabilityScore | string | 🟢 High (100%) | Confidence score ("92" business deliverable, "82" free provider, "65" role-based, "35" disposable, "0" invalid). |
reason | string | 🟢 High (100%) | Human-readable explanation (deliverable, deliverable (free provider), role-based address, disposable / temporary domain, no MX record (domain cannot receive mail), invalid syntax). |
🌐 Domain, DNS MX & Classification Flags
| Field | Type | Coverage | Description |
|---|---|---|---|
domain | string | 🟢 High (~99%) | Domain portion after @ (empty only when syntax lacks @). |
syntaxValid | string | 🟢 High (100%) | "true" if the address passes RFC-style syntax validation, "false" otherwise. |
hasMx | string | 🟢 High (100%) | "true" if the domain has valid DNS Mail Exchange (MX) records. |
mxHost | string | 🟢 High (~90%) | Lowest-priority (primary) mail server hostname (e.g. smtp.google.com, mail.protection.outlook.com); empty if hasMx === "false". |
isDisposable | string | 🟢 High (100%) | "true" if the domain is in the 7,900+ disposable/temporary email blocklist. |
isRoleBased | string | 🟢 High (100%) | "true" if the local prefix is a shared team/department role (info, sales, support, admin, etc.). |
isFreeProvider | string | 🟢 High (100%) | "true" if the domain is a free consumer webmail provider (gmail.com, outlook.com, yahoo.com, etc.). |
scrapedAt | string | 🟢 High (100%) | ISO 8601 timestamp when verification completed. |
📊 Scoring & status decision matrix
| Condition | status | isValid | deliverabilityScore | reason | Recommended Action |
|---|---|---|---|---|---|
Malformed syntax (no @, bad chars/TLD) | invalid | "false" | "0" | invalid syntax | ❌ Drop immediately |
Domain has no DNS MX record | invalid | "false" | "0" | no MX record (domain cannot receive mail) | ❌ Drop immediately |
| Domain has MX, but is on disposable blocklist | risky | "false" | "35" | disposable / temporary domain | ⚠️ Drop for B2B / newsletters |
Domain has MX, local part is role-based (info@) | risky | "false" | "65" | role-based address | 🟡 Segment separately (good for local SMBs, risky for enterprise cold outreach) |
Domain has MX, free consumer provider (gmail.com) | valid | "true" | "82" | deliverable (free provider) | ✅ Safe to send (consumer / B2C) |
| Domain has MX, custom corporate domain, personal local | valid | "true" | "92" | deliverable | 🟢 Highest quality B2B lead |
🔁 Scale, throughput & KVS OUTPUT
Unlike page-by-page web crawlers, Bulk Email Verifier is a high-concurrency DNS stream processor:
- 1,000+ to millions of emails: There is zero cap on the
emailsarray length. Pass 1,000, 10,000, or 500,000 addresses in a single run. - Unique-domain MX caching: Once
google.com,microsoft.com, or a company's domain is resolved via DNS, itsMXstatus andmxHostare served from memory in0 msfor every subsequent email sharing that domain. - Preserved input order: Results are written in deterministic order matching your input list.
- Synchronous KVS
OUTPUTsupport: In addition to streaming rows into the default Dataset, the Actor writes{ totalVerified, uniqueDomains, summary: { valid, risky, invalid }, items }to the default Key-Value Store underOUTPUT.
⚙️ How to use
- Open Bulk Email Verifier in the Apify Console.
- Paste your email list into Emails to verify (
emails, one address per line) — or leave it empty to test the 100-email demo sample. - Keep Flag disposable / temporary emails (
checkDisposable) enabled and set Verification speed (maxConcurrency, default50). - Click Start — verification of hundreds or thousands of emails finishes in a few seconds.
- Open the Storage / Dataset tab to export your cleaned list to CSV, Excel (XLSX), or JSON.
Run via Apify API (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~bulk-email-verifier/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"emails": ["john.doe@gmail.com","nathan.allen@twilio.com","info@apify.com","test@mailinator.com","nobody@thisdomaindoesnotexist-xyz9.com"],"checkDisposable": true,"maxConcurrency": 100}'
🐍 Programmatic usage (Python & Node.js)
Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"emails": ["john.doe@gmail.com","nathan.allen@twilio.com","info@apify.com","sales@microsoft.com","test@mailinator.com","nobody@thisdomaindoesnotexist-xyz9.com",],"checkDisposable": True,"maxConcurrency": 100,}run = client.actor("haketa/bulk-email-verifier").call(run_input=run_input)for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{row['email']} -> {row['status']} (score: {row['deliverabilityScore']}, mx: {row['mxHost']})")
Node.js (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/bulk-email-verifier').call({emails: ['john.doe@gmail.com','nathan.allen@twilio.com','info@apify.com','test@mailinator.com',],checkDisposable: true,maxConcurrency: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Verified ${items.length} emails:`, items);
🔗 Outbound & RevOps pipeline integrations
Drop Bulk Email Verifier directly into your automated GTM workflows:
- Clay, Apollo, Instantly & Smartlead: Verify scraped B2B prospect emails in bulk before pushing
status === "valid"contacts into cold email sequences. - HubSpot, Salesforce & Pipedrive: Enrich inbound leads with
deliverabilityScore,isFreeProvider,isRoleBased, andmxHost(to segment Google Workspace vs. Microsoft 365 companies). - Make, Zapier & n8n: Call the Actor synchronously via webhook on form submissions to reject
invalidandisDisposable === "true"signups in real time. - Google Sheets & Airtable: Clean entire spreadsheet columns of 1,000+ emails in seconds without paying per-credit verification SaaS fees.
💡 Tips for best results
- 🎯 Filter by
deliverabilityScore >= 80for cold outreach: Keeping scores82and92(status === "valid") gives you a clean, bounce-resistant list of personal and corporate inboxes. - 🏢 Keep
deliverabilityScore === "65"(isRoleBased === "true") for local business scraping: When scraping Google Maps or local directories,info@andcontact@are often read directly by the business owner. - 🖥️ Segment by
mxHostfor tech-stack targeting: UsemxHostcontaininggoogle.comvs.outlook.com/pphosted.com/mimecast.comto segment prospects by email provider or security gateway. - ⚡ Raise
maxConcurrencyto150–200on 10K+ lists: Because DNS queries are lightweight, higher concurrency speeds up cold-domain resolution dramatically.
⚠️ Honest limitations
- DNS/MX-level verification (no SMTP port 25 mailbox pinging): Cloud providers block outbound TCP port 25, and modern enterprise mail servers (Google Workspace, Office 365, Cloudflare, Proofpoint) use catch-all routing or tarpitting against unauthenticated
RCPT TOprobes. This verifier guarantees domain mail-server deliverability (MX) + syntax + disposable/role/free hygiene, which catches 100% of dead domains, typos, and burner domains without risking blacklisting. - Duplicate input rows: Every input row is verified and returned in order. If your input list contains duplicate emails, deduplicate before uploading or filter by
emailin your export.
❓ FAQ
How many emails can I verify in one run, and how fast is it?
You can verify 1,000+ to millions of email addresses in a single run. Thanks to parallel worker pools (maxConcurrency up to 200) and in-memory domain MX caching, 500–1,000 mixed emails typically finish in 3 to 8 seconds.
Do I need proxies or external API keys?
No. Verification runs directly over DNS and community blocklists — no API keys, no SMTP credentials, and no proxies are required (useApifyProxy: false by default).
What happens if I run the Actor with empty input {}?
It automatically verifies a built-in 100-email benchmark sample spanning corporate addresses, free webmail providers, role-based accounts, disposable domains, unregistered domains, and syntax errors so you can inspect the exact output schema immediately.
Why are booleans and scores formatted as strings ("true", "92")?
Apify's output schema validation and CSV/Excel exporters handle string-typed primitives most consistently across all downstream tools without type coercion issues.
Can I retrieve the verified list plus summary counts in a single API call?
Yes. Read the OUTPUT key from the run's default Key-Value Store to get totalVerified, uniqueDomains, summary ({ valid, risky, invalid }), and the full items array.
🔗 Related scrapers
- Email Finder & Verifier — B2B Email Lookup API — find and verify work emails from name + company/domain.
- Email Pattern Finder — Name + Domain to Business Email — detect company email naming conventions (
{first}.{last}@domain.com). - Email & Contact Extractor — Emails, Phones, Socials — crawl company websites to extract contact details.
- Bulk Company Name to Domain Finder — convert company names into official domains and logos.
- Bulk Phone Number Validator — validate phone numbers to E.164 with carrier and line-type detection.
📋 Changelog
v1.2 (2026-11) — 100-Email Empty-Run Benchmark & KVS OUTPUT Mirror
- Expanded empty-run sample to 100 addresses: Running with
{}(noemailsprovided) now verifies a comprehensive 100-address benchmark dataset (corporate, free webmail, role-based, disposable, dead-domain, and malformed syntax) in ~4 seconds. - Added KVS
OUTPUTsummary mirror: Every run now writes{ totalVerified, uniqueDomains, summary: { valid, risky, invalid }, items }to the default Key-Value StoreOUTPUTrecord while preserving deterministic input order. - Verified 1,000+ zero-cap throughput: Confirmed zero artificial limits on input array size with domain-cached DNS MX resolution.
v1.1 (2026-10) — Live 7,900+ Disposable Blocklist & MX Host Extraction
- Added live sync with the community
disposable-email-domainsblocklist (7,900+domains) plus offline fallback. - Added primary
mxHostextraction sorted by lowest MX priority number.
v1.0 (2026-09) — Initial Release
- Initial release with RFC syntax validation, DNS MX lookup, role/free-provider classification, and 0–100 deliverability scoring.