Send Any HTML Table to Google Sheets in One Click

Google Sheets has a built-in function for importing web tables — and it fails more often than it works on the modern web. Here is why, and what to use instead.

The classic: IMPORTHTML

=IMPORTHTML("https://example.com/page", "table", 1)

It fetches the page server-side and grabs the n-th <table>. When it works, it even refreshes automatically.

Where it breaks:

  • JavaScript tables — Sheets fetches the raw HTML, so tables rendered client-side (most dashboards, finance sites, sports stats) come back empty.
  • Login walls — Sheets can't see pages that need your session.
  • Table index guessing — "table 1" may be a layout table; you end up trying 1, 2, 3…
  • Formatting — merged headers and locale numbers (1.234,56) arrive broken.

The reliable way: extract from the browser

Your browser already renders the final table — JavaScript included, login included. A table extractor extension grabs that version.

With TableGrab, you click the extension icon, it highlights every table on the page, and Send to Google Sheets creates a new spreadsheet with the data already cleaned: headers detected, empty rows removed, numbers typed as numbers.

The Google Sheets export uses your own Google account (OAuth) and the table data is never stored on our servers — it passes through only to call the Sheets API.

When to use which

Situation Best tool
Static public table, needs auto-refresh IMPORTHTML
JavaScript-rendered table Extension
Page behind login Extension
One-off grab, you're already on the page Extension
Scheduled scraping of many pages A proper scraper/script

For day-to-day "I need this table in Sheets now" moments, the one-click path wins. TableGrab is free for 5 exports per day — install it here.

← Back to blog