CSV to Markdown table converter — free, in your browser

Convert CSV files to a Markdown table in your browser. Quoted fields, embedded newlines and non-comma separators all handled.

CSV is the only format here with no binary signature whatsoever. Every other file on this site announces itself in its first few bytes — PK for a zip, %PDF, the OLE magic number — but a CSV is just text, and text that could equally be a log file or a shopping list. That is why file2md identifies it from the .csv extension and passes that extension to the converter explicitly, rather than sniffing the contents: there is nothing in the contents to sniff.

The output is a single Markdown table, first row as the header. The parsing is stricter than the format's reputation suggests it needs to be: fields wrapped in quotes are unwrapped, doubled quotes inside a quoted field become one quote, a newline inside a quoted field stays part of that field instead of starting a new row, and a file separated by semicolons or tabs rather than commas is handled rather than collapsed into one column.

What CSV never had, it cannot keep. There are no types, so a leading-zero postcode or a long identifier arrives as the characters that were written — no spreadsheet is involved to reinterpret them as numbers.

What is preserved

  • Every row and column as a Markdown table
  • The first row as the table header
  • Quoted fields, with the quotes removed
  • Newlines inside a quoted field, which stay in their row rather than starting a new one
  • Separators other than comma, such as semicolon or tab, detected automatically
  • Unicode text as written

What is lost

  • Nothing about presentation, because a CSV has none
  • Column types — every value is text
  • Any second table, since a CSV holds exactly one

Known limitations

A .csv is recognised by its extension, not by its contents: renaming a spreadsheet to .csv without exporting it will not work, and there is nothing in the bytes for the app to fall back on. A byte order mark at the start of the file is stripped rather than left in the first heading, and a file saved as UTF-16 rather than UTF-8 is decoded correctly.