Email Verifier Batch - Syntax MX SMTP Disposable Detection avatar

Email Verifier Batch - Syntax MX SMTP Disposable Detection

Pricing

Pay per usage

Go to Apify Store
Email Verifier Batch - Syntax MX SMTP Disposable Detection

Email Verifier Batch - Syntax MX SMTP Disposable Detection

Bulk email verifier: RFC 5322 syntax, MX lookup, 5400+ disposable-domain blocklist, role-based (info@/sales@) detection, optional SMTP HELO+RCPT probe (never sends mail), and a 0-1 confidence score. For lead-list cleanup and email-campaign hygiene.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Seibs.co

Seibs.co

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Email Verifier Batch

Bulk email-address verifier. RFC 5322 syntax + MX lookup + 5400+ disposable-domain blocklist + role-based detection + optional SMTP HELO/RCPT probe + 0-1 confidence score. No paid databases, no third-party verifier APIs - just DNS and SMTP.

What does Email Verifier Batch do?

Feed it a list of email addresses. For each one, the actor runs up to five checks and emits a single record with the verdict:

  1. Syntax check - RFC 5322 compliant validation via email-validator.
  2. MX lookup - asks DNS whether the domain accepts mail. Falls back to the A record (implicit MX per RFC 5321 5.1) when no MX exists.
  3. Disposable detection - matches the domain against a bundled blocklist of 5400+ known throwaway-email providers (mailinator, guerrillamail, 10minutemail, tempmail, and ~5400 more).
  4. Role-based detection - flags info@, sales@, support@, etc. so SDRs can skip group inboxes.
  5. SMTP probe (optional) - connects to the MX host on port 25 and issues HELO + MAIL FROM + RCPT TO. The DATA stage is never reached, so no email is ever sent. Tests an additional random-mailbox RCPT TO to detect catch-all domains. Returns deliverable / undeliverable / catch-all / unknown.

The five signals are combined into a confidence_score from 0.0 to 1.0. Disposable domains are capped at 0.30; SMTP-undeliverable addresses floor at 0.05.

Features

  • Five independent checks per address - failures in one check never block the others.
  • 5400+ bundled disposable-domain blocklist (sourced from the canonical disposable-email-domains GitHub project).
  • ~45 bundled role prefixes (info, sales, support, billing, hr, recruiting, no-reply, postmaster, ...).
  • SMTP probe never sends mail - RCPT TO only, then QUIT.
  • Catch-all detection - a second RCPT TO to a random local-part flags domains that accept everything.
  • Greylisting awareness - 4xx responses set greylisted=true and retry_recommended=true.
  • Per-email timeout - one slow MX never holds up the batch.
  • Concurrency-controlled (1-50 parallel) via asyncio + semaphore.
  • Errors are emitted as records, not run failures - you always get a row per input address.

Use cases

  • B2B sales prospecting - clean a list of scraped LinkedIn-derived emails before importing to your sequencer.
  • Lead-list cleanup - score a CSV from an outbound vendor; drop disposable + role-based + undeliverable before paying per-contact for upload.
  • Email-campaign hygiene - run before every send; bounces above 2% wreck deliverability and sender reputation.
  • Anti-bounce filtering - filter signups by confidence_score >= 0.6 to keep your transactional senders out of penalty boxes.
  • Form-spam reduction - reject signups where is_disposable=true at submit time.
  • CRM enrichment - pass every contact in your CRM through this monthly to flag departed-employee inboxes (catch-all + role + 4xx greylist patterns).

Input

FieldTypeRequiredDefaultNotes
emailsarray of stringsyes-List of addresses. Case-insensitive dedupe.
do_smtp_probebooleannotrueWhen false, only syntax/MX/disposable/role checks run. ~50x faster.
concurrencyintegerno101-50 parallel verifications.
timeout_secondsintegerno10Per-address ceiling for DNS + SMTP.

Output

