# Bulk email validator that gives back a clean CSV

> Bulk email validator for CSV files, Google Sheets or pasted lists. Get a clean CSV with your columns and a status for each address. No login.

URL: https://cliqtomedia.com/actors/bulk-email-validator/

Category: Leads, companies & validation · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

Upload your email list as a CSV or Google Sheet link. The tool checks each address and gives back a clean CSV. Your columns stay in place.

## How to use it: 3 steps

1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `info@apify.com` in Emails. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Bulk Email List Validator takes a CSV file, a Google Sheet link or a pasted list of email addresses, removes duplicates, checks every address and gives you back a clean CSV with your original columns. Each address gets a status (deliverable, risky, undeliverable or unknown) and a reason, based on syntax, DNS mail records, disposable domains, role addresses and domain typos. No login and no API key.

- Reads your list: a CSV file you upload, a public CSV link, a Google Sheets share link, or addresses you paste. It finds the email column by its name or by its content.
- Removes duplicate addresses (upper and lower case count as the same address).
- Checks each address:
- Syntax by the email standards. `john..doe@example.com` fails because of the two dots.
- Domain mail records (DNS): MX records, a "null MX" record that says the domain takes no mail (RFC 7505), and the A/AAAA fallback when a domain has no MX.
- Disposable domains (temporary inboxes like mailinator.com), role addresses (info@, sales@, support@…) and free providers (gmail.com, outlook.com…).
- Typos in popular domains: `name@gmial.com` → suggestion `name@gmail.com`.
- Writes one Dataset row per address and three files: `CLEAN_LIST.csv` (only the rows you can send to), `ALL_RESULTS.csv` and `RUN_SUMMARY` (how clean your list is).

### Good for

- Clean a CSV export from Mailchimp, HubSpot, Excel or a CRM before the next send.
- Find and remove fake, mistyped, disposable and role addresses from a sign-up list.
- Get a quick "how dirty is this list" report: percent of bad addresses and the main reasons.

### Not a good fit

- No mailbox check (SMTP). The Actor does not connect to the mail server, so it cannot tell if a mailbox exists on a working domain. A made-up `fake-123@example.com` is `deliverable` here. It also does not detect catch-all domains.
- It does not find new email addresses. It only checks the ones you give.
- Up to 25,000 unique addresses and a 10 MB CSV file per run.

## Price

Prices will be shown after release.

## Questions

### Does it check if a mailbox really exists?

No. It does not connect to mail servers. It removes clearly bad addresses.

### Can I use a Google Sheet?

Yes. Paste a Google Sheets share link or a public CSV link.

### Is my list sent to another company?

No. It uses public DNS and built-in lists. Results stay in your Apify storage.

### Should I delete risky addresses?

Not always. Role addresses like info@ often work. Typos and temporary inboxes are usually bad.

### Do I need an account with an email verification service?

No. The Actor uses public DNS and built-in lists. No API key, no login. Your list is not sent to a third-party verification service.

### Why is a fake gmail.com address "deliverable"?

Because the Actor does not ask the mail server if the mailbox exists (outgoing SMTP port 25 is closed on the platform). gmail.com has working mail servers, so the address passes. Use this Actor to remove clearly bad addresses before a mailbox check, not instead of it.

### Should I remove every `risky` address?

Not always. Role addresses like `info@` often work, but many senders avoid them in cold email. Disposable and typo addresses are usually not worth sending to. Choose `deliverable_and_risky` if you want to keep risky rows in the clean list and decide yourself.

### Is my list stored?

The results stay in your own Apify storage. `RUN_SUMMARY` and the run log contain counts only, not addresses. Uploaded files are kept as your Apify storage keeps them.

## Data fields

