Home · Free tools · CSV to Markdown

CSV to Markdown table

Paste a CSV, or drop a .csv or .xlsx file, and get a Markdown table back — column-aligned, pipes escaped, ready to paste into a README, a pull request or a wiki page. It converts as you type, in this tab.

Or drop a file

Drop .csv or .xlsx here to load it into the box below

CSV paste it here, or edit what the file loaded

Nothing is uploaded. The file is read by JavaScript in this tab and never leaves your computer — no server sees it, and closing the tab throws it away.

The three things that break a hand-made Markdown table

  • A pipe inside a cell. A value like b|c ends the cell early and shifts every column after it. Pipes are escaped here as \|.
  • A newline inside a quoted CSV field. Markdown tables are one row per line, so an embedded newline splits the row. It is converted to <br>, which renders as a line break inside the cell on GitHub and most wikis.
  • Ragged rows. A row with fewer fields than the header produces a malformed table. Short rows are padded with empty cells.

Aligned source, or compact source

With padding on, columns are padded with spaces so the raw Markdown lines up in a text editor — worth it for a table someone will edit by hand later. With it off you get the compact form, which is smaller in a diff and renders identically. Both are valid GitHub-flavored Markdown.

Turning off the header row

Markdown tables require a header row; there is no headerless table in the format. If your data has no header, uncheck the box and column letters (A, B, C) are used instead, so the table still renders and you can rename the columns afterward.

Where this fits

Documentation tables are usually generated from somewhere else — a query result, an export, a spreadsheet a colleague maintains. Converting once by hand is fine. Converting the same table on every release is a job for something that keeps the data.

TableDI is a desktop spreadsheet workspace that runs entirely on your machine. Its export can produce a REST endpoint for a table, which is a more durable way to keep a document in sync with data than pasting a table into it every time.

Questions people ask

Does it produce GitHub-flavored Markdown?

Yes — the standard pipe table with a separator row, which GitHub, GitLab, Obsidian, Notion's Markdown import and most static site generators all render.

Can I convert an Excel file rather than pasting CSV?

Yes. Drop a .xlsx on the box at the top and its first sheet is loaded into the text area as CSV, where you can trim it before converting.

What happens to commas and quotes inside cells?

They are parsed as CSV first, so a value like "Smith, John" stays in one cell and a doubled quote becomes a single character. Only pipes need escaping in the Markdown output.

Are my files uploaded anywhere?

No. The file is read by JavaScript running in this tab, using the browser's own DecompressionStream to unzip .xlsx and a parser that runs on your machine. There is no server call in the page — you can watch the network tab while you use it. Close the tab and the data is gone.

Can it do column alignment markers, like right-aligned numbers?

Not yet — the separator row is written plain. Add colons to the separator row by hand (|---:|) to right-align a column after pasting.

Do this on your own machine instead

TableDI is a desktop spreadsheet workspace that runs entirely on your machine. Import the file, fix it, chart it — nothing is uploaded, and there is no account to create.

Free forever, not a trial — no account, no card. macOS and Windows. What the paid tier adds.

Last reviewed 2026-09-01 by the TableDI team. Something wrong on this page? Tell us — it is one inbox, read by the people who build TableDI.