Xerobit

CSV to Markdown Converter

Paste CSV and get a Markdown table for GitHub, Notion, or any renderer. This csv to markdown converter handles quoted fields, doubled quotes, embedded commas, newlines, CRLF, and optional headers. Pick a delimiter (comma, semicolon, tab, pipe) and header option. Runs in your browser with no upload. Free, no signup.

Supports quoted fields, embedded commas, and newlines.

Character that separates fields.

If unchecked, a generic header row is generated.

Markdown

| Name | Age |
|------|-----|
| Alice | 30 |
| Bob | 25 |

How to use the csv to markdown converter

  1. Paste your CSV data into the text area.
  2. Choose the delimiter if it is not a comma.
  3. Toggle the header checkbox if the first row is not a header.
  4. Copy the Markdown table from the output box. Your csv to markdown conversion is done.

How the parser works

The tool implements an RFC 4180 compliant parser written in plain TypeScript with no dependencies. It reads the input character by character, tracking whether it is inside a quoted field. When a quote is encountered inside a quoted field, the parser checks the next character: if it is another quote, the pair represents a literal quote character and both are consumed; otherwise the quote ends the field. Fields may contain the delimiter, carriage returns, or line feeds when quoted. Line endings can be CRLF, LF, or CR. A quote only opens a quoted field at the start of a field, so a stray quote inside a plain value (such as 5" screen) stays a literal character. The parser builds a two-dimensional array of strings, then emits a Markdown table.

For a line like "A, B",C with comma delimiter, the parser sees the opening quote, reads A, B as a single field (the comma is literal), sees the closing quote, then reads C as the second field. The resulting row has two columns.

Delimiter options

Four delimiters are supported:

  • Comma (,) - the default, standard CSV.
  • Semicolon (;) - common in European locales where comma is the decimal separator.
  • Tab (\t) - for TSV (tab-separated values) files.
  • Pipe (|) - occasionally used in log exports.

The delimiter is a single character. Multi-character delimiters are not supported; pre-process your data if needed.

Header handling

When First row is header is checked (the default), the first parsed row becomes the Markdown header row and a separator row of dashes is inserted. When unchecked, the tool generates generic headers Col 1, Col 2, ... and treats every row as data. This is useful for headerless exports or when you want to add your own header later.

Ragged rows

CSV files sometimes have rows with different column counts. The parser does not drop any cell. It records the maximum column count seen and pads shorter rows with empty cells so the table stays rectangular, which Markdown requires. A note under the result reports the padding, so the table itself contains only your data. Blank lines in the input are skipped.

Common use cases for csv to markdown

  • Moving spreadsheet data into GitHub issues, README files, or pull request descriptions.
  • Converting exports from databases or APIs that emit CSV into documentation.
  • Preparing tables for static site generators (Jekyll, Hugo, Astro) that accept Markdown tables.
  • Quickly sharing tabular data in Slack, Discord, or Notion where Markdown renders natively.

Limitations

The parser works on text already in memory and does not stream, so the tool stops at about 3 MB of input or 2 million cells and says so. Pipe characters inside cells are escaped as \| so they cannot split a column, and line breaks inside a quoted cell become <br> because a Markdown table row must stay on one line. Column alignment is not set; every column uses the default alignment. A table with one very wide cell renders as wide as the content, so check long text in your Markdown viewer.

Worked examples

ExampleInputResult
Simple comma CSV with headerCSV input: Name,Age,City / Alice,30,New York / Bob,25,Los Angeles; Delimiter: ,; First row is header: yes| Name | Age | City | / |------|-----|------| / | Alice | 30 | New York | / | Bob | 25 | Los Angeles |
Quoted fields with embedded commasCSV input: "Product","Price","Description" / "Widget, Blue","$12.50","A small, blue widget" / "Gadget, Red","$9.99","A red gadget"; Delimiter: ,; First row is header: yes| Product | Price | Description | / |---------|-------|-------------| / | Widget, Blue | $12.50 | A small, blue widget | / | Gadget, Red | $9.99 | A red gadget |
Semicolon delimiter, no headerCSV input: Alice;30;New York / Bob;25;Los Angeles; Delimiter: ;; First row is header: no| Col 1 | Col 2 | Col 3 | / |-------|-------|-------| / | Alice | 30 | New York | / | Bob | 25 | Los Angeles |
Embedded newlines in quoted fieldCSV input: ID,Notes / 1,"Line one / Line two" / 2,"Single line"; Delimiter: ,; First row is header: yes| ID | Notes | / |----|-------| / | 1 | Line one<br>Line two | / | 2 | Single line |
Doubled quotes inside quoted fieldCSV input: Quote,Author / "She said, ""Hello!""",Jane / "No quotes here",John; Delimiter: ,; First row is header: yes| Quote | Author | / |-------|--------| / | She said, "Hello!" | Jane | / | No quotes here | John |

FAQ

Does this handle Excel-exported CSV with semicolons?

Yes. Choose Semicolon (;) from the delimiter dropdown. Many European Excel versions use semicolons because the comma is the decimal separator.

What about tabs? My file is TSV.

Select Tab (\t) as the delimiter. The parser treats the tab character exactly like any other single-character delimiter.

My CSV has newlines inside quoted cells. Will it break?

No. The RFC 4180 parser keeps newlines inside quoted fields as part of the cell. In the Markdown output each line break becomes a br tag, because a table row has to stay on one line.

How are doubled quotes handled?

Inside a quoted field, two consecutive quote characters represent a single literal quote. For example, "He said, ""Hi!""" parses to He said, "Hi!".

What happens if rows have different column counts?

The tool pads shorter rows with empty cells so the Markdown table stays rectangular, and a note under the result reports the maximum column count found.

Is my data sent to a server?

No. All parsing happens in your browser. Nothing is uploaded.

Can I convert Markdown back to CSV?

This tool only goes one way. For the reverse direction, look for a Markdown table to CSV converter, or paste the table into a spreadsheet, which splits it on the pipe characters.