Skip to content
MailCull
Back to blog csv

CSV Email Checker: Verify Every Address in a Messy CSV Without Rebuilding the File

Upload the CSV you already have, get every address verified with SMTP probing and the evidence chain, export the cleaned file in the same shape. No column mapping, no rebuild step.

The CSVs that need verifying are almost never clean. They're CRM exports with 18 columns and an email field somewhere in the middle. They're event registration files with two email columns (a primary and a secondary) and a notes field that sometimes has emails in it too. They're inherited lists where the previous owner used a different column naming convention and you're not sure which field actually holds the addresses.

A good CSV email checker handles the messy file you actually have, not the clean file you wish you had. It pulls the addresses out, runs every check that doesn't require sending (SMTP probe included) and gives you back a file you can use without rebuilding anything.

Here's how MailCull handles it, what the result looks like, and what to do with the columns you get back.

01The workflow, end to end

The whole thing takes one upload and two clicks.

1. Upload the CSV. MailCull's Verify List flow accepts any UTF-8 CSV. No column mapping required: the extractor scans every field and pulls valid email addresses out wherever they appear. If your file has emails in a primary_email column, a secondary_email column, and embedded in a notes field, all three get extracted. Duplicates are deduplicated within the job.

2. Pick a scan mode. Quick scan is faster (sub-second per address); deep scan adds the SMTP probe (including the Microsoft 365 cascade for B2B domains) and catch-all detection at ~1-2 seconds per corporate address, and is materially more accurate on mixed lists. Deep scan is on the Free plan too. For the full breakdown of which layers run without ever sending mail, see verify an email address without sending one.

3. Wait for the job. Real-time progress bar updates every ~1.5 seconds with the current count by status bucket. A 10,000-row list deep-scanned takes 15-30 minutes depending on the corporate/consumer mix. A 1,000-row list takes a few minutes. You can leave the tab open or come back later. The job runs server-side.

4. Review the buckets. Four columns of results:

  • deliverable: passed every check, SMTP probe returned 250 OK against a non-catch-all server. Safe to send.
  • risky: addresses worth segmenting before sending. Most common reasons: catch-all server, role-based address, M365 cascade and SMTP returned contradictory signals.
  • undeliverable: confirmed bad. SMTP 550 reject, missing MX, or syntax failure. Drop these.
  • unknown: we couldn't get an answer. DNS timeout, server refused connection, transient network failure. Not charged to your credit pool. Re-run individually if you need a verdict.

5. Export. One-click download. The export is your original CSV with new columns appended: email_status, reason_flags, confidence_score, plus the raw SMTP reply if you toggle the "include evidence" option. Your original columns stay in their original positions.

02What the result actually contains

This is where MailCull differs from most CSV email checkers. The output isn't just a verdict: it's the evidence underneath.

A row in your exported CSV after deep scan, with the include evidence flag on:

Original columnsemail_statusreason_flagsconfidence_scoresmtp_replymx_resolved
Jane Doe, Acme Corp, [email protected]deliverablesyntax_valid, mx_found, m365_http_enum, smtp_confirmed0.94250 2.1.5 OKacmecorp-com.mail.protection.outlook.com
John Smith, OldCo, [email protected]undeliverablemx_missing1.00n/an/a
[email protected]riskyrole_based, smtp_catch_all_suspected0.55250 OKbigco-com.mail.protection.outlook.com

When a client asks "why did this address bounce?" or "why did you mark this risky?" you have the answer in the row itself. No follow-up call to support, no opaque verdict to defend.

03Common CSV shapes and what to do with them

The four shapes that account for almost all the bulk verification work we see:

CRM exports

You exported from Salesforce, HubSpot, Pipedrive, or one of the smaller CRMs. The export has 12-30 columns including some combination of name, email, company, phone, role, last contact date, and 40 custom fields nobody uses. The email column might be Email, email_address, personal_email, or work_email.

What to do: upload as-is. The extractor finds the addresses regardless of column name. Deep scan to catch the stale roles and the migrated mailboxes. Export with evidence on. Re-import into your CRM with the email_status column as a custom field so you can filter campaigns against it.

Event or webinar registration lists

These arrive from form providers (Hubspot Forms, Typeform, Eventbrite, Zoom registrations). The data quality is usually mid: people fudge their email when they don't want spam, but most addresses are real. Disposable detection becomes important here; you'll see a steady 2-5% rate of throwaway addresses in event lists.

What to do: deep scan. Look at the disposable count: if it's over 5%, your registration form needs better validation at the entry point. Drop the disposable rows before importing into your ESP.

Inherited lists

The previous owner left, the file is on a shared drive, nobody remembers when it was last updated. These are the highest-failure-rate lists in the category. Expect a 15-30% combined undeliverable + risky rate before you do anything else.

What to do: deep scan, accept the loss, segment the survivors by tenant type (consumer Gmail/Yahoo vs corporate M365/Workspace), warm up your sender domain with the consumer segment first, then send to corporate. Don't try to recover the catch-all risky rows on the first send.

Merged source lists

You combined a referral export, a webinar list, and a LinkedIn export into one master CSV. The shapes are different, the column orders are different, there are duplicates across sources. This is the case where the "no column mapping" workflow saves the most time: you don't have to write a normalization script before running the checker.

What to do: deduplicate within MailCull (the job does this automatically by email), deep scan, then segment the deliverable rows by source if you have a source column. Different sources usually have different deliverability profiles.

04Why the file structure matters

A lot of bulk verification tools force you to upload a single-column CSV with one address per row. That works for a fresh list extracted into clean form, but it doesn't work for any of the cases above. The whole point of CSV verification is that you have a CSV, with structure, with context, with the metadata that makes the addresses useful after they're verified.

MailCull preserves the original shape because verification is rarely the last step. It's a midpoint between "I have a list" and "I can do something with it." Stripping out the company name, the role, the last-contact date, and the custom CRM fields just to run validation means you lose the information you actually need to act on the result.

05What MailCull does not do

A short list to set expectations:

  • Format the CSV for you. Bad encodings, inconsistent line endings, mixed quote styles: we'll try to read the file, but if it's malformed we'll surface a parse error rather than silently dropping rows. Fix the encoding first if your export tool is weird.
  • Verify Excel files directly. Export to CSV from Excel first. Excel-specific features (formulas, merged cells, multi-sheet workbooks) don't translate cleanly to a single-table verification flow.
  • Warm up your sender domain. Verification is the pre-send step. After the export, you still need a sender-reputation strategy. Tools like Smartlead and Instantly handle warmup; we don't.
  • Continuously monitor the list. This is a point-in-time check. Re-run quarterly or after every major source addition; mailboxes decay at ~22% per year on average in B2B lists.

06Pricing, in short

Free gives you 500 validation credits per month with deep scan and the full evidence chain on every address, no credit card. Pro ($19/month) lifts that to 10,000 credits and adds the REST API and MCP server; Max ($49/month) is 75,000 credits for higher-volume lists. Unknown verdicts never decrement your credits. The full plan rundown lives on verify an email address without sending one.

---

If you have a messy CSV to verify, the right move is to upload it and look at the bucket breakdown before you decide anything else. Start free: no credit card, 500 credits per month, full deep scan and evidence chain on every address.

Try it

Start with 500 free validation credits. No card.

Both Free and Pro run the same scan engine, full SMTP probe, MX lookup, typo, disposable, domain checks, and the evidence chain on every verdict. The difference is the monthly credit pool (Free=500, Pro=10,000, Max=75,000) plus Pro's API and MCP access.

Found a mistake? Email [email protected]. csv · verify-list · list-cleaning · bulk-verification · evidence-chain