100% local — your data never leaves your browser

Markdown Table to CSV — Into a Spreadsheet

Pull the first GFM table out of a Markdown document as CSV. What was a table in a README opens in Excel or Google Sheets, sortable.

Instant Private Zero cookies
Delimiter

Markdown input

CSV output

What this tool does

A Markdown document goes in, the CSV of its first table comes out.

Some prose, then the table.

| Name | Role |
| --- | --- |
| Ada | Author |
| Grace | Compiler |
Name,Role
Ada,Author
Grace,Compiler

Quoting is handled where it is needed: a cell holding a comma, a quote or a line break comes out quoted, so the file opens correctly in a spreadsheet. The delimiter is an option — a semicolon for locales where that is what a spreadsheet expects.

Any separator GFM accepts

| Name | Score |
| :-- | --: |
| Ada | 10 |
Name,Score
Ada,10

GFM asks for one dash per cell in the separator row, with optional colons for alignment. This tool used to want three, so a perfectly ordinary | :-: | or | - | was answered with “Expected a Markdown table” — a table GitHub renders, refused. That was a real defect, found while writing this page and fixed. The colons are read and then dropped: CSV has no alignment to carry.

The first table, not the first example

Documentation shows tables inside code blocks, and the converter used to take the example rather than the data:

Write the header like this:

```
| a |
| --- |
```

| Name | Role |
| --- | --- |
| Ada | Author |

Fenced blocks are now skipped, so this document gives you Name,Role. It gave a before. The prose around a table is ignored either way, so pasting a whole README is fine.

What CSV cannot carry

  • Only one table. The first one in the document, not all of them. Cut the one you need if it is not the first.
  • No formatting. **bold**, `code` and links stay in the cell exactly as they are written, because CSV has no way to render them.
  • No alignment. The colons of the separator row are read and forgotten.
  • Ragged rows. A row with fewer cells than the header is padded with empty fields; a row with more widens the table rather than losing anything.

Private by design

Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.

Frequently asked questions

Why was my table refused?
It probably had a short separator row. Until this page was written the converter wanted at least three dashes per cell, while GFM asks for one: `| :-: |` and `| - |` are tables GitHub renders and this tool turned away with “Expected a Markdown table”. One dash is enough now, and the alignment colons are read and then dropped — CSV has no alignment to carry.
My document has several tables. Which one do I get?
The first, and since this page was written the first real one: a table shown inside a fenced code block — documentation of a format, most of the time — is skipped rather than taken. The prose around the table is ignored either way, so you can paste a whole README.
What happens to the cells?
An escaped pipe (`\|`) becomes a plain pipe, the spaces around a cell go, and inline Markdown stays as written: `**bold**` arrives as `**bold**`, because CSV has no bold. A row shorter than the header is padded with empty fields, a longer one widens the table, and the delimiter is yours to choose.

Related converters