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.