One record per input email. Key fields:

  • email, normalized_email, local_part, domain
  • syntax_valid (bool)
  • mx_records (array of {host, priority})
  • has_mx (bool)
  • is_disposable (bool)
  • is_role_based (bool), role_type (matched prefix or null)
  • smtp_probe_result - deliverable / undeliverable / catch-all / unknown / null
  • smtp_response (raw SMTP code + message, for audit)
  • smtp_catch_all_tested, greylisted, retry_recommended
  • confidence_score (0-1)
  • verification_method (array of checks that ran)
  • warnings, error, checked_at

Two dataset views are provided: Overview (compact verdict table) and Detailed (every field).

Pricing (pay per event)

  • verification_basic - $0.0005 per email (syntax + MX + disposable + role + confidence score). Always charged.
  • verification_smtp - $0.001 per email when the SMTP probe actually completes. Skipped automatically when SMTP probing is disabled or the domain has no MX.

A 10K-list scan with SMTP enabled costs ~$15. The same scan against ZoomInfo or Hunter would run $100-300 depending on plan.

How the confidence score is computed

ConditionEffect
Syntax invalidscore = 0.0
No MX (and no fallback A)score = 0.05
SMTP undeliverablescore = 0.05
Syntax + MX present, no SMTP probebase = 0.55
SMTP deliverablebase = 0.95
SMTP catch-allbase = 0.55 (mailbox cannot be proven)
SMTP unknown (greylist / temp error)base = 0.45
Role-based local-part-0.10
Disposable domaincapped at 0.30

FAQ

Q: Does this send email? A: No. The SMTP probe stops at RCPT TO and immediately sends QUIT. The DATA stage - the only stage that actually transmits a message body - is never reached. This is the same technique every reputable email-verifier (Hunter, ZeroBounce, NeverBounce) uses.

Q: Why are some big-provider results unknown or catch-all? A: Gmail, Outlook, and many large providers refuse RCPT TO probes outright (they return a generic 250 for any address, which we report as catch-all) or rate-limit aggressively from datacenter IPs. For those, the syntax + MX + disposable + role signals are usually all you need; confidence_score accounts for this.

Q: What about greylisting? A: A 4xx response on RCPT TO sets greylisted=true and retry_recommended=true. Re-run the same input 5-15 minutes later and the MX will typically accept on the second attempt.

Q: Can I bring my own disposable-domain list? A: Not via input today - the bundled list is rebuilt at build time from the disposable-email-domains GitHub project. Open an issue or fork the actor if you need to layer in a custom list.

Q: Will this trip rate-limits or get my Apify IP blocked? A: SMTP RCPT TO is the universal verification primitive - it does not download mail, does not authenticate, and does not transmit a body. Keep concurrency at 10 or below for shared MX hosts (Gmail / Outlook / Yahoo) and you will be fine. The actor never reuses an SMTP session across addresses.

Q: How does this compare to ZoomInfo / Hunter / ZeroBounce? A: For the verification step specifically, the methodology is the same (syntax + MX + SMTP + disposable + role). What those vendors add is a contact database. This actor is the verification half - perfect for cleaning a list you already have.

Q: Can I schedule this? A: Yes. Pair with Apify Schedules + a webhook to your CRM and re-verify your active contact list every 30-90 days to catch employee turnover.

Limitations

  • SMTP probes against Gmail / Outlook / Yahoo will frequently land as catch-all or unknown - those providers refuse to disclose mailbox existence.
  • IPv6-only MX hosts work but the SMTP probe falls back to whichever address family the OS resolver returns first.
  • The actor does not perform deep SPF / DKIM / DMARC analysis - it answers "is this mailbox real" not "is this domain configured well to send mail".
  • Catch-all domains return confidence_score = 0.55 by design - the mailbox literally cannot be proven without sending an actual message.

Data sources

  • Disposable-domain list: disposable-email-domains/disposable-email-domains (GitHub, Creative Commons).
  • Role-prefix list: curated from RFC 2142 + common industry conventions.
  • DNS: any public resolver via dnspython.
  • SMTP: direct port-25 connection to the target's MX host.