Convert HTML Table to CSV
Paste HTML containing any <table> and extract the data as a CSV. If the page has multiple tables, pick the one you want. Runs entirely in your browser — nothing is uploaded.
HTML → CSV is coming soon. In the meantime, try the JSON → CSV converter, which has flattening built in.
How it works
Paste raw HTML from any page
Right-click any table on a webpage, Inspect Element, copy the outer HTML of the <table>, and paste it here. Or paste a complete HTML document — the converter finds all <table> elements automatically.
Select which table to extract
If the HTML contains multiple tables, buttons appear so you can choose which one to convert. Tables are labeled by their <caption> element or by position (Table 1, Table 2, ...).
thead / tbody / tfoot all handled
The converter respects the standard HTML table structure. Header rows in <thead> become the first rows in the CSV. Footer rows in <tfoot> appear last.
Example
Wikipedia-style comparison table extracted from a page's HTML source
<table>
<thead>
<tr><th>Language</th><th>First Release</th><th>Typing</th></tr>
</thead>
<tbody>
<tr><td>Python</td><td>1991</td><td>Dynamic</td></tr>
<tr><td>Go</td><td>2009</td><td>Static</td></tr>
<tr><td>TypeScript</td><td>2012</td><td>Static</td></tr>
</tbody>
</table>Language,First Release,Typing Python,1991,Dynamic Go,2009,Static TypeScript,2012,Static
The <thead> row becomes the CSV header. <tbody> rows become data rows. No manual cleanup needed.
Frequently asked questions
How do I get the HTML for a table on a website?
Right-click anywhere on the table and select 'Inspect' (Chrome/Firefox) or 'Inspect Element'. In the DevTools panel, find the <table> element, right-click it, and choose Copy > Copy outerHTML. Paste that here.
Can I paste a full HTML page instead of just the table?
Yes. The converter parses the entire HTML document and finds all <table> elements. You can paste the full page source and then select which table to extract.
What happens to merged cells (colspan/rowspan)?
Merged cells are read as their text content in their actual position. The visual merging is not reproduced in the CSV — cells with colspan or rowspan appear once in their source position.
Does this work with tables that use JavaScript to render?
No — this converter processes static HTML. If a table is rendered by JavaScript after page load, you need to copy the rendered HTML from DevTools (which shows the live DOM), not the page source.
Why does my CSV have extra blank rows?
Some HTML tables use empty <tr> rows as visual spacers. These appear as blank rows in the CSV. Remove them in a spreadsheet app or use our CSV viewer to filter them out.
Related Tools
All conversions run in your browser — nothing is uploaded.
Browse all 26 converters →