Email List Cleaner: Bulk Email Validator, MX & Disposable Check avatar

Email List Cleaner: Bulk Email Validator, MX & Disposable Check

Pricing

from $0.50 / 1,000 email checkeds

Go to Apify Store
Email List Cleaner: Bulk Email Validator, MX & Disposable Check

Email List Cleaner: Bulk Email Validator, MX & Disposable Check

Clean an email list in bulk without sending anything. Checks syntax, MX records, disposable domains, free-mail and role addresses (info@, sales@), and suggests fixes for typos like gmial.com. Each address gets a valid, risky or invalid verdict with reasons. No SMTP probing, so no catch-all claims.

Pricing

from $0.50 / 1,000 email checkeds

Rating

0.0

(0)

Developer

Solid Fetch

Solid Fetch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Email List Cleaner: Bulk Email Validator, MX and Disposable Check

Clean an e-mail list in bulk before you send to it. For every address the actor checks the syntax, looks up the domain's MX records in DNS, flags disposable domains, free-mail providers and role addresses (info@, sales@), suggests a fix for common typos (gmial.com becomes gmail.com) and gives a final verdict, valid, risky or invalid, with the reasons. Paste a column from a spreadsheet or pass a list. A domain-only mode checks a list of domains.

This actor does not probe mail servers. It never connects to an SMTP server, never sends a message and never asks a server whether a mailbox exists. It uses DNS only. That is why it is fast and cheap, and it is also why it cannot tell you that jane@company.com is a real mailbox, and why it never claims a domain is catch-all. A valid verdict means "the address is well formed and its domain can receive mail", not "the mailbox exists". If you need a mailbox-level answer, you need an SMTP-probing service, and those come with their own error rates and blocked IPs.

What people use it for

  • Cleaning a list before a campaign. Drop addresses that cannot bounce for structural reasons: typos in the syntax, domains that do not exist, domains that publish no mail records. This protects your sender reputation from the cheapest kind of hard bounce.
  • Removing throwaway sign-ups. The disposable flag uses the maintained open list disposable-email-domains (about 9,900 domains).
  • Splitting people from teams. The role flag marks info@, sales@, admin@, support@ and similar shared addresses, and the free-provider flag marks gmail, outlook, yahoo and other public mailboxes, so you can route a lead list by company or by person.
  • Catching typos while they can still be fixed. jane@gmial.com comes back with suggestion: "jane@gmail.com".
  • Cleaning a domain list. Domain mode takes domains, URLs or addresses and returns the MX, disposable, free-mail and typo checks for each domain.

How to use it

A list:

{
"emails": ["info@example.com", "jane.doe@gmial.com", "test@mailinator.com"]
}

A pasted column (one per line, or separated by commas, semicolons or tabs):

{
"text": "jane@acme.com\nbob@acme.com, sue@globex.com\nNot an address"
}

Domains only:

{
"mode": "domains",
"text": "gmail.com\nhttps://www.mailinator.com/\nsome-typo-gmial.com"
}

Both fields can be used in one run. Name <a@b.com> and mailto: links are cleaned, and a field name the actor does not know stops the run with a hint such as "email" (did you mean "emails"?), so a typo cannot give you a run that ignored a setting.

Input

FieldWhat it does
emailsList of addresses. An entry may hold several addresses separated by commas, semicolons or line breaks. Up to 100,000 entries per run.
textA text blob with one address per line, or separated by commas, semicolons or tabs. Used together with emails.
modeemails (default) or domains. In domain mode, URLs and addresses are reduced to their domain.

Repeats are found after normalising (lower case, domain in punycode, a trailing dot dropped). Jane@Example.com and jane@example.com are the same address. jane+news@example.com is a different one, because the tag may route to a different folder or a different person.

Output

One row per input, in input order, so you can put the result next to your original column. The row is flat, so the CSV export works as is. An example of the row shape (invented domain):

{
"input": " Jane.Doe@Acme.example ",
"email": "jane.doe@acme.example",
"domain": "acme.example",
"verdict": "valid",
"reason": "mx-found",
"reasons": ["mx-found"],
"explanation": "The domain has MX records",
"syntaxValid": true,
"mxFound": true,
"mxCount": 2,
"mxHost": "mx1.acme.example",
"mxRecords": [
{ "exchange": "mx1.acme.example", "priority": 10 },
{ "exchange": "mx2.acme.example", "priority": 20 }
],
"dnsStatus": "mx",
"hasARecord": null,
"hasAaaaRecord": null,
"disposable": false,
"freeProvider": false,
"roleAccount": false,
"role": null,
"suggestion": null,
"smtpChecked": false,
"duplicateOf": null,
"checkedAt": "2026-10-22T12:00:00.000Z"
}
FieldMeaning
inputThe entry as you gave it.
email, domainThe normalised address (lower case, domain in ASCII) and its domain. null when the syntax is invalid.
verdictvalid, risky or invalid. See the rules below.
reason, reasons, explanationThe main reason code, all reason codes (heaviest first) and the same reasons as plain sentences.
syntaxValidFalse when the address breaks a syntax rule. The reason code says which one.
mxFound, mxCount, mxHost, mxRecordsThe MX records, sorted by priority. mxFound is null when the lookup failed.
dnsStatusmx, a-fallback, null-mx, no-mail-records, nxdomain or error.
hasARecord, hasAaaaRecordOnly filled when the domain has no MX: whether it has an address record that mail would fall back to.
disposable, freeProviderFlags for the domain.
roleAccount, roleA shared function address and which one (info, sales, noreply). Not in domain mode.
suggestionThe corrected address (or domain in domain mode) when the domain looks like a mistyped popular one.
smtpCheckedAlways false.
duplicateOfThe normalised address this row repeats, so repeats can be filtered out.
checkedAtWhen the DNS was asked.

