First release.
Billing. One event, email-verified, charged only on a decisive verdict:
valid, invalid or disposable. catch_all and unknown are always free,
and duplicates are folded before any work is done.
Verification.
- Per-domain calibration probe: a random address is tested first, so a real
mailbox confirmation is never confused with a server that accepts everything.
- SMTP reply classifier that separates "this recipient is dead" from "this
server refused us" — Microsoft 365's
550 5.4.1 ... Access denied is a
mailbox rejection, 550 5.7.1 ... Spamhaus is not.
- DNS level: RFC 5322 syntax, NXDOMAIN, RFC 7505 null MX, MX names that resolve
to nothing, and implicit-MX A/AAAA fallback.
- 11,582 disposable domains, role-account and free-provider flags, and
single-edit typo suggestions tight enough that
apify.com suggests nothing.
- Provider-aware de-duplication folding Gmail dots and
+tags.
Network. Apify Actors run on AWS EC2, which blocks outbound ports 25, 465
and 587, and Apify Proxy will not tunnel CONNECT host:25. The Actor probes the
route once at startup, reports smtp_egress_blocked instead of stalling on
every domain, and bills nothing for the checks it could not run. Supply
proxyUrl (HTTP CONNECT or SOCKS5) to switch mailbox checks on.
Inputs. Pasted list, CSV/TXT upload or URL, or another Actor's dataset ID.
Schemas. Output schema declares both outputs - the dataset and the SUMMARY
key-value store record - so Console, the GET Run API and MCP agents discover
them without guessing. The dataset schema carries per-field titles,
descriptions, examples and enums, plus three views: Overview, "What you paid
for" (reconcile the invoice against the billed column), and Full diagnostics
with the nested SMTP evidence flattened into columns.
Audit. benchmark/run.mjs reproduces the published accuracy figures against
an independent DNS-over-HTTPS resolver: 0 false invalid of 31, 0 false
disposable of 12, 15/15 dead domains, 15/15 malformed, 4/4 typos, 0 typo
false positives across 120 healthy-domain rows.