tsvkit.org
TSV Toolkit
Sample data Say hi →

HTML Table to TSV

multiple tables · colspan / rowspan expanded · runs in your browser

Paste a chunk of HTML — a whole saved page, a fragment from devtools, one <table> element — and get tab-separated text out. Tabs matter here more than commas: TSV is what Excel and Google Sheets accept from the clipboard, so the output pastes straight into a spreadsheet as proper columns with no import wizard. Merged cells are expanded rather than left as holes, and if the page has several tables you pick which one.

table
Drop an .html file here, or
ready

How to use

  1. Get the HTML. In any browser: right-click the table → Inspect, find the enclosing <table> in the elements panel, right-click it → Copy → Copy outerHTML.
  2. Paste it in. Or drop a saved .html file, or paste an entire page's source — extra markup is ignored.
  3. Pick the table from the dropdown if the page contained more than one. Each option shows its row count so the right one is easy to spot.
  4. Copy the output and paste into Excel or Sheets. It lands as columns directly, because both apps read tab-separated text from the clipboard.

How the markup is flattened

Each cell becomes its plain text with whitespace collapsed to single spaces — links keep their label and lose the URL, <strong> and <span> wrappers disappear, and a cell containing a nested list becomes its items run together. A tab inside a cell's text is replaced by a space, since a literal tab would break the column count.

colspan and rowspan are expanded by repeating the value across every grid position the merge covered. A header cell spanning three columns therefore appears three times in row one. That's usually more useful than blanks, because it keeps the grid rectangular and lets a spreadsheet or parser read it without special cases — but it does mean a heavily merged report table produces visible repetition. Delete the extra columns afterwards with delete columns if you want them gone.

<thead>, <tbody>, and <tfoot> are ignored as containers — rows come out in document order, so a footer row stays at the bottom where you'd expect. Nested tables are listed as separate options in the picker rather than being inlined into the parent.

FAQ

Nothing happens — it says no table found.

The pasted markup has no <table> element. Many modern sites lay out grids with <div>s and CSS instead, and there's no reliable way to detect those. If the data is div-based, copying the rendered selection from the page and using paste from Excel often works better, because the browser puts a tab-separated version of a rendered selection on the clipboard.

Can I fetch a table from a URL?

No, and that's deliberate — fetching a URL would mean a server making the request, which would break the promise that nothing leaves your machine. Copying the outerHTML from devtools takes about five seconds and keeps everything local.

The numbers came through as text with currency symbols.

Cell text is taken verbatim, so $1,299.00 stays exactly that. Strip the symbols with find and replace in a column, then use round numbers or a spreadsheet's own number formatting.

What about the reverse — TSV to an HTML table?

That's TSV → HTML, which writes a clean <table> with a <thead> you can drop into a page.

Privacy

100% client-side. The markup is parsed by your own browser. See the privacy policy.