Tools · Markdown

Markdown table to CSV

A pipe table carries its own proof — the |---| line — so it opens as rows with no question asked, and the rows write out as CSV, JSON or NDJSON.

no signup · runs entirely in your browser · ⌘V works anywhere on this page
See it done · 10 s
Markdown table to CSVA pipe table opens straight as rows — the |---| line is the proof, no question asked; Convert, CSV writes them out. · 10 s

What you get

  • Reads the sample as 6 rows and writes them as CSV — 6 rows under the table's own header
  • Keeps an escaped pipe as the character it is, and quotes a cell that then holds a comma
  • Reads a table pasted from a README, a ticket or a chat, leading and trailing pipes or not
  • Converts the same rows to a JSON array, NDJSON, YAML or XML from the app

What it will not do

  • Render Markdown, or read anything but the table — text around it is left alone.
  • Keep alignment. A CSV has no column alignment to carry, so the colons in the rule line are ignored.
  • Send your text anywhere. The page is static and the engine runs in this tab — open the network panel and watch it stay empty.

What the table gives

A pipe table → rows
| sku | qty | |---|---| | A | 1 |sku,qty A,1
The |---| line

The signature and the header proof in one: the row above it is the header, so no question is asked.

An escaped pipe in a cell
| a | b | |---|---| | x \| y | 1 |a,b x | y,1
Alignment colons

Read and ignored — :---: says nothing a CSV can carry.

The sample

What the first sample opens — a real file, not an illustration written for this page.

kibana-export.md
| @timestamp | level | service | message | duration_ms |
|---|---|---|---|---|
| 2026-04-21T14:32:08Z | INFO | checkout-api | stripe.charge.completed | 88 |
| 2026-04-21T14:32:07Z | WARN | checkout-api | retry.scheduled attempt=2 | 400 |
| 2026-04-21T14:32:07Z | ERROR | checkout-api | stripe.webhook.signature_invalid | 12 |
| 2026-04-21T14:32:07Z | INFO | checkout-api | cart.items.priced items=2 | 51 |
| 2026-04-21T14:32:06Z | INFO | auth-svc | session.token.issued ttl=3600 | 9 |
| 2026-04-21T14:32:05Z | ERROR | inventory | inventory.hold.failed sku=BRD-OAK-002 | 130 |

in VS Code

A Markdown table is found by its rule line, not its file type; Read as rows, then Convert, then CSV writes it into a new editor.

unstringify for VS Code14-day trial · Free and Pro

Questions

Why is there no question about the header?

Because the table answers it: the |---| line under the first row is a Markdown table’s signature, and the row above it is the header by definition.

What about a pipe inside a cell?

Written in Markdown as \|, it is read as a pipe and written into the CSV cell as one, quoted if the cell needs it.

Can I get JSON instead of CSV?

Yes — open the rows in the app and Convert offers JSON, NDJSON, YAML and XML beside CSV.

Try it on the file that broke your afternoon.

free while in alpha · no signup