IMPORTHTML not working? Here's why — and how to get any web table into Google Sheets
=IMPORTHTML() is the built-in Google Sheets function for pulling a table or list off a web page. When it works, it's great. When it doesn't, it fails in frustrating, silent ways: #N/A, a cell that says "Loading..." forever, or a table that imports half-empty. Here's why that happens, how to fix the fixable cases, and what to do when IMPORTHTML simply can't work.
The formula, briefly
``
=IMPORTHTML("https://example.com/page", "table", 1)
``
The three arguments are the page URL, whether you want a "table" or a "list", and the index (the 1st table on the page, the 2nd, and so on). Most problems come down to one of the failures below.
Why IMPORTHTML fails
1. The table is built by JavaScript. This is the big one. IMPORTHTML only sees the raw HTML that the server sends — it does not run the page's JavaScript. Modern sites (dashboards, sports and finance stats, anything "interactive") build their tables in your browser after the page loads. That data isn't in the HTML Google fetches, so IMPORTHTML finds nothing. This is the single most common reason you get #N/A on a page where you can clearly see a table.
2. The page needs a login. If the table only appears when you're signed in, Google's servers — which aren't logged in as you — can't reach it.
3. It isn't really a <table>. Lots of "tables" are actually grids of <div>s styled to look like a table. IMPORTHTML can't read those as a table at all.
4. Wrong index. There may be several tables on the page. If index 1 returns the wrong one (a layout or navigation table), try 2, 3, and so on until you hit the data.
5. Too many IMPORT formulas / rate limits. A sheet stuffed with IMPORT formulas can throttle, leaving cells stuck on "Loading..."
Fixes worth trying first
- Switch the type and index. Try
"list"instead of"table", and step the index through1,2,3. - Confirm it's a real table. Right-click the data in your browser and choose Inspect. If you see
<table>,<tr>,<td>tags, IMPORTHTML has a chance. If you see a wall of<div>s, it doesn't. - View the raw HTML. Add
view-source:in front of the URL. If the numbers you want aren't in that raw source, the table is JavaScript-rendered and IMPORTHTML will never see it — no formula tweak will fix that. - Reduce IMPORT formulas. Paste a working result as values and delete extra live formulas.
When IMPORTHTML simply can't work
If the table is JavaScript-rendered or behind a login, you've hit a wall that no formula change will get past. IMPORTHTML reads the page as a robot that can't run scripts or sign in — but your browser already has the finished, rendered table on screen. The reliable move is to grab it from there.
That's exactly what Table to Sheets does. It runs in your browser, so it reads the table after the page's JavaScript has run and while you're logged in — the cases IMPORTHTML can't reach. Click the toolbar button on any page, it finds every table, and you export the one you want to a clean CSV (free, with no row limit) or straight to a new Google Sheet.
Because it reads the page's real, rendered structure — no screenshots, no OCR, no guesswork — your columns line up and your numbers come across as numbers.
The short version
#N/Aon a visible table almost always means the table is built by JavaScript — checkview-source:to confirm.- For static
<table>pages, fix it by trying a different index or the"list"type. - For JavaScript-rendered or login-only tables, skip the formula and pull the rendered table straight from your browser instead.
Get Table to Sheets — free
Export any table on any web page to a clean CSV in one click. Free and unlimited — no row caps. One click to Google Sheets with Pro.
Add to Chrome