CSV Dialect Detector

"CSV" is not one format. Drop a file here to find out which dialect yours actually is — and what about it will break someone else's importer.

🔒 Your file never leaves your browser.

Read locally, never uploaded. Drop the file to check line endings — pasting normalises them.

Counting commas is not detection

The naive way to find a delimiter is to count separators in the first line. It fails on the most common real file there is: a semicolon-separated European export whose product descriptions are full of commas. The first line has more commas than semicolons, so the guess is wrong, and every column shifts.

This tool parses the whole file with each candidate separator — honouring RFC 4180 quoting — and measures how consistent the resulting column counts are. The real separator produces the same number of columns on nearly every row; a wrong one produces noise. You can see each candidate's score, so the verdict is something you can check rather than trust.

The things that break imports

Every check this tool runs (9 rules)

CSV-D01No consistent delimiter found

No candidate separator produces a consistent column count across the file. Either this is not tabular data, or the rows are so badly damaged that no parser will agree on their shape.

Fix: Open the file in a text editor and look at the first few lines — the structure is usually visible immediately.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-D02Ambiguous delimiter

More than one separator produces a plausible parse. Importers guess, and different importers guess differently — which is how the same file loads correctly in one tool and shifts every column in another.

Fix: Re-export with an unambiguous separator, or state the delimiter explicitly in the import settings.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-R01Ragged rows

Some rows have a different number of fields than the header. The usual cause is an unquoted separator or a line break inside a value — the data after it silently lands in the wrong columns.

Fix: Quote every value that contains the separator, a quote, or a line break.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-E01Byte-order mark at the start

The file begins with a BOM. It is invisible, but it attaches itself to the first column name — which is why an import can insist "id" is missing when the header clearly says id.

Fix: Save as "UTF-8" rather than "UTF-8 with BOM".

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-E02Mixed line endings

The file mixes CRLF and LF line endings. Strict parsers treat the stray characters as data, which shows up as a trailing invisible character on the last column of some rows.

Fix: Normalise the file to one line ending before importing.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-E03Old-style CR line endings

Lines end with a bare carriage return (classic Mac). Many modern parsers read the whole file as a single line.

Fix: Convert to LF or CRLF.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-H01First row may not be a header

The first row looks like data — it contains values that parse as numbers or repeats the shape of the rows below. Importing it as a header turns your first product into column names.

Fix: Add a header row, or tell the importer the file has none.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-H02Duplicate or empty column names

Two columns share a name, or a column has none. Which one wins is undefined and differs between parsers.

Fix: Give every column a distinct, non-empty name.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.

CSV-Q01Quoted fields present

The file uses quotes around some values, which is how separators and line breaks are allowed inside data. Any tool reading this file must honour RFC 4180 quoting — splitting on the separator alone will corrupt those rows.

Source: RFC 4180 and the dialects real exporters actually produce. Detection is by column-count consistency across the whole file, not by counting separators in the first line.