CSV to Markdown Table

100% private — runs on your device, never uploaded. Works offline once loaded.

Paste any CSV and get a clean, GitHub-flavoured Markdown table with a proper alignment row. Quoted fields, commas inside quotes and custom delimiters are all handled locally in your browser.

What a Markdown table actually is

Markdown does not have a native table syntax in the original spec, but GitHub-Flavoured Markdown (GFM) added one that is now supported almost everywhere: GitHub, GitLab, Reddit, Discord, static-site generators and most note apps. A GFM table is three parts — a header row, a delimiter (alignment) row made of dashes, and one row per record. Pipes (|) separate the columns and the delimiter row tells the renderer how to align each column.

This tool takes tabular CSV data — the format every spreadsheet and database exports — and rewrites it into that pipe-and-dash syntax so you can drop it straight into documentation, a pull-request description or an issue comment without hand-typing pipes.

How the conversion works

First the CSV is parsed with a small state machine that respects quotes: a field wrapped in double quotes can contain the delimiter, line breaks and escaped quotes (written as two double quotes). That is why "Paris, France" is treated as one value instead of two columns. The number of columns is taken from the widest row so ragged data still lines up.

Each cell is then escaped for Markdown: literal pipes become \|, backslashes are doubled, and any embedded newline is replaced with
so the table stays on one logical row. The output columns are padded to equal width, which keeps the raw Markdown readable in source form even before it is rendered.

  • Header row: the first CSV row, or auto-generated "Column 1, 2, 3…" when the header toggle is off.
  • Alignment row: :--- (left), :---: (center), ---: (right) or --- (default).
  • Body rows: one per remaining CSV record, cells escaped and padded.

When to use it

Reach for CSV-to-Markdown whenever you have data in a spreadsheet, a database query result or an API export and you need it to appear as a table in a text-based document. Common cases include summarising benchmark numbers in a README, pasting a list of configuration flags into a wiki, or turning a support export into a readable issue comment.

Because the delimiter is configurable, it also works with European CSVs that use semicolons, tab-separated exports and pipe-delimited logs.

Caveats and limits

Markdown tables are intentionally simple: they do not support merged cells, multi-line paragraphs inside a cell (newlines are flattened to
), or nested tables. If a cell contains complex formatting it will render as literal text.

Very wide tables can overflow narrow pages once rendered — that is a display concern of wherever you paste the Markdown, not of the syntax itself. For huge datasets a collapsible section or an attached CSV is often friendlier than a giant table.

Frequently asked questions

What is the alignment (delimiter) row for?

The row of dashes under the header is required by GitHub-Flavoured Markdown — it separates the header from the body and encodes alignment. A colon on the left means left-aligned, colons on both sides mean centered, and a colon on the right means right-aligned.

Can I use a tab or semicolon delimiter?

Yes. Set the delimiter dropdown to Semicolon, Tab or Pipe, or leave it on Auto-detect which inspects the first non-empty line and picks the separator that yields the most columns.

What happens if my rows have different column counts?

The table is built to the width of the widest row. Shorter rows are padded with empty cells so every row has the same number of pipes, which keeps the table valid.

How are special characters like pipes handled?

Pipe characters inside a value are escaped as \| so they do not break the column structure, backslashes are doubled, and line breaks inside a quoted field are converted to <br>.

Will the copied Markdown look aligned in my editor?

Yes. The tool pads each column to a consistent width, so the raw Markdown source is neatly aligned and easy to read even before a renderer turns it into a table.

Is there a row or file-size limit?

There is no hard limit. Everything runs in your browser, so the practical ceiling is your device's memory — thousands of rows convert instantly.

Advertisement