Convert an HTML Table to CSV or JSON

Paste HTML markup or drop an .html file and get every table it contains as a CSV or JSON download. Nothing is sent anywhere.

Convert an HTML Table to CSV or JSON

Drop your HTML file here

Up to 20MB per file. Stays on this device.

Nothing is sent anywhere. Turn off your Wi-Fi and this page still works — try it.

How it works

  1. Drop or choose an .html file, or paste HTML markup directly into the text box.
  2. Review each table it found — a real preview, with a toggle for whether the first row is a header and a × button to drop a stray row.
  3. Download one table as CSV or JSON, or download every table found at once.

Frequently asked questions

Is my markup or file sent anywhere?

No. Pasted markup and uploaded files are both read entirely on your device — the parsing happens in your browser’s own HTML engine, nothing is sent to a server. Turn off your Wi-Fi after the page loads and it still works.

Does this handle merged cells (colspan/rowspan)?

Yes. A cell that spans multiple columns or rows is expanded so every row in the CSV/JSON output has the same number of columns, with the merged cell’s value repeated into each cell it visually covers.

What if the page has more than one table?

Every <table> found — including one nested inside another — is shown as its own separate block with its own download buttons, plus a “Download all” option if more than one was found.

How does it know which row is the header?

A row is treated as a header if every one of its cells is a <th>, which is how most real-world tables mark their header row. Use the checkbox above the table to override it either way — the JSON export uses whichever row is currently marked as the header for its field names.

Is my pasted markup run as code?

No. Your markup is parsed as inert data only — any <script> tag inside it is never executed, and nothing from it is ever inserted into this page.

Files are processed locally in your browser and never uploaded. Read more on the privacy page.