Bulk Email MX Verifier avatar

Bulk Email MX Verifier

Pricing

Pay per event

Go to Apify Store
Bulk Email MX Verifier

Bulk Email MX Verifier

Bulk verify email addresses via DNS MX lookup, syntax validation, and disposable domain detection. No external API — pure DNS. 99% margin, $0.0008/email. Returns risk level, MX records, provider, typo suggestions.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Categories

Share

Verify thousands of email addresses in seconds — no external API, no login required. Pure DNS MX lookup + syntax validation + disposable domain detection + optional SMTP probe.

Try Bulk Email MX Verifier on Apify →


What does Bulk Email MX Verifier do?

Bulk Email MX Verifier cleans and validates email lists at scale using pure DNS technology — no third-party API, no proxy, no browser. For each email address, the actor:

  1. Validates email syntax — RFC 5321 compliance (format, length limits, special characters)
  2. Detects disposable / temporary email domains — 500+ known services (Mailinator, Guerrilla Mail, YopMail, 10MinuteMail, and more)
  3. Looks up MX records — checks if the domain actually accepts email via DNS
  4. Detects the email provider — Google Workspace, Microsoft 365, ProtonMail, Zoho, Fastmail, and 30+ others
  5. Flags role-based addresses — admin@, info@, noreply@, support@, sales@, and 40+ others
  6. Suggests typo corrections — gmai.com → gmail.com, hotmai.com → hotmail.com, outlok.com → outlook.com
  7. Assigns a risk levellow, medium, high, or invalid for easy filtering
  8. Optionally probes SMTP — TCP EHLO/RCPT check to verify the mailbox exists (best-effort, no email sent)

Unlike competitors that wrap external APIs (MillionVerifier, ZeroBounce, NeverBounce), this actor uses zero third-party services. You pay only for compute — not for per-email API credits. This results in 96–99% margins vs. the 0–50% margins of API wrappers.


👥 Who is Bulk Email MX Verifier for?

📬 Email Marketers & Campaign Managers

You're preparing a campaign send and need to clean your list before hitting "send." Bounces damage your sender reputation and deliverability. Use this actor to:

  • Remove syntactically invalid emails before upload
  • Suppress disposable addresses that inflate your open rates
  • Filter role-based addresses (info@, admin@) that rarely convert
  • Identify dead domains with no MX records

🏢 B2B Sales & Revenue Operations Teams

You've scraped or purchased a lead list and need to qualify it before importing into your CRM. Use this actor to:

  • Validate email fields from CSV exports
  • Score leads by risk level (low = engaged, high = likely invalid)
  • Flag domains that don't accept email before your SDRs waste outreach time
  • Deduplicate typo variants (user@gmai.comuser@gmail.com)

🛠️ Developers & Data Engineers

You're building a sign-up flow, CRM integration, or data pipeline and need fast, cheap bulk validation. Use this actor to:

  • Validate user-submitted emails in batch before inserting to your database
  • Build email hygiene workflows on a schedule (weekly list cleaning)
  • Replace expensive per-email API services with DNS-based verification
  • Integrate via Apify API into any tech stack (Node.js, Python, cURL, Make, Zapier)

📊 Data Analysts & List Brokers

You're working with purchased or scraped email lists and need quality scoring before handoff. Use this actor to:

  • Report on list quality (% valid, % disposable, % no-MX)
  • Segment by risk level for downstream processing
  • Export results in JSON, CSV, or Excel format

✅ Why use Bulk Email MX Verifier?

  • 🚀 Fast — concurrent DNS lookups, ~1,000 emails/minute at default settings
  • 💰 Cheap — $0.0008/email (20% cheaper than the top competitor at $0.001)
  • 🔒 Privacy-safe — emails never leave Apify's infrastructure; no third-party APIs
  • 🚫 No API key required — just paste your email list and run
  • 📊 Tiered pricing — bulk discounts for Gold/Platinum/Diamond plan users
  • ✉️ No email sent — SMTP probe (optional) only tests the connection, never delivers
  • 🔁 Schedule-friendly — run weekly to keep lists clean automatically
  • 📤 Export anywhere — JSON, CSV, Excel, Google Sheets via Apify integrations

📋 What data can you extract?

