Bulk Email List Cleaner — MX, Disposable & Typo Checks
Pricing
from $0.30 / 1,000 completed email checks
Bulk Email List Cleaner — MX, Disposable & Typo Checks
Clean email lists before paid mailbox verification. Check syntax and DNS mail routes, flag disposable and role addresses, suggest domain typo fixes, skip duplicates, and export clear reasons. Paste emails, CSV, or an Apify dataset. No SMTP or email sends.
Pricing
from $0.30 / 1,000 completed email checks
Rating
0.0
(0)
Developer
Saahir Sultan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Clean email lists before paying for mailbox verification
Bulk Email List Cleaner finds address-format problems, duplicate entries, disposable domains, common domain typos and missing DNS mail routes. It is an inexpensive first pass for CRM imports, signup lists, newsletter hygiene and datasets produced by other Actors.
This Actor does not verify that a mailbox exists. It never connects to SMTP servers or sends an email. A domain with MX records can still reject a particular address. Catch-all status, spam traps, recipient activity and inbox placement are not checked. Addresses with a mail route receive verify_mailbox, not a promise of deliverability.
Why use it?
- One DNS lookup can serve many addresses at the same domain, reducing repeated work.
- Duplicate rows are skipped by default and do not create paid results.
- Temporary DNS failures are saved separately and do not create paid results.
- Null MX, which explicitly indicates no mail service, is distinguished from ordinary MX records.
- If no MX exists, A and AAAA address records are checked for a possible implicit mail route.
- International domain names and supported international local parts are normalized; Gmail dots and plus tags are preserved.
- Every completed check includes its source row, recommendation and reasons.
How to run
- Paste addresses into Email addresses, or clear the examples and choose CSV text or Source dataset. Use exactly one input source.
- Set your maximum completed checks and run spending limit.
- Start the Actor. Open Email checks for results and Completion and cost-control report to confirm coverage.
- Download Spreadsheet-safe CSV when opening results in Excel or another spreadsheet. Inspect excluded and review rows before removing anything from a customer list.
No external API key or proxy subscription is required. Runs can be called through the Apify API or connected to an Apify integration. For dataset input, select the dataset explicitly; the Actor requests read access only to that source.
Input examples
{"emails": ["sample@gmail.com", "sample@example.com", "sample@mailinator.com", "bad@@example.com", "sample@gmail.com"],"deduplicate": true,"maxResults": 10000}
For CSV input:
{"csvText":"name,email\nExample,sample@example.com\n", "emailField":"email"}
For a dataset, supply its actual ID as sourceDatasetId, clear emails and csvText, and select the exact top-level field using emailField. Nested fields are not supported. CSV supports headers, a UTF-8 BOM, quoted fields, and comma, semicolon or tab delimiters.
Output
Each completed check is one dataset row. Example interpretation:
| Field | Meaning |
|---|---|
email | Normalized address, or null when syntax is unsupported or invalid |
syntaxValid | Supported address syntax passed validation |
domainStatus | mx_present, implicit_mx, null_mx, nxdomain, no_mail_route, or not_checked |
recommendation | exclude, review, or verify_mailbox |
reasons | Explicit reasons for the recommendation |
disposable, roleBased, freeProvider | List-based flags; none proves mailbox validity |
suggestedEmail | A possible domain-typo correction, never automatically applied |
mailboxStatus | Always not_checked |
catchAll | Always null because catch-all detection is not performed |
sourceRow | One-based input row, useful when joining results back to the source |
REPORT records delivered checks, skipped duplicates, unresolved rows, DNS requests, elapsed time and any stop reason. UNRESOLVED contains rows affected by DNS errors or operational limits. They are not labeled invalid. DNS is a point-in-time observation, and blocklists may be incomplete or outdated.
CLEAN_CSV contains completed checks with spreadsheet formula prefixes neutralized. Raw dataset exports preserve JSON values; use the supplied CSV for spreadsheet viewing.
Pricing
The launch price is $0.30 per 1,000 completed checks, plus $0.00005 per run start. The live Pricing tab is authoritative. A completed syntax check that rejects a malformed address is still a result. Skipped duplicates and unresolved DNS failures do not incur a result fee. Disabling deduplication makes repeated completed rows billable.
For example, 10,000 delivered checks cost $3.00005 including one start at the launch rate. Configure your Apify run spending limit to cap charges. The SDK stops delivery when the remaining budget cannot pay for the next result. A partial run can contain useful results; always inspect REPORT.
Limits and advanced behavior
Default limits are 10,000 results, 50,000 input rows, 5,000 distinct domains and 120 processing seconds. Maximum settings are 50,000 results, 100,000 input rows, 10,000 domains and 240 seconds. Text input is limited to 8 MB. Use smaller batches for diverse domains or large datasets. A batch of many addresses at one domain is much cheaper to resolve than a batch with thousands of different domains.
Deduplication applies only within one run. Domain case is normalized. Local-part case is preserved unless caseInsensitiveDedupe is enabled. Role-based addresses are flagged but not excluded by default. Syntax checking intentionally excludes some special-use and unusual address forms; it is not an exhaustive RFC acceptance test.
Domain queries go to Google Public DNS over HTTPS. Only domain names are sent to that resolver, not full addresses. Full inputs and outputs are stored in the run's Apify storage and follow your account's storage and sharing settings. Aggregate counts are logged; addresses are not written into application logs. Use lists you are permitted to process.
This is an on-demand batch Actor. Standby is unnecessary because there is no HTTP server. Automatic restart is disabled in the published configuration to avoid replaying paid output. On an abort, the dataset is authoritative; CSV and the report may be partial. To retry a partial run, remove already delivered rows and skipped duplicates from your input, and include unresolved rows that you wish to retry.
FAQ and support
Does mx_present mean the address works? No. It means the domain publishes a mail route. Use a separate mailbox verifier or consent-based confirmation flow if recipient verification is required.
Are typo suggestions guaranteed? No. A similar domain may be intentional. Review suggestions before changing an address.
Will this remove every disposable address? No. Detection uses a bundled community list. New domains can appear between releases.
How do I report a problem? Open an issue on this Actor's Issues tab with the run ID and a redacted example. Do not post private contact lists or credentials.
Disposable-domain data is from disposable-email-domains, distributed under CC0. See the bundled NOTICE for the exact source snapshot.