Email Domain Checker (MX, SPF, DMARC) avatar

Email Domain Checker (MX, SPF, DMARC)

Pricing

from $0.80 / 1,000 email checkeds

Go to Apify Store
Email Domain Checker (MX, SPF, DMARC)

Email Domain Checker (MX, SPF, DMARC)

Check email addresses or domains for syntax, MX, SPF, DMARC, disposable and role flags. Does not connect to mail servers or confirm mailboxes.

Pricing

from $0.80 / 1,000 email checkeds

Rating

0.0

(0)

Developer

myuon

myuon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

Email Domain Check

Check a list of email addresses or bare domains for syntax problems and DNS-level deliverability signals, before you send anything. One result row per entry.

This Actor checks syntax and DNS records only. It never connects to any mail server (no SMTP, no RCPT probing, no catch-all testing). It cannot tell you whether a particular mailbox exists. A likely_ok verdict means the address is well-formed and its domain is set up to receive mail, nothing more.

Who it is for

  • People who clean a lead list or a signup list before sending, to drop typos, dead domains and domains that explicitly accept no mail.
  • People who care about deliverability hygiene: spotting disposable domains and role addresses, and seeing whether a domain publishes SPF and DMARC.

It does not enrich people, find or guess addresses, or return any information about the person behind an address.

What each row contains

FieldMeaning
inputThe entry exactly as you gave it (trimmed of surrounding spaces)
domainLower-case ASCII domain; internationalised domains are shown in punycode (xn--...)
syntaxValid, syntaxErrorWhether it parses as an address or domain, and why not
mxStatuspresent, implicit_a, null_mx, none, nxdomain, unknown, or not_checked (invalid syntax)
mxPresent, mxRecords, nullMxMX presence, the MX list sorted by priority, and whether the domain publishes a Null MX
spfPresent, spfRecordWhether a v=spf1 TXT record exists, and its text
dmarcPresent, dmarcPolicyWhether _dmarc.<domain> has a v=DMARC1 record, and its p= value (none, quarantine, reject)
disposableDomain, or a parent domain, is on the bundled disposable-domain list
roleAddressLocal part is a role mailbox such as info, sales, support, noreply (null for bare domains)
freeProviderDomain is a well-known consumer mailbox provider (a built-in list that is not exhaustive)
verdict, reasonslikely_ok, risky, invalid or unknown, with machine-readable reasons

Verdicts

  • invalid: bad syntax, the domain does not exist, the domain publishes a Null MX (RFC 7505, it states it accepts no mail), or it has neither MX nor address records.
  • risky: usable on paper, but disposable domain, role address, non-ASCII local part (needs SMTPUTF8), or no MX record and mail would fall back to the domain's A/AAAA record.
  • likely_ok: valid syntax, the domain has MX records, and none of the risk flags apply.
  • unknown: DNS timed out or the resolver failed (SERVFAIL etc.) after retries. This is not a statement that the address is bad. Unknown rows are delivered but not charged; run them again later.

Missing SPF or DMARC does not change the verdict; the fields are informational. DMARC is looked up at _dmarc.<exact domain> only; policy inherited from a parent domain is not followed.

MX fallback (RFC 5321 section 5.1)

If a domain has no MX record but does have an A or AAAA record, mail servers deliver to that address as an implicit MX. Such a domain gets mxStatus: "implicit_a" and verdict risky (reason no_mx_uses_address_record_fallback), not invalid.

Syntax rules

Dot-atom local parts up to 64 bytes, plus signs allowed (name+tag@example.com), non-ASCII local parts allowed and flagged, internationalised domains converted to punycode. Quoted local parts ("a b"@example.com), display names (Name <a@b.com>) and IP-literal domains (a@[1.2.3.4]) are reported as invalid. A bare domain (no @) is accepted and checked as a domain.

Input

FieldMeaningDefault
emailsAddresses or bare domains, one per entry. Up to 50,000 per run; a longer list is rejected before anything is processedrequired
dedupeSkip entries identical to an earlier oneon

Duplicates

With dedupe on, an entry that matches an earlier one after trimming and lower-casing produces no row and is not charged; the number skipped is in the run summary. Different addresses on the same domain are never merged: each gets its own row, and they share a single DNS lookup (results are cached by domain within the run). Blank entries are always skipped. With dedupe off, every non-blank entry gets a row and is charged.

Pricing

Pay per event: email-checked, suggested $0.0008 per row, charged once per row delivered to the dataset. See .actor/pay_per_event.json.

  • Rows for syntactically invalid entries are delivered and are charged.
  • Rows with verdict unknown (DNS timeout or failure) are delivered but not charged.
  • Skipped duplicates, blank lines and entries not processed are not charged.
  • The Actor respects your maximum charge per run. When the next row would exceed it, the run stops cleanly, and the status message and the SUMMARY record in the key-value store say how many entries were not processed. Rows already delivered stay in the dataset.

The price is set in Apify Console, so check the Actor's pricing tab for the current value.

Limits

  • 50,000 entries per run.
  • Only DNS is queried, with a per-query timeout and up to two retries. A resolver that is slow or rate-limited for a particular domain gives unknown for that domain only.
  • The disposable list is a snapshot (see below) and the free-provider and role lists are short built-in lists. None of them is complete.
  • The default test input uses iana.org and icann.org (which publish MX records) and two example.com/example.org addresses (reserved domains that publish a Null MX, so they come back invalid). Every entry yields a row, so the dataset is never empty.

Privacy

Your list stays in your own run storage (dataset and key-value store). Local parts are used in memory for the syntax and role checks and appear only in your own dataset rows. Logs contain counts only, never addresses or local parts. The only network traffic is DNS queries for the domains in your list; the domain names are visible to the DNS resolver, as with any DNS lookup. No mail server is contacted and no email is sent.

Your responsibility

You are responsible for complying with the email and privacy laws that apply to you, for example Japan's Act on Regulation of Transmission of Specified Electronic Mail (特定電子メール法), the US CAN-SPAM Act, and the EU GDPR. This tool is not for sending, or enabling the sending of, unsolicited mail. A result from this Actor is not consent, and does not make a list lawful to use.

Data sources