Email Verifier Batch - Syntax MX SMTP Disposable Detection
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
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:
- Syntax check - RFC 5322 compliant validation via
email-validator. - 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.
- Disposable detection - matches the domain against a bundled blocklist of 5400+ known throwaway-email providers (mailinator, guerrillamail, 10minutemail, tempmail, and ~5400 more).
- Role-based detection - flags
info@,sales@,support@, etc. so SDRs can skip group inboxes. - SMTP probe (optional) - connects to the MX host on port 25 and issues
HELO+MAIL FROM+RCPT TO. TheDATAstage is never reached, so no email is ever sent. Tests an additional random-mailboxRCPT TOto detect catch-all domains. Returnsdeliverable/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-domainsGitHub project). - ~45 bundled role prefixes (info, sales, support, billing, hr, recruiting, no-reply, postmaster, ...).
- SMTP probe never sends mail -
RCPT TOonly, thenQUIT. - Catch-all detection - a second
RCPT TOto a random local-part flags domains that accept everything. - Greylisting awareness - 4xx responses set
greylisted=trueandretry_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.6to keep your transactional senders out of penalty boxes. - Form-spam reduction - reject signups where
is_disposable=trueat 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
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
emails | array of strings | yes | - | List of addresses. Case-insensitive dedupe. |
do_smtp_probe | boolean | no | true | When false, only syntax/MX/disposable/role checks run. ~50x faster. |
concurrency | integer | no | 10 | 1-50 parallel verifications. |
timeout_seconds | integer | no | 10 | Per-address ceiling for DNS + SMTP. |
Output
One record per input email. Key fields:
email,normalized_email,local_part,domainsyntax_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/ nullsmtp_response(raw SMTP code + message, for audit)smtp_catch_all_tested,greylisted,retry_recommendedconfidence_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
| Condition | Effect |
|---|---|
| Syntax invalid | score = 0.0 |
| No MX (and no fallback A) | score = 0.05 |
| SMTP undeliverable | score = 0.05 |
| Syntax + MX present, no SMTP probe | base = 0.55 |
| SMTP deliverable | base = 0.95 |
| SMTP catch-all | base = 0.55 (mailbox cannot be proven) |
| SMTP unknown (greylist / temp error) | base = 0.45 |
| Role-based local-part | -0.10 |
| Disposable domain | capped 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-allorunknown- 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.55by 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.