How to export a table from a website to Excel
Short answer: For a small, simple table, select it, copy and paste into Excel. For a public page you want to refresh later, use Excel's Data → From Web (Power Query) or Google Sheets' IMPORTHTML. For tables that are built by JavaScript, sit behind a login, or only load rows as you scroll, use a browser extension that reads the page you are looking at — and check the row count, because that last kind of table is where most methods quietly lose data.
Which method to use
| Method | Good for | Where it breaks |
|---|---|---|
| Copy and paste | One small, plain table, once | Merged cells, grids made of <div>s, numbers and dates pasted as text, rows off screen |
| Excel From Web | Public pages you want to refresh | Pages behind a login, grids that only draw visible rows |
| Sheets IMPORTHTML | Public pages, live in a sheet | Same as above, plus tables drawn by JavaScript; you must guess the table's number |
| Browser extension | JavaScript grids, logged-in pages, repeat work | Depends on the tool — virtualized grids are the real test |
1. Copy and paste
- Drag-select the table from the first header cell to the last cell.
- Copy it (
Ctrl+C, orCmd+Con a Mac). - In Excel, click the first cell and paste. If formatting from the website comes along, use Paste Special → Text or Keep Text Only instead. In Google Sheets,
Ctrl+Shift+Vpastes values only.
This works more often than people expect for plain HTML tables. It goes wrong in predictable ways:
- Merged cells shift columns. A header that spans two columns, or a cell that spans three rows, can push every value after it one column to the right.
- Everything lands in one column. Many modern “tables” are not HTML tables at all but rows of
<div>elements styled to look like one. The clipboard gets lines of text, and Excel puts each line in column A. - Numbers and dates change meaning. “1,234” may arrive as text, “03/04” may become a date in your locale, and long IDs can turn into scientific notation.
- You only get what you selected. On long tables, selecting by dragging is slow and easy to get wrong — and on grids that only render the rows on screen, the rest are not on the page to select.
2. Excel: Get Data → From Web (Power Query)
Excel can fetch a web page itself and list the tables it finds. In Excel for Microsoft 365 on Windows:
- Open the Data tab and click From Web (it is in the Get & Transform Data group; on some versions it is under Get Data → From Other Sources → From Web).
- Paste the page address and click OK. If asked how to connect, choose Anonymous for a public page.
- The Navigator lists the tables Excel found. Click each to preview it, pick the right one and click Load — or Transform Data to clean it up in Power Query first.
- Later, Data → Refresh All fetches the page again and updates the table.
This is the best free option for public tables that change — exchange rates, sports results, statistics pages. Its limits:
- It loads the page on its own — in newer Excel through a built-in browser, but without your login and without scrolling. Tables that need sign-in, or grids that only draw visible rows, come back empty or partial.
- It does not use your browser's login. Excel asks for its own credentials, so tables inside web apps, dashboards and intranets you are signed in to are usually out of reach.
3. Google Sheets: IMPORTHTML
In any cell of a Google Sheet, type:
=IMPORTHTML("https://example.com/page", "table", 1)
The last number picks which table on the page to import, starting at 1; if you get the wrong one, try 2, 3 and so on. Use "list" instead of "table" for bulleted lists. To get an Excel file afterwards, use File → Download → Microsoft Excel (.xlsx).
The catch is like Excel's, only stricter: the page is fetched by Google's servers, not by your browser. They do not run the page's JavaScript and they are not signed in as you. If IMPORTHTML returns an error, an empty result or only part of the table, the table is almost certainly built by a script or behind a login. Changing the number will not fix that.
4. A browser extension
An extension reads the page that is open in your tab — after its JavaScript has run, with you logged in. That is the main advantage over the two importers above, and it is why extensions handle dashboards, admin panels and reporting tools that the importers cannot see.
Extensions come in two broad kinds. Table exporters look for tables and data grids and turn each into a spreadsheet. List scrapers look for any repeating pattern — product cards, search results, directory entries — and turn the pattern into rows. If your data looks like a grid with column headers, you want the first kind; if it looks like a feed of cards, you want the second. We compare the popular ones on Table Capture and Instant Data Scraper alternatives.
Whichever you use, compare the number of rows you got with the number the site says it has. That check catches the problem in the next section.
The case most tools miss: grids that only render visible rows
Large web grids are often virtualized. The page knows about all 12,000 rows, but to stay fast it keeps only the 30–50 rows you can see in the page and swaps them as you scroll. Infinite-scroll tables are a cousin: more rows load as you reach the bottom.
For exporting, this means the rest of the table is not in the page at the moment you copy or export. Copy-paste gets what is on screen. Excel From Web and IMPORTHTML get what the server sent, often nothing. A plain exporter reads the page once and produces a tidy file with 40 rows — and nothing tells you the other 11,960 are missing.
Your options, in order of preference:
- The site's own export. Many web apps have an Export or Download CSV button, sometimes hidden in a menu above the grid. It reads the data, not the screen.
- Show more rows per page, if the grid lets you, then export page by page.
- A tool that scrolls and stitches. It scrolls the grid, collects the rows each time they render, removes duplicates and joins them into one table.
The third option is what GridScoop was built around. When you open it on a page, it lists the tables and grids it found, biggest first, and marks grids it detects as virtualized. Capture full grid then scrolls that grid and stitches every row into one table. It stops at 100,000 rows, 4 million cells, 400 screens of the grid or 90 seconds, whichever comes first, and says so when it stops early rather than handing you a short file without comment.
To use it:
- Open the page with the table and click the GridScoop icon.
- Pick the table from the list. If it is marked virtualized, click Capture full grid and keep the popup open until it finishes.
- Click Excel or CSV to download, or Copy for Sheets to paste into Google Sheets. There are also JSON, Copy Markdown, Merge pages for tables split across pages, and All tables → Excel for one workbook with a sheet per table.
What it cannot do, so you do not waste time: grids inside a shadow root (common in web-component UIs) are not scanned in version 1.0; tables inside a frame need the frame opened in its own tab first; Merge pages works only when the next page loads in place, without a full page reload; and grids that also virtualize their columns export only the columns that were rendered. Plain exports stop at 20,000 rows.
Saving as CSV instead of Excel
If you need CSV — for an import, a database or a script — get the table into a spreadsheet by any method above and save it: in Excel, File → Save As and choose CSV UTF-8 (Comma delimited); in Google Sheets, File → Download → Comma-separated values. Pick the UTF-8 option in Excel when the table has accents or non-Latin text, or they may come out garbled. GridScoop's CSV download is UTF-8 with a byte-order mark, which Excel recognises when it opens the file, and it guards cells that start with characters a spreadsheet could treat as a formula.
Questions
Why does my exported table have fewer rows than the website shows?
The grid is probably virtualized: it keeps only the rows on screen in the page and swaps them as you scroll. Copy-paste, Excel From Web, IMPORTHTML and most exporters read the page once, without scrolling, so they get only those rows. Use the site's own export if it has one, or a tool that scrolls the grid and stitches the rows together.
Can I export a table from a page I have to log in to?
Excel From Web and Google Sheets IMPORTHTML fetch the page themselves, without your browser session, so they usually cannot see pages behind a login. Copy-paste and browser extensions work on the page you are already looking at, so they can.
How do I export an HTML table to CSV instead of Excel?
Bring the table into Excel or Google Sheets with any method on this page, then save as CSV: in Excel, File, Save As, CSV UTF-8; in Google Sheets, File, Download, Comma-separated values. A browser extension can also save CSV directly.
Is GridScoop free?
Every feature is in the free plan, with 300 exported rows a day. A single table larger than that still exports in full, once a day. GridScoop Pro costs $15 a year and removes the daily allowance.
Does GridScoop upload the tables I export?
No. Extraction and file building happen inside your browser. The only network request GridScoop makes is the Pro licence check, which sends the licence key, the extension ID and its version.