{"name":"email-validator","id":"sfoln/email-validator","title":"Email Validator – MX & Disposable Check","description":"Validate email lists without sending mail: strict syntax, domain and MX records (incl. null MX), disposable and free-mail domains, role accounts, typo fixes, SPF and DMARC. $0.40 per 1,000 emails, no SMTP probing. Need mailbox-level checks? Use Email Verifier.","version":"0.1","status":"ready","family":{"id":"company-lead-intelligence","name":"Company & lead intelligence","description":"Company enrichment, contact discovery, tech-stack detection, hiring signals, job listings, public tenders, Shopify stores, marketplace listings, NPI provider records, e-mail and phone validation.","actors":13},"categories":["LEAD_GENERATION","DEVELOPER_TOOLS","AUTOMATION"],"availability":"public","seoTitle":"Email Validator API – $0.40 per 1,000 Emails","seoDescription":"Bulk email validator API: syntax, MX and null MX, disposable, free-mail and role checks with typo fixes, SPF and DMARC. $0.40 per 1,000 emails, no SMTP.","summary":"Validate email addresses in bulk without sending any mail: each address gets a verdict (ok, role, disposable, no_mail_server, domain_not_found or invalid_syntax) from a strict syntax check, the domain's MX records (including RFC 7505 null MX), a list of about 9,900 disposable domains, free-mail and role-account lists, a typo suggestion (gmial.com → gmail.com) and, optionally, the domain's SPF and DMARC policy. Built for cleaning sign-up and lead lists, blocking throw-away addresses in forms, and AI agents that need a quick yes/no before they email someone. $0.40 per 1,000 emails.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":10,"events":[{"name":"email","title":"Checked email","description":"Charged once per email address that received a verdict from the local checks: invalid syntax, domain not found, no mail server, disposable, role account or ok. Addresses whose domain could not be looked up (DNS failure) are not charged.","priceUsd":0.0004}]},"input":{"description":"Paste email addresses (one per line) or pass an array. Each address produces one dataset record with a verdict, flags and a typo suggestion. Nothing is sent to the mailboxes.","required":["emails"],"fields":[{"name":"emails","title":"Emails","type":"array","required":true,"description":"Email addresses to validate, one per line. Duplicates (also differently written forms of one address) are removed. Also accepts objects with an `email` field. Accounts on the Apify free plan can process up to 10 email addresses per run.","prefill":["support@apify.com","jane.doe@gmial.com","info@example.com"],"editor":"stringList"},{"name":"checkSpfDmarc","title":"Check SPF and DMARC","type":"boolean","required":false,"description":"Also read each domain's SPF record and DMARC policy (two extra DNS lookups per domain, cached for the run). Turn off for the fastest runs on very large lists.","default":true},{"name":"maxEmails","title":"Max emails","type":"integer","required":false,"description":"Safety cap on the number of addresses validated in this run; addresses beyond it are ignored and counted as inputItemsDropped in the OUTPUT record.","default":10000,"minimum":1,"maximum":100000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"How many addresses are validated in parallel (1–20).","default":10,"minimum":1,"maximum":20},{"name":"includeRaw","title":"Include raw check result","type":"boolean","required":false,"description":"Attach the unmodified pre-check result (every field of the local check, e.g. the local part and whether DNS was consulted) to each record.","default":false}]},"exampleInput":{"emails":["support@apify.com","jane.doe@gmial.com","info@example.com"]},"outputFields":[{"name":"input","type":"string | object","title":"Input","description":"The address as you sent it.","example":"Jane.Doe@Gmial.com"},{"name":"email","type":"string | null","title":"Email","description":"Normalized address: lower case, ASCII (punycode) domain, without spaces, <…> or mailto:. Null when the syntax is invalid.","example":"jane.doe@gmial.com"},{"name":"verdict","type":"string","title":"Verdict","description":"invalid_syntax | domain_not_found | no_mail_server | disposable | role | ok | unknown (DNS failed: not charged).","example":"disposable"},{"name":"quality","type":"string","title":"Quality","description":"good (passed every check) | risky (role account, likely typo, or not checkable) | bad (cannot or should not receive mail).","example":"bad"},{"name":"reason","type":"string","title":"Reason","description":"Short explanation of the verdict."},{"name":"deliverable","type":"string","title":"Deliverable","description":"no = cannot receive mail; unknown = only a mailbox-level (SMTP) check could tell. This Actor never answers yes."},{"name":"domain","type":"string | null","title":"Domain","description":"Lower-case ASCII domain of the address."},{"name":"canonicalEmail","type":"string | null","title":"Canonical email","description":"Provider-aware form for de-duplication (Gmail ignores dots and +tags; Outlook, iCloud, Proton, Fastmail ignore +tags)."},{"name":"syntaxValid","type":"boolean","title":"Syntax valid","description":"Strict RFC 5321/5322 dot-atom syntax as mailbox providers accept it."},{"name":"syntaxError","type":"string | null","title":"Syntax error","description":"Why the syntax is invalid, e.g. missing_at, multiple_at, local_invalid, domain_invalid, tld_invalid."},{"name":"domainExists","type":"boolean | null","title":"Domain exists","description":"false: NXDOMAIN or an unknown top-level domain; null: not checked."},{"name":"mx","type":"array","title":"MX hosts","description":"Mail exchangers by preference (a null MX is reported in nullMx)."},{"name":"nullMx","type":"boolean","title":"Null MX","description":"The domain publishes an RFC 7505 null MX: it accepts no email."},{"name":"hasMailServer","type":"boolean | null","title":"Has mail server","description":"MX hosts, or the A/AAAA fallback of RFC 5321; null when not checked."},{"name":"mailProvider","type":"string | null","title":"Mail provider","description":"google | microsoft | zoho | proton | … | other, guessed from the MX hosts."},{"name":"disposable","type":"boolean","title":"Disposable","description":"Throw-away mailbox domain (CC0 list of about 9,900 domains, including common typo domains)."},{"name":"freeProvider","type":"boolean","title":"Free provider","description":"Free webmail such as Gmail, Outlook or Yahoo."},{"name":"role","type":"boolean","title":"Role account","description":"Shared functional mailbox such as info@, sales@ or support@."},{"name":"typoSuggestion","type":"string | null","title":"Did you mean","description":"The address with a likely mistyped domain corrected (jane@gmial.com → jane@gmail.com)."},{"name":"domainSpf","type":"object | null","title":"Domain SPF","description":"{ record, allQualifier, includes, multipleRecords } of the domain's SPF record; null when absent or not checked."},{"name":"domainDmarc","type":"object | null","title":"Domain DMARC","description":"{ policy, subdomainPolicy, pct, rua, record } of _dmarc.<domain>; null when absent or not checked."},{"name":"spfDmarcLookup","type":"string | null","title":"SPF/DMARC lookup","description":"ok | failed: failed means the TXT lookups failed, so a null domainSpf / domainDmarc is unknown rather than absent; null when not checked."},{"name":"status","type":"string","title":"Status","description":"ok | error | skipped_budget | skipped_free_plan | skipped_unmetered","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"Whether this record incurred a pay-per-event charge."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"Pay-per-event event charged for this record (present only when charged)."},{"name":"chargedCount","type":"integer","title":"Events charged","description":"Events actually charged when the charge came back short (present only then; a warning explains it)."},{"name":"source","type":"string","title":"Source","description":"dns: the checks ran on DNS lookups and bundled lists."},{"name":"fetchedAt","type":"string","title":"Checked at","description":"ISO timestamp."},{"name":"error","type":"object","title":"Error","description":"{ code, message, provider?, status? } when status is not ok: dns_lookup_failed, timeout; codes set by the runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed."},{"name":"warnings","type":"array","title":"Warnings","description":"Notes about this record, e.g. a charge that came back short."},{"name":"raw","type":"object","title":"Raw check result","description":"The unmodified pre-check result (only with includeRaw)."}],"outputExample":{"input":"support@apify.com","email":"support@apify.com","verdict":"role","quality":"risky","reason":"Role account (a shared mailbox such as info@ or sales@), not a person","deliverable":"unknown","domain":"apify.com","canonicalEmail":"support@apify.com","syntaxValid":true,"syntaxError":null,"domainExists":true,"mx":["aspmx.l.google.com","alt1.aspmx.l.google.com","alt2.aspmx.l.google.com","aspmx2.googlemail.com","aspmx3.googlemail.com"],"nullMx":false,"hasMailServer":true,"mailProvider":"google","disposable":false,"freeProvider":false,"role":true,"typoSuggestion":null,"domainSpf":{"record":"v=spf1 a mx include:_spf.google.com include:mailgun.org -all","multipleRecords":false,"allQualifier":"-all","includes":["_spf.google.com","mailgun.org"]},"domainDmarc":{"record":"v=DMARC1; p=reject; sp=reject; pct=100","policy":"reject","subdomainPolicy":"reject","pct":100,"rua":[]},"status":"ok","charged":true,"chargedEvent":"email","source":"dns","fetchedAt":"2026-10-14T10:00:00.000Z"},"faq":[{"question":"Does it check whether the mailbox exists?","answer":"No. It never connects to the mail server (SMTP probing from cloud IPs is unreliable and gets blocked). It settles what DNS and the bundled lists can settle: invalid syntax, domains that do not exist or accept no mail, and disposable domains. For a mailbox-level verdict (valid, invalid, catch-all) run the addresses that pass through Email Verifier."},{"question":"Which addresses are charged?","answer":"Every address that gets a verdict, including invalid syntax, is charged one email event ($0.0004). An address whose domain could not be looked up because DNS failed comes back with status error and verdict unknown and is not charged; run it again later."}],"mcpExamplePrompt":"Validate these email addresses and tell me which ones to drop from my list and why: support@apify.com, jane.doe@gmial.com, info@example.com.","related":["company-contacts-finder","google-maps-business-leads","phone-validator"],"urls":{"site":"https://www.sfoln.com/actors/email-validator/","siteJson":"https://www.sfoln.com/actors/email-validator.json","siteMarkdown":"https://www.sfoln.com/actors/email-validator.md","store":"https://apify.com/sfoln/email-validator","storeMarkdown":"https://apify.com/sfoln/email-validator.md","runSync":"https://api.apify.com/v2/actors/sfoln~email-validator/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~email-validator/runs","mcp":"https://mcp.apify.com?tools=sfoln/email-validator"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}