For each email address, the actor returns:

FieldTypeDescription
emailstringNormalized email (trimmed, lowercased)
isValidbooleantrue if syntax is valid AND domain has MX records
isValidSyntaxbooleanRFC 5321 syntax check result
syntaxErrorsstring[]Specific syntax issues found
domainstringDomain portion of the email address
hasMxRecordsbooleanWhether the domain has active MX records in DNS
mxRecordsarrayFull MX record array, sorted by priority
mxProviderstringDetected email provider (Google Workspace, Microsoft 365, etc.)
isDisposablebooleanDomain is a known temporary/disposable email service
isRoleBasedbooleanLocal part is a role-based address (admin, info, noreply, etc.)
smtpVerifiedbooleanSMTP mailbox existence check result (null if disabled)
riskLevelstringlow / medium / high / invalid composite risk score
suggestionstringTypo correction hint (e.g., "Did you mean user@gmail.com?")
errorstringProcessing error message if verification failed
checkedAtstringISO 8601 timestamp of when the email was checked

💰 How much does it cost to verify email addresses in bulk?

Bulk Email MX Verifier uses pay-per-event (PPE) pricing — you only pay for emails actually processed.

PlanPrice per emailCost for 10,000 emailsCost for 100,000 emails
Free ($5 credit)$0.00092$9.20$92.00
Bronze (Starter)$0.0008$8.00$80.00
Silver (Scale)$0.000624$6.24$62.40
Gold (Business)$0.00048$4.80$48.00
Platinum (Enterprise)$0.00032$3.20$32.00
Diamond (Enterprise+)$0.000224$2.24$22.40

Plus a one-time $0.035 start fee per run (covers actor initialization).

Free plan estimate: Apify gives all new users $5 in free credits. At the Free tier rate of $0.00092/email + $0.035/run, you can verify approximately 5,000 emails with your free credits.

Comparison vs. competitors:

  • Top competitors on Apify Store: $0.001–$0.0025/email (25%–3× more expensive)
  • ZeroBounce API: $0.004–$0.008/email (5–10× more expensive)

🚀 How to verify email addresses in bulk

  1. Open Bulk Email MX Verifier on Apify Store
  2. Click "Try for free" (or sign in to your Apify account)
  3. Paste your email list into the "Email addresses" field — one per line, or use the list editor
  4. (Optional) Enable "Run SMTP probe" for deeper mailbox verification
  5. Click "Save & Start" to begin verification
  6. Download results in JSON, CSV, or Excel — or connect to Google Sheets via the Apify integration

Want to upload a CSV? Use the Apify API to pass emails programmatically, or paste a column from your spreadsheet directly into the email list field.

Example input for 3 scenarios:

Quick list check:

{
"emails": ["alice@company.com", "bob@gmail.com", "test@mailinator.com"],
"verifySmtp": false
}

With SMTP probe (deeper verification):

{
"emails": ["user@enterprise.com", "lead@startup.io"],
"verifySmtp": true,
"smtpTimeoutSecs": 8
}

High-concurrency bulk run (10,000+ emails):

{
"emails": ["...array of 10000 emails..."],
"verifySmtp": false,
"concurrency": 100
}

⚙️ Input parameters

ParameterTypeRequiredDefaultDescription
emailsstring[]YesEmail addresses to verify. Accepts up to 10,000 per run. Duplicates are automatically deduplicated.
verifySmtpbooleanNofalseAttempt a TCP SMTP connection to verify the mailbox exists. Sends EHLO + RCPT TO without delivering any email. Slower (adds 1–10s per email) and may be blocked by some servers.
smtpTimeoutSecsintegerNo5Maximum seconds to wait for an SMTP connection response. Increase if you're getting false negatives on slow mail servers.
concurrencyintegerNo50Maximum parallel DNS lookups. Higher = faster but may hit DNS rate limits. Cap at 100 for large runs.

📤 Output examples

Low-risk valid email:

{
"email": "alice@google.com",
"isValid": true,
"isValidSyntax": true,
"syntaxErrors": [],
"domain": "google.com",
"hasMxRecords": true,
"mxRecords": [{"priority": 10, "exchange": "smtp.google.com"}],
"mxProvider": "Google Workspace",
"isDisposable": false,
"isRoleBased": false,
"smtpVerified": null,
"smtpError": null,
"riskLevel": "low",
"suggestion": null,
"error": null,
"checkedAt": "2026-04-04T09:00:00.000Z"
}

