Bulk Email Verification: Clean a CSV List Step by Step
Upload, verify, and export a clean email list — plus how to read list health scores and handle risky addresses.
Cleaning a list one address at a time works when you have a handful of emails. When you have a CSV export from your CRM, a newsletter signup dump, or a list you inherited from a past campaign, you need to verify every row at once and then keep only the addresses worth mailing. That is exactly what bulk verification is for.
This guide walks through the full process on ClearMX: preparing your file, uploading it, mapping the email column, running the verification in the background, reading the list health breakdown, and exporting a clean, deliverable-only list. If you only need to check a single address first, the free email verifier handles that in the browser.
Step 1: Prepare your CSV
ClearMX reads a standard comma-separated file. You do not need to trim it down to a single column, but a tidy file uploads and maps faster. A few things to check before you export:
- One header row. The first row should name your columns (for example
email,name,signed_up_at). This lets you pick the email column by name during mapping. - One address per row. Avoid cells that pack several emails into one field separated by semicolons. Split those into separate rows first.
- UTF-8 encoding. Most tools export UTF-8 by default. If you see garbled characters after upload, re-export with UTF-8 selected.
- Keep the extra columns. Names, tags, and signup dates come back with your results, so you do not lose context when you re-import the clean list into your mailing tool.
De-duplicate before you upload
Duplicate addresses cost you the same as unique ones, since each row is a verification. Running a quick de-dupe in your spreadsheet before uploading keeps your credit spend tidy, since credits never expire but there is no reason to spend two on the same address. If two rows genuinely differ (different names, same email), decide which one you want to keep now rather than after export.
Step 2: Upload the file
From your dashboard, start a new bulk job and select your CSV. ClearMX reads the file, counts the rows, and shows you a preview of the first few lines so you can confirm it parsed correctly. If the row count looks off, it is usually a stray delimiter or a quoted field with an unescaped comma. Fix that in the source file and re-upload.
Every row counts as one verification credit. New accounts start with 500 free verification credits, no card required, and any additional credits you buy are yours for good — no subscription is required, and nothing resets or expires. (An optional monthly plan tops credits up automatically at 20% less per credit if you prefer; those roll over too.) Volume pricing gets cheaper the more you buy at once: 5,000 credits is €30 (€0.0060 each), 50,000 is €210 (€0.0042 each), and it scales down from there. Because credits never expire, a large one-time cleanup just draws down your balance instead of needing to fit inside a monthly cap. You can review the full pricing on the pricing page.
Step 3: Map the email column
After upload, ClearMX asks which column holds the email address. If your header row is named clearly, the right column is usually pre-selected. Pick the correct one and confirm. This is the only mapping step that matters for verification. The remaining columns ride along untouched and appear in your export.
If your file has no header row, the mapping step shows column positions instead of names. Add a header row before exporting to make this step unambiguous.
Step 4: Verify every row
Once mapping is confirmed, ClearMX queues the job and verifies each row in the background. You do not have to keep the tab open. For every address, it runs the same checks the single-address tools use: RFC-aware syntax, domain and MX/DNS lookups, disposable-domain detection, role-account detection (addresses like info@ or support@), free-provider identification, and a catch-all (accept-all) probe. Wherever the receiving server allows it, an SMTP mailbox check also opens a conversation with that server to confirm the exact address, and stops before any message is sent. That probe is not a paid extra and does not cost a second credit — the same single credit covers the row whether it ran or not. ClearMX never sends email.
Each row comes back with a result and a score from 0 to 100:
| Result | Score | What it means |
|---|---|---|
| deliverable | 80–100 | Valid syntax, real MX, and the mailbox confirmed at the server. Safe to send. |
| risky | 50–79 | Reachable but flagged — a disposable domain, a catch-all domain, a role account, or a mailbox that could not be confirmed. |
| undeliverable | below 50 | A hard failure: invalid syntax, no MX, or a mailbox the server rejected. Do not send. |
| unknown | set aside | The server would not give a definite answer — greylisting, a timeout, or a DNS failure. Handle case by case. |
Filter on the result, not on the score. unknown is decided before the score bands are consulted and carries a mid-range score of its own, so a spreadsheet formula that sorts purely by score would file a greylisted mailbox under undeliverable and delete a perfectly good contact.
Alongside the result, each row carries a machine-readable reason such as mailbox_exists, no_mx, disposable_domain, mailbox_unconfirmed, or role_account, so you can filter or segment on the specific cause.
Step 5: Read the list health breakdown
When the job finishes, ClearMX shows a summary of how your list broke down across deliverable, risky, undeliverable, and unknown. This breakdown is the fastest way to judge the quality of a list you bought, inherited, or let sit for a year. A large undeliverable slice — or a risky slice stuffed with disposable_domain reasons — is a strong signal to slow down before you mail it.
Pay attention to the risky bucket, because it is the one that rewards reading. Disposable domains, catch-all domains, role accounts and mailboxes that could not be confirmed all land here, and they are not the same problem. Disposable addresses are throwaways worth dropping; a role account may be exactly who you want on a transactional list and exactly who you don't want in cold outreach; an unconfirmed mailbox is simply an address nobody could vouch for yet. The reasons let you decide per category instead of treating the whole bucket the same. For more on what these signals mean, see the disposable email checker and the MX record checker.
Step 6: Export a clean, deliverable-only list
The final step is the payoff. ClearMX lets you export a filtered CSV that includes only the deliverable addresses, with all your original columns intact. Import that file back into your email platform and you are mailing a list that has been checked end to end.
A practical export routine:
- Export the deliverable-only list for your main send.
- Export the risky rows separately and split them by reason: drop the
disposable_domainones, then make a call onrole_account,accept_allandmailbox_unconfirmed. - Keep the undeliverable rows out of your platform entirely, and consider suppressing them so they never get re-added.
- Park the unknown rows rather than deleting them — they failed to get an answer, not a verdict, and re-checking later often resolves them.
When to automate instead
Bulk CSV cleanup is ideal for periodic list hygiene and one-time imports. If you want to verify addresses at the moment of signup, so bad emails never enter your list in the first place, the synchronous API is the better fit. A single POST /api/v1/verify call returns the same result, score, reason, and per-check breakdown in real time. See the email verification API guide, and the broader bulk verification overview for how CSV and API workflows fit together. Ready to start? Create a free account and clean your first list with your 500 free verification credits.
Start free with 500 verification credits. Clean lists, block disposable signups, and verify by API or CSV.