CSV Validator
Check that every non-empty CSV row has the same number of comma-separated fields as the first row.
🔒 Processed entirely in your browser — nothing you enter here is ever uploaded.
The result appears on this page after you run the tool. Nothing you enter is uploaded.
Result
About this tool
Paste comma-separated text. The scanner is the one the TSV page uses, called with a comma instead of a tab. Lines are split on newline. A final line that is empty after trimming is ignored. Every earlier line is a row, including a blank line in the middle of the paste. The first row that is parsed sets the number of columns. A later row with a different count fails with Row column count mismatch, the expected count, the found count, and the 1-based line number. A paste that trims to nothing fails with Data payload is empty.
A double quote toggles whether commas split the line, and the quote character itself is not kept in the field. A comma between an opening quote and its closing quote stays inside one field, so a value that contains a comma can be one column. This is not RFC 4180. A doubled quote is not a defined escape. Each quote only flips the mode. An odd number of quotes on the line fails with Mismatched quotes. Quoted string field was not closed, and the line number. Single quotes are ordinary characters and do not protect a comma. A tab does not split a CSV row.
A passing paste ends with Data syntax is valid! Total parsed rows: N, Columns: M. Two lines, name,age and Ada,15, report 2 rows and 2 columns. A second line of just Ada, when the first line had a comma, is the mismatch on line 2. N counts lines that still contain something after trimming, so the ignored trailing newline is not a row. The page does not build a table, does not emit JSON, and does not treat the first row as column names. A repeated header is valid. An empty field is valid, because it still occupies a column. There is no type check and no header schema. The failure you get from a stray quotation mark is either the unclosed-quote message or a column-count message, depending on where the toggle leaves the commas. The paste stays in the browser. If the file is actually tab-separated, use the TSV page. A comma-separated file checked there would be read as one column per line. name,age and Ada,15 is the pair to try first: two rows, two columns, and the success sentence with those two counts. Add a third field on only one of the lines and the mismatch names that line. The scanner never infers a separator. A semicolon-separated file stays one column per row on this page.
Example. name,age followed by Ada,15 passes as Data syntax is valid! Total parsed rows: 2, Columns: 2. A second row of Ada alone fails with Expected 2 columns, found 1, on that line.
Limit. Quotes toggle a mode and are not an RFC 4180 escape. A blank line in the middle counts as a row. The page does not convert the CSV to a table or JSON.
What does name,age and Ada,15 report?
Data syntax is valid! Total parsed rows: 2, Columns: 2. A trailing blank line is not a third row. A blank line between the two rows is a row, and it will fail the column count.
Can a field contain a comma?
Only while a double quote has turned splitting off. The quote characters are removed from the value. A doubled quote is not the RFC 4180 escape. An odd number of quotes fails with Mismatched quotes and the line number.
Is the first row a header?
It only sets the column count. Names are not stored, and a repeated name is not an error. Every later row must have the same number of fields.
How is this different from the TSV page?
Only the separator. This page splits on commas. The TSV page splits on tabs. The quote rule, the trailing-line rule, and the success sentence are the same.