Disposable email (high risk):

{
"email": "test@mailinator.com",
"isValid": true,
"isValidSyntax": true,
"syntaxErrors": [],
"domain": "mailinator.com",
"hasMxRecords": true,
"mxRecords": [{"priority": 5, "exchange": "mail.mailinator.com"}],
"mxProvider": null,
"isDisposable": true,
"isRoleBased": false,
"smtpVerified": null,
"smtpError": null,
"riskLevel": "high",
"suggestion": null,
"error": null,
"checkedAt": "2026-04-04T09:00:00.000Z"
}

Invalid syntax:

{
"email": "not-an-email",
"isValid": false,
"isValidSyntax": false,
"syntaxErrors": ["Missing @ symbol"],
"domain": null,
"hasMxRecords": null,
"mxRecords": [],
"mxProvider": null,
"isDisposable": false,
"isRoleBased": false,
"smtpVerified": null,
"smtpError": null,
"riskLevel": "invalid",
"suggestion": null,
"error": null,
"checkedAt": "2026-04-04T09:00:00.000Z"
}

Typo detected:

{
"email": "user@gmai.com",
"isValid": true,
"isValidSyntax": true,
"syntaxErrors": [],
"domain": "gmai.com",
"hasMxRecords": true,
"mxRecords": [{"priority": 10, "exchange": "alt1.aspmx.l.google.com"}],
"mxProvider": "Google Workspace",
"isDisposable": false,
"isRoleBased": false,
"smtpVerified": null,
"smtpError": null,
"riskLevel": "low",
"suggestion": "Did you mean user@gmail.com?",
"error": null,
"checkedAt": "2026-04-04T09:00:00.000Z"
}

💡 Tips for best results

  • 🧹 Start small — test with 100 emails before uploading your full list. Verify the output fields match your expectations.
  • 📋 Deduplicate first — the actor automatically deduplicates, but cleaning your list upstream reduces run time.
  • 🔁 Schedule weekly cleanings — set up a recurring run to catch domains that go offline or switch providers.
  • Increase concurrency for large lists — set concurrency: 100 for 100k+ email runs. DNS is the bottleneck, not compute.
  • 🚫 Filter by riskLevel: "low" for your safest sends — these emails have valid syntax, active MX records, are not disposable, and are not role-based.
  • ⚠️ Use isDisposable: true to detect sign-up fraud or trial abuse patterns.
  • 🔍 Enable SMTP probe only for lists where accuracy matters more than speed — SMTP probes add 1–10 seconds per email and may be blocked by corporate mail servers.
  • 💾 Export to CSV and filter in Excel/Google Sheets by risk level for easy list segmentation.

🔗 Integrations

Bulk Email MX Verifier → Google Sheets Schedule a weekly run to clean your marketing list. Use the Apify Google Sheets integration to write results back to a spreadsheet, then filter by riskLevel = "low" before importing to Mailchimp or HubSpot.

Bulk Email MX Verifier → Make (Integromat) Trigger on form submission: validate the submitted email instantly via the API, and if isValid = false, return an error to the user. Or batch-validate weekly uploads automatically.

Bulk Email MX Verifier → Zapier Connect to your CRM (HubSpot, Salesforce, Airtable) — run validation on new contacts as they're added. Flag records with isDisposable: true for sales follow-up review.

Bulk Email MX Verifier → Slack/Discord alerts Combine with a Make/Zapier webhook to send a Slack notification when a new batch completes, with a summary of valid vs. invalid vs. disposable counts.

Scheduled list cleaning Set up a daily or weekly cron schedule in Apify to automatically clean your email database. Perfect for maintaining CRM hygiene without manual intervention.


