Bulk lists
Bulk email verification for lists up to 1,000,000 rows
Upload a CSV, XLSX or TXT file with up to 1,000,000 rows. We find the email column, set duplicates aside, check every unique address and give you the results by status with your original columns kept. Files are deleted 30 days after upload.
How bulk verification works
Five steps, and you can close the page while the job runs.
Upload
Drop a CSV, XLSX or TXT file into your dashboard, or send CSV, TXT or JSON to the API. XLSX files are converted to CSV in your browser, and you pick the sheet.
Check the columns
We detect the email column and show a preview. You confirm the column and whether the first row is a header.
See the cost first
Before anything runs you see how many unique addresses need a check. Duplicates, malformed addresses and test addresses cost nothing.
Follow progress
The job runs in the background. We email you when it finishes, and call your webhook if you registered one.
Download
Download every row or only the statuses you want, with your original columns plus our result columns. Values that look like spreadsheet formulas are neutralised so they cannot run.
Limits and formats
| Dashboard formats | CSV, XLSX and TXT |
|---|---|
| API formats | CSV, TXT and JSON |
| Rows per file | Up to 1,000,000 |
| File size | Up to 1 GB in the dashboard, 100 MB per API request |
| Columns | Up to 512 |
| Uploads in progress | Up to 3 at a time |
| File retention | 30 days after upload, then deleted automatically |
What you get back
Your file comes back with these columns added after your own. Every status is explained in the docs.
| Column | Meaning |
|---|---|
ev_status | deliverable, undeliverable, risky or unknown |
ev_reason | the reason code, such as no_mailbox or catch_all |
ev_action | send, send_with_caution, remove or retry_later |
ev_free_email | true when the address is at a free email provider |
ev_role_account | true for team or function addresses such as info@ |
ev_disposable | true for throwaway inbox services |
ev_catch_all_domain | true when the domain accepts mail for every address |
ev_did_you_mean | a suggested correction for a likely typo |
ev_mx_found | true when the domain has mail records |
ev_mx_record | the domain's preferred mail server |
ev_smtp_provider | the mail provider, from our own list |
ev_domain_age_days | how old the domain is, in days |
- Deliverable
The mailbox exists and accepted our check, so mail sent to it should arrive.
1 credit · Send
Deliverable reasons - Undeliverable
Mail sent to this address will not arrive, so it should come off your list.
1 credit · Remove
Undeliverable reasons - Risky
The address may accept mail, but sending to it can hurt your bounce rate or sender reputation.
1 credit · Send with caution
Risky reasons - Unknown
We could not get a definite answer this time, so no credit is used and a later retry often succeeds.
Free, no credit used · Retry later
Unknown reasons
Credits for lists
Each unique address that gets a definite result uses one credit. When a job starts we reserve one credit per unique address; credits for unknown results come back when the job ends.
- New accounts get 500 free credits to try the service on a sample of their own list.
- If your balance is too low, the job waits until you buy a pack, then starts.
- Try the flow with our sample list of test addresses, which costs nothing.
Your data
Uploaded files and their results are deleted 30 days after upload, or sooner when you delete your account. We process the addresses only to run your job, under our data processing agreement, and we never send email to them. See security and data handling for details.
Frequently asked questions
How big a list can I upload?
Up to 1,000,000 rows per file, in CSV, XLSX or TXT format. You can follow progress in your dashboard and download the results when the job finishes. You can also get a webhook call when it completes.
How long do you keep my files?
Uploaded lists and their result files are deleted automatically 30 days after upload. Checks you run in the dashboard stay in your history for 30 days. API checks are not stored. To answer repeat checks, we keep only the result of a completed check for 12 months, under a keyed hash of the address, never the address itself.
Am I charged for unknown results?
No. Any result with the status unknown is free. That includes checks where the receiving mail server does not answer within 15 seconds. Requests that fail with an error, malformed addresses and test addresses are free too.
Do you support webhooks?
Yes. We call a URL you register when a bulk job finishes or when your credits run low. Each call is signed so you can verify it came from us.
How much does it cost?
Credits come in one-time packs: 10,000 for $35 ($3.50 per 1,000), 25,000 for $49 ($1.96 per 1,000), 50,000 for $79 ($1.58 per 1,000) and 1,000,000 for $450 ($0.45 per 1,000). One credit checks one address. There is no subscription. Prices in USD, excluding tax. VAT or sales tax is added at checkout where applicable.
What does catch-all mean?
A catch-all domain accepts mail for any address at that domain, real or not. No verifier can confirm a specific mailbox there without sending a message. We mark these results risky with the reason catch_all. Keep them in a separate segment, send to them carefully and watch your bounces.
Updated · Maintained by the email-validation.org team