Almost every failed bulk upload traces back to the same handful of CSV problems: the wrong delimiter, a stray byte-order mark, one row with an extra comma inside a field. None of them are hard to fix once you can see them — but you usually only find out after the upload has already choked, or worse, after half your list has been quietly mangled. This tool does the boring structural check first, entirely in your browser, so you can catch those issues before they cost you time or verification credits.
What a well-formed CSV actually is
CSV looks trivial — values separated by commas, one record per line — but the details bite. The closest thing to a standard is RFC 4180, which says the useful parts: every row should have the same number of fields, a field containing the delimiter (or a line break, or a quote) must be wrapped in double quotes, and a literal quote inside a quoted field is escaped by doubling it (""). Where files go wrong is when they drift from that: a spreadsheet exports with semicolons because of a regional setting, someone pastes a value with a comma in it and forgets to quote it, or an editor writes a UTF-8 BOM at the top. This validator parses your text with basic RFC 4180 quote handling and reports where it drifts.
The checks it runs
- Delimiter — it tests comma, semicolon and tab and picks the one that splits your rows most consistently, so a European semicolon export doesn't get read as one giant column.
- Encoding & BOM — it flags a UTF-8 byte-order mark at the start of the file (a common cause of a broken first header) and replacement or control characters that hint the file isn't clean UTF-8.
- Header row — it guesses whether row 1 is a header (labels, no addresses) or already data, so your first contact isn't mistaken for a column name.
- Email column — it finds the column where the most cells look like real addresses and, if there's a header, tells you its name.
- Malformed rows — it compares every row's field count to the most common one and lists the first offending line numbers, which is almost always an unescaped delimiter inside a value.
- Empty and duplicate addresses — empty email cells can't be verified, and duplicates just burn credits, so it counts both.
Nothing leaves your browser
This is a client-side tool. When you paste text or choose a file, the parsing happens in JavaScript on your own machine — the file is read with the browser's FileReader and never uploaded anywhere. That's deliberate: a contact list is sensitive, and you shouldn't have to send it to a server just to check whether it has the right columns. For performance the checker looks at the first few thousand rows and tells you if it truncated; the full file is still fine to verify afterwards.
Once it's clean
A clean structural report means the file will import — it doesn't yet tell you whether the addresses are real, active mailboxes. That's the next step. When the validator gives you a green light, run the list through the email list health report for a quick quality read, or verify addresses one at a time with the email verifier. When you're ready to check the whole list, upload it for bulk verification and let the pipeline sort deliverable from risky and undeliverable.
Frequently asked questions
- Does my CSV get uploaded anywhere?
- No. Everything runs in your browser — pasted text and chosen files are read locally with the
FileReaderAPI and never sent anywhere. - Which delimiters does it support?
- Comma, semicolon and tab — it auto-detects whichever splits your rows most consistently, so semicolon exports and tab-separated files both work.
- What counts as a malformed row?
- A row whose field count differs from the rest — usually an unescaped delimiter inside a value. Per RFC 4180, wrap such values in double quotes.
- Does a clean CSV mean my emails are valid?
- No — it checks structure and format only. To confirm the mailboxes actually exist, run the list through the email verifier or a bulk verification.