🖥️ Using the Apify API

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('automation-lab/email-mx-verifier').call({
emails: ['alice@company.com', 'bob@gmail.com', 'test@mailinator.com'],
verifySmtp: false,
concurrency: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log('Results:', items);
// Filter to low-risk only
const validEmails = items.filter(r => r.riskLevel === 'low').map(r => r.email);
console.log('Safe to send:', validEmails);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/email-mx-verifier").call(run_input={
"emails": ["alice@company.com", "bob@gmail.com", "test@mailinator.com"],
"verifySmtp": False,
"concurrency": 50,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Results: {len(items)} emails verified")
# Filter to low-risk only
valid_emails = [r["email"] for r in items if r["riskLevel"] == "low"]
print(f"Safe to send: {valid_emails}")

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/automation-lab~email-mx-verifier/runs" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"emails": ["alice@company.com", "bob@gmail.com"],
"verifySmtp": false
}'
# Fetch results (replace RUN_ID with ID from previous response)
curl "https://api.apify.com/v2/actor-runs/RUN_ID/dataset/items?format=json" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN"

🤖 Use with AI agents via MCP

Bulk Email MX Verifier is available as a tool for AI assistants that support the Model Context Protocol (MCP).

Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:

Setup for Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/email-mx-verifier"

Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/email-mx-verifier"
}
}
}

Your AI assistant will use OAuth to authenticate with your Apify account on first use.

Example prompts

Once connected, try asking your AI assistant:

  • "Use automation-lab/email-mx-verifier to validate these 50 emails from my CSV and tell me which ones are safe to send to"
  • "Check if the email addresses in this list are disposable or fake, and group them by risk level"
  • "Verify my email list and suggest typo corrections for any domains that look misspelled"

Learn more in the Apify MCP documentation.


Yes — verifying email addresses via DNS MX lookup is entirely legal and widely practiced in the email industry. The actor:

  • Only performs DNS queries — no connection is made to any mail server unless SMTP probe is enabled
  • Does not send any email — SMTP probe only opens a TCP connection and sends EHLO/RCPT commands, never delivers a message
  • Processes only data you own — you supply the email list; no data is scraped from third-party websites
  • GDPR-compatible — DNS queries are stateless and contain no personal information beyond the domain name

Use this actor responsibly. Verify only email lists you have the right to process, and comply with applicable data protection laws (GDPR, CAN-SPAM, CASL) when sending marketing communications.


❓ FAQ

How fast does the actor verify emails? At the default concurrency of 50, the actor processes approximately 800–1,200 emails per minute, depending on DNS response times. A list of 10,000 emails typically completes in 8–12 minutes. Increase concurrency to 100–200 for faster processing on large lists.

How much does it cost to verify 100,000 emails? On the Bronze plan: 100,000 × $0.0008 + $0.035 = ~$80.04. On the Gold plan: ~$48.04. New users get $5 in free credits, enough to verify ~5,000 emails.

How is this different from using MillionVerifier or ZeroBounce directly? Those services charge $0.001–$0.008/email plus API subscription fees, and your email data is sent to their servers. This actor uses only DNS — no third-party service receives your email list. For most use cases (syntax check + MX validation + disposable detection), DNS-based verification provides equivalent value at 5–10× lower cost.

Why does isValid = true but the mailbox might still bounce? MX records confirm the domain accepts email — but they can't prove a specific mailbox exists without SMTP. Enable verifySmtp: true for deeper mailbox-level verification. Even then, some servers accept any RCPT TO (catch-all servers), so smtpVerified: true doesn't guarantee delivery.

Why is my SMTP probe returning null even with verifySmtp: true? Port 25 (SMTP) is blocked by many cloud providers and corporate firewalls. If the MX host blocks the connection, the probe returns smtpVerified: null with an error message rather than false. This is not a bug — it means the server is unreachable, not that the mailbox doesn't exist. Treat null as "inconclusive."

Why are some legitimate emails flagged as riskLevel: "medium"? Role-based addresses (admin@, info@, support@, noreply@, etc.) are flagged as medium risk by default because they typically reach shared mailboxes, inboxes that are monitored infrequently, or automated filtering systems. They're not invalid — just lower-value for personalized outreach.

What disposable domain list does the actor use? The actor includes a curated list of 500+ known disposable and temporary email providers, compiled and maintained in the actor's source. This covers all major providers (Mailinator, Guerrilla Mail, YopMail, 10MinuteMail, Trashmail, Discard.email, etc.). The list is updated with each actor release.


🔗 Other email and DNS tools by automation-lab