The run also writes a SUMMARY record with the counts by verdict and by reason, how many rows were charged, and how many DNS lookups were made.

Verdict rules

The verdict is invalid if any invalid reason applies, otherwise risky if any risky reason applies, otherwise valid.

ReasonVerdictWhen
Syntax codes such as missing-at, local-part-too-long, domain-without-dot, invalid-domain-characterinvalidThe address breaks a syntax rule. The code names the first rule it breaks.
domain-not-foundinvalidDNS says the domain does not exist (NXDOMAIN).
domain-rejects-mailinvalidThe domain publishes a null MX record (RFC 7505), which says it accepts no mail.
no-mail-recordsinvalidThe domain exists but has no MX and no A or AAAA record.
no-mx-address-fallbackriskyNo MX, but an A or AAAA record. Mail systems then try that address, but few real mailboxes work that way.
dns-lookup-failedriskyTimeout or server failure. Nothing is known about the domain. Run it again.
disposable-domainriskyThe domain is a throwaway mailbox service.
role-accountriskyinfo@, sales@, admin@, support@, noreply@ and similar.
possible-typoriskyThe domain looks like a mistyped popular domain. A typo domain that does not exist is invalid, with the suggestion still given.
international-local-partriskyNon-ASCII letters before the @, which many mail systems cannot deliver to.
mx-foundinformationThe domain has MX records. It is the only reason of a valid row.

A free provider (gmail.com and the like) is not a reason by itself. It sets freeProvider and nothing else.

Syntax follows what mail systems accept in practice (RFC 5321 and 5322 without the exotic parts). Quoted local parts ("john doe"@example.com), comments and IP literals (user@[1.2.3.4]) are valid in the RFCs and rejected here, because no ordinary mailbox uses them.

Pricing

Pay per event, prices on the Pricing tab.

EventCharged for
email-checkedEach address (or domain, in domain mode) that has valid syntax, is not a repeat of an earlier one, and got an answer from DNS.

Free: inputs with invalid syntax, repeats of an earlier address, and rows where the DNS lookup failed (timeout or server failure), because the actor could not answer them. Rows past your maximum cost per run are not saved.

The final status line adds it up, for example 1,000 of 1,000 inputs checked: 790 valid, 150 risky, 60 invalid. 940 charged as email-checked, 60 free (35 with bad syntax, 25 repeats).

Limits

  • No mailbox check, no catch-all detection. See the top of this page. valid says the domain can receive mail, not that jane exists there.
  • DNS only. Each domain is looked up once per run, however many addresses share it. Lookups have a timeout of 5 seconds and one retry. A domain whose name servers do not answer ends as dns-lookup-failed and is free, and a re-run usually answers it.
  • Disposable list. It is the open list disposable-email-domains (CC0 1.0, fetched 2026-10-22, 9,919 domains). New throwaway services appear every week, so the flag catches the known ones. A subdomain of a listed domain counts as listed.
  • Typo suggestions are for popular providers only (gmail, yahoo, hotmail, outlook, icloud, protonmail, yandex). A company domain with a typo is not suggested, it just fails the MX check if the domain does not exist.
  • Role addresses are a list of common names, not a guess. sales.manager@ is not flagged, sales@ is.
  • Up to 100,000 entries per run.

Privacy

Your addresses are your data. The actor does not log them (the log holds counts only, and an error message that quotes an address is masked to j***@example.com), does not keep them anywhere except the dataset of the run, and does not send them to any service other than the DNS resolver asked about the domain part. The run's restart record holds a hash of the list and counters, not addresses.

When a run fails, an error report with the error message (addresses masked) and the shape of the input (which fields are set, how long the lists are), never your input values or your results, is sent to the developer to fix bugs.

Attribution

The disposable-domain flag uses the disposable-email-domains list (https://github.com/disposable-email-domains/disposable-email-domains), published under CC0 1.0 Universal. The actor is not affiliated with it.