SKILLMERC tools

Bulk Email Checker - Syntax, MX, Disposable & Typo Check

Clean email lists fast: syntax, domain and MX checks, disposable and role account detection, free provider flag and typo fixes like gmial.com to gmail.com. $0.30 per 1,000. No mailbox pinging.

USD 0.30 per 1,000 checked emails on Apify (pay per event)

Open in Apify StoreExample: Clean an Email List: Invalid, Disposable and Typo Emails


Clean an email list before you send to it. For every address this actor checks the format, whether the domain exists and can receive mail (MX records), whether it is a disposable or temporary address, whether it is a role account such as info@ or sales@, and whether it is a free provider such as Gmail. It also catches common typos and suggests the fix, for example jane@gmial.com to jane@gmail.com.

Each email gets one clear status, a recommended action and the reasons behind it.

Price: $0.30 per 1,000 checked emails, plus $0.0005 per run. Duplicates are removed first and are not charged.

What it checks

Check How
Format Practical address rules: one @, allowed characters, no leading, trailing or double dots, length limits, valid domain labels and TLD. International domains are supported.
Domain exists DNS lookup. Domains that do not exist are marked invalid.
Can receive mail MX records. A domain with no MX but an A record is flagged as risky (mail may still arrive through the A record). A domain that publishes a "null MX" (it explicitly refuses mail, like example.com) is invalid.
Disposable Matched against the community maintained disposable-email-domains list (about 9,200 domains, public domain CC0), including subdomains of listed domains.
Role account info@, sales@, support@, admin@, noreply@, hr@ and about 80 more shared inbox names.
Free provider Gmail, Yahoo, Outlook, Hotmail, iCloud, AOL, Proton, GMX, Yandex, Mail.ru and others. Shown as a flag only.
Typo Close misspellings of popular providers (gmial.com, yahooo.com, hotmial.com) and wrong endings (gmail.con). Returns suggested_email.

Each domain is looked up once per run, so lists with many addresses on the same domains run very fast.

What it does not do

It does not ping mailboxes. There is no SMTP check, so it cannot tell you whether a specific mailbox like john@company.com exists, and it does not detect catch-all domains. A valid_format_and_domain result means the address is well formed and its domain is set up to receive mail. If you need mailbox-level verification, run this first to remove the obvious bad addresses cheaply, then send only the survivors to a mailbox verifier.

Statuses

status recommendation Meaning
valid_format_and_domain send Well formed, domain exists and has mail servers, not disposable, not a role account, no typo.
risky review or remove Deliverable domain but something to look at: role account, possible typo, no MX record (A record only), or a DNS lookup that failed twice. Disposable addresses are risky with remove.
invalid remove Bad format, domain does not exist, domain refuses mail, or no mail server at all.

Input

Use any mix of these:

{
  "emails": ["john.doe@gmail.com", "jane@gmial.com", "Sales Team <sales@acme.com>"],
  "fileUrl": "https://example.com/leads.csv",
  "datasetId": "aBcD1234",
  "datasetField": "email",
  "maxEmails": 0
}

Output

One row per unique email:

{
  "email": "jane@gmial.com",
  "input": "jane@gmial.com",
  "status": "risky",
  "recommendation": "remove",
  "reasons": ["disposable_domain", "possible_typo", "no_mx_record_uses_a_record"],
  "is_valid_syntax": true,
  "domain": "gmial.com",
  "domain_exists": true,
  "has_mx": false,
  "mail_server_fallback": true,
  "is_disposable": true,
  "is_role_account": false,
  "is_free_provider": false,
  "suggested_email": "jane@gmail.com",
  "mx_records": [],
  "mailbox_checked": false
}

Possible reasons: missing_at_sign, multiple_at_signs, missing_local_part, missing_domain, contains_whitespace, too_long, local_part_too_long, bad_dots_in_local_part, invalid_characters_in_local_part, invalid_domain, domain_has_no_tld, invalid_tld, ip_literal_domain_not_supported, domain_not_found, domain_does_not_accept_mail, no_mail_server, no_mx_record_uses_a_record, disposable_domain, role_account, possible_typo, dns_lookup_failed_<code>.

A run summary (counts per status, duplicates removed, domains looked up, duration) is saved as OUTPUT in the key-value store.

Common uses

Pricing

Pay per event, platform usage included:

Duplicates are removed before checking and are not charged. You can cap spend with the run's maximum total charge setting; the actor stops cleanly when it is reached.

API and integrations

Call it from the Apify API, the JavaScript or Python client, Make, Zapier, n8n or any MCP client like other Apify actors, and chain it after a scraper with an Apify integration so new leads are checked automatically.


Run it on Apify Apify's free plan includes monthly platform credit, so small runs cost little or nothing to try.