- `email` (string): The address as found in your list (trimmed).
- `status` (string): deliverable: valid syntax and a working mail domain, no risk flags. risky: the domain accepts mail but there is a risk flag. undeliverable: invalid syntax or the domain cannot receive mail. unknown: DNS failed; not charged. The mailbox itself is not probed.
- `reason` (string): Main reason code: mx_found, invalid_syntax, domain_not_found, null_mx_domain_accepts_no_mail, no_mail_server, mx_host_unresolvable, dns_lookup_failed, disposable_domain, possible_domain_typo, role_account, no_mx_a_record_fallback.
- `reasons` (array): All reason codes. mailbox_not_verified is added to deliverable and risky rows because no SMTP probe is made.
- `mx` (string): Highest-priority MX host of the domain, or null.
- `mxProvider` (string): Mail provider recognised from the MX host (Google, Microsoft, …).
- `disposable` (boolean): The domain is a known disposable (temporary) email service.
- `role` (boolean): The local part is a role/team inbox such as info@, sales@, support@.
- `freeProvider` (boolean): The domain is a free webmail provider (gmail.com, yahoo.com, …).
- `didYouMean` (string): Suggested fix for a likely domain typo (gmial.com → gmail.com).
- `inCleanList` (boolean): The row is in CLEAN_LIST.csv.
- `source` (string): Where the address came from.
- `sourceRow` (integer): Data row number in your CSV (header not counted), or the position in the pasted list.
- `checkedAt` (string): ISO time of the check.

## Input settings

- `emails` (array): Paste addresses, one per line (commas and semicolons also work). You can use this, a CSV file, or both. Up to 25,000 unique addresses per run.
- `csvUrl` (string): Upload a CSV file or paste a public link to one (a Google Sheets share link works too). Commas, semicolons and tabs are detected. The clean list keeps all your original columns. Max 10 MB.
- `emailColumn` (string): Name (or 1-based number) of the column with addresses. Leave empty to detect it automatically.
- `dedupe` (boolean): Check each address once (case-insensitive) and keep only its first row in the clean list. Duplicates are not charged.
- `cleanList` (string): Which rows go into CLEAN_LIST.csv. Risky means the domain accepts mail but the address is disposable, a role account (info@, sales@), a likely typo or has no MX record.
- `concurrency` (integer): How many addresses are checked at the same time.

## Step by step on Apify

1. Open the Input tab.
2. Keep the example addresses in Emails (`emails`), paste your own, or upload a file in CSV file (`csvUrl`).
3. Keep Remove duplicates (`dedupe`) on and Clean list keeps (`cleanList`) at `deliverable`.
4. Click Start. Two addresses take a few seconds.
5. Open the Output tab. Check the `status` and `reason` columns, then download `CLEAN_LIST.csv` from the storage tab.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Clean a CRM or ESP export | `csvUrl` (upload) | `CLEAN_LIST.csv` | your columns + `email_status`, `email_reason` | import the file back into your email tool |
| Check a shared Google Sheet | `csvUrl` (share link) | Dataset + `ALL_RESULTS.csv` | `status`, `reason`, `didYouMean` | fix typos in the sheet |
| Check a few pasted addresses | `emails` | Dataset | `status`, `reason`, `role`, `disposable` | decide who to email |
| Measure list quality | any | `RUN_SUMMARY` | `percent`, `byReason`, `listHealth` | decide if the list is safe to send |

## Tips

- Leave the email column empty. The tool finds it by name or content.
- Keep duplicate removal on. Duplicates are not charged.
- Split lists over 25,000 addresses into several runs.

## Limits



- `unknown` rows (DNS failed) are not charged.
- Duplicates removed by `dedupe` are not charged.
- A CSV of 1 MB or less has no file fee. A 25,000-row file with one email column is about 0.8 MB.
- A run that fails on input pays the start fee, plus the CSV megabytes if a large file was downloaded.
- 25,000 unique addresses per run (25,000 took about 5 minutes in our tests). Split bigger lists into several runs.
- CSV file up to 10 MB.
- CSV links: `http` or `https` only, public addresses only, ports 80, 443, 8080, 8443.

## Sample result

```json
{
  "email": "info@apify.com",
  "status": "risky",
  "reason": "role_account",
  "reasons": ["role_account", "mailbox_not_verified"],
  "mx": "aspmx.l.google.com",
  "mxProvider": "Google",
  "disposable": false,
  "role": true,
  "freeProvider": false,
  "didYouMean": null,
  "inCleanList": false,
  "source": "emails",
  "sourceRow": 1,
  "checkedAt": "2026-10-15T17:37:39.844Z"
}
```

## Use cases with this tool

- [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send.

## Similar tools

- [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/)
- [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/)
- [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/)
- [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/)
- [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/)
- [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/)
