Convert CSV to a Markdown table

READMEs, GitHub issues, pull-request descriptions, Notion pages, docs sites — they all speak Markdown, and hand-building a Markdown table beyond three columns is misery: every row needs its pipes aligned with the header, and one forgotten | silently swallows a column. Drop a CSV here (or paste cells straight from Excel or Google Sheets) and download the finished table: header row, separator line, every pipe in place, literal | characters in your data properly escaped.

It’s the same private engine as everything else on this site — pasted data and files stay on your device. Filter or trim the data first so the table you publish contains exactly the rows you mean to show.

Preset: the Markdown export panel opens as soon as your data loads.

Drop a CSV, TSV or Excel file here

.csv · .tsv · .txt · .csv.gz · .xlsx — files up to 4 GB open here, in your browser. Nothing is uploaded; the file is read in place on your device.

Paste rows

Paste CSV text or cells copied from Excel / Google Sheets (they paste as tab-separated).

How it works

  1. Drop a CSV — or hit “Paste data” and paste cells copied from any spreadsheet.
  2. Filter to the rows you actually want in the document (nobody wants a 10,000-row table in a README).
  3. Download the .md file (or open it and copy the block).
  4. Paste into GitHub, GitLab, Notion, Obsidian, or any GFM-flavored renderer.

The details that break hand-made Markdown tables

GitHub-flavored Markdown tables have exactly one structural requirement — a separator line of dashes under the header — and several sneaky failure modes. A literal pipe in your data (“Model A|B”) ends the cell early unless escaped as \|; this converter escapes them. Line breaks inside a cell aren’t representable in basic GFM tables at all, so embedded newlines are flattened to spaces rather than corrupting the row structure. Empty trailing cells still need their pipes, or some renderers shift the whole row left.

One taste note: Markdown tables are for small data. Past a few dozen rows they’re slow to render and impossible to review in diffs — for anything bigger, link the CSV artifact and show the top ten rows. The filter box above is the right tool for producing that top ten.

Good to know

Frequently asked questions

Which Markdown flavors render these tables?

GitHub-flavored Markdown and everything that adopted its table syntax — GitLab, Bitbucket, Notion, Obsidian, Discourse, most static-site generators (Jekyll, Hugo, MkDocs). Original 2004 Markdown has no tables, so a renderer that’s strictly classic won’t show any table from any converter.

What happens to line breaks inside cells?

Basic GFM tables can’t contain them, so they’re replaced with spaces to keep rows intact. If you need visible line breaks inside table cells, that requires inline HTML in the Markdown, which is beyond a faithful CSV conversion.

Can I convert just a selection of a big file?

Yes — filter (or search) first; the export contains exactly the rows in view. That’s the intended workflow for turning a large dataset into a small illustrative table.