Skip to content
Calquer

Scrape Any HTML Table to CSV in Chrome (Free)

By M H TawfikUpdated 11 min read

html table to csvexport to CSVchrome extension

To turn an HTML table into a CSV in Chrome, open the page, run a free table-to-CSV extension, let it auto-detect the table, then download the file. A point-and-click extension reads the live table in your browser, keeps the headers as columns, and exports a clean CSV in about 30 seconds — no code, XPath, or copy-paste.

This guide shows the fastest method, the built-in spreadsheet alternatives, and how to handle the messy tables that break simpler tools.

Why exporting an HTML table is harder than it looks

Exporting an HTML table sounds easy, but real tables fight back. Selecting and pasting often scrambles merged cells, drops links, splits numbers, and only grabs what is on screen. Many "tables" are not real <table> elements at all — they are styled <div> grids that copy as a jumbled mess.

Here is what trips people up most often:

  • Merged cells. Cells with rowspan or colspan paste into the wrong columns, so values shift and rows misalign.
  • Hidden rows. Long tables load more rows only as you scroll, so a quick copy captures the first screen and stops.
  • Pagination. A table split across pages ("1 2 3 … Next") needs every page collected, not just page one.
  • Fake tables. Card and grid layouts built from <div> and <span> elements look like tables but have no real cells to copy.
  • Encoding noise. Currency symbols, accented names, and emoji can turn into garbled characters in the wrong export.

The reliable fixes all share one idea: read the rendered table the way the browser sees it, then write proper rows and columns. That is what the methods below do.

What is the fastest way to scrape an HTML table to CSV?

The fastest way is a one-click table-to-CSV extension in Chrome. Open the page with the table, click the extension, let it auto-detect the repeating rows, confirm the columns, and download. A pattern-detecting tool reads the live HTML table, names columns from the real headers, and exports CSV in roughly 30 seconds.

Here is the full workflow, step by step:

1. Install the extension and open your table

Add a free table-to-CSV tool such as Calquer from the Chrome Web Store. It also works in Edge and Firefox. Then navigate to the page that has the table you want — a stats page, a pricing grid, a schedule, or a comparison table.

2. Auto-detect the table and its headers

Open the extension on the page. A good detector scans the rendered DOM and highlights the largest repeating group, which is usually your table. For real <table> and ARIA grid markup, it reads the column names straight from the table's own headers, so your columns arrive labeled correctly.

3. Toggle and rename columns

Review the proposed columns — name, price, date, link, and so on. Switch off any column you do not need, and rename the rest in plain English. This is where you decide the exact shape of your spreadsheet before a single row is exported.

4. Collect every row, then download

Start the collection. The tool gathers all the table rows, including ones that load on scroll or sit on later pages, then lets you download CSV, JSON, or TSV. Open the CSV in Excel or Google Sheets and you are done.

A browser extension runs on the fully rendered page you are already viewing — logged in or not. That is why it captures JavaScript-built tables that a basic URL importer cannot see.

How do I export a table with Google Sheets or Excel instead?

You can also export an HTML table without an extension using built-in spreadsheet tools. In Google Sheets, use the IMPORTHTML function with the page URL. In Excel, use Data → From Web (Power Query) to pull tables. Both work well for static, public <table> elements but struggle with dynamic or paginated tables.

Google Sheets IMPORTHTML. In any cell, type a formula like this and point it at the table:

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

The last number is which table on the page to grab — 1 for the first, 2 for the second, and so on. Sheets refreshes it automatically, which is handy for tables that change.

Excel Power Query. Go to Data → From Web, paste the URL, and Excel's Navigator lists the tables it found. Pick one, then Load it into a sheet. Power Query also lets you clean columns before loading.

These methods are genuinely useful, but they share real limits. Both read the page's raw HTML, so they miss tables drawn by JavaScript, content behind a login, and rows hidden by infinite scroll. Neither follows pagination on its own.

Which method should you choose?

MethodBest forHandles scroll / paginationJS-rendered tablesStays on your device
Copy / pasteA tiny, clean tableNoOnly what is visibleYes
Google Sheets IMPORTHTMLStatic public <table>NoNoSends URL to Google
Excel Data → From WebStatic public <table>NoLimitedYes
Online HTML-to-CSV converterOne <table> you can pasteNoNoNo — you paste it out
Table-to-CSV extensionAny real or fake tableYesYesYes (on-device)

For a deeper Excel walkthrough, see scrape website data into Excel with no code.

How do I handle merged cells, nested tables, and multi-page tables?

For tricky tables, work with the rendered structure rather than raw HTML. An in-page extension reads the table after the browser lays it out, so merged cells map to the right columns and nested tables are easier to separate. For multi-page tables, enable collection across pages so every "Next" page is gathered into one CSV.

A few practical tactics:

  • Merged cells (rowspan / colspan). Copy-paste shifts these into the wrong place. A tool that reads the laid-out table keeps each value under its true header. If a value is still missing, fill it down in your spreadsheet after export.
  • Nested tables. A table inside another table confuses importers. Point the tool at the inner table you actually want by clicking one of its rows, so it learns that pattern and ignores the outer wrapper.
  • Multi-page tables. When rows are split across numbered pages, turn on page-following so the tool clicks through "Next" and stacks every page's rows together. There is more on this in scrape infinite scroll and pagination to CSV.
  • Sortable or filtered tables. Sort or filter the table in your browser first, then export. The tool reads whatever rows are currently shown, so your filter carries through.

What about "tables" that are really div grids?

Many modern layouts are not real tables at all. They are <div> and <span> elements styled to look like rows and columns, with no <table> markup underneath. These copy and import as a scrambled blob, and IMPORTHTML cannot see them as a table. A pattern-detecting scraper handles them because it learns the visual repeating pattern.

Instead of looking for <tr> and <td> cells, a pattern detector finds the largest group of repeating items on the page — each "card" or "row" — and treats each as a record. It then lines up the matching pieces inside each item (title, price, link) as columns.

Because these fake tables have no real headers, the tool cannot read column names from markup. So name the columns yourself during setup. The trade-off is one extra step in exchange for being able to export layouts that spreadsheet importers simply cannot read. For the broader approach across any layout, see how to export any website to CSV without code.

How do I keep headers, format numbers, and fix encoding?

To keep clean output, name your columns before exporting, use a tool that reads real <table> headers automatically, and export as UTF-8 CSV so symbols and accents survive. Then do a light cleanup pass in your spreadsheet: format numbers and dates, split combined values, and trim stray whitespace.

  • Headers. For native tables and ARIA grids, a good tool names columns from the real <th> headers. For div grids, you label them yourself. Either way, confirm the header row before you download.
  • Numbers. Scraped prices often arrive as text like $1,299. In your spreadsheet, strip the currency symbol and commas so the column sorts and sums as numbers, not text.
  • Dates. Normalize formats (for example 2026-06-02) so sorting works and your spreadsheet recognizes them as real dates.
  • Encoding. CSV is plain text, so encoding matters. UTF-8 keeps €, £, accented names, and emoji intact. If characters look garbled in Excel, re-import the CSV and choose UTF-8, or open it through Data → From Text/CSV and set the encoding.

Opening a UTF-8 CSV by double-clicking can mangle non-English characters in some Excel versions. Import it via Data → From Text/CSV and pick UTF-8 to be safe.

When should you pick a pattern-detecting scraper instead?

Pick a pattern-detecting scraper when the data is not a clean static <table>. Choose it for tables built with <div> grids, tables that load on scroll, tables split across pages, JavaScript-rendered tables, or pages behind a login. For a single small static table, IMPORTHTML or a quick copy-paste is fine.

Quick decision guide:

  • One small, static, public <table>: copy-paste or IMPORTHTML is fastest.
  • A static table you will re-check often: IMPORTHTML auto-refreshes, so it wins.
  • A long, scrolling, paginated, or <div>-grid table: use a pattern-detecting extension.
  • Sensitive or logged-in data: use an on-device extension so nothing leaves your machine.

That last point matters legally and practically. Built-in importers may route the URL through a vendor, and online converters require you to paste your data into a third-party site. A tool that runs locally with only activeTab, scripting, and storage permissions — no host permissions, no account, no server — keeps the whole job on your device. For the legal side of reading public data, the U.S. hiQ v. LinkedIn case and laws like GDPR and CCPA are the right primary references; see our plain-English take on whether web scraping is legal, and read how Calquer keeps everything on-device.

FAQ

Can I scrape an HTML table to CSV for free in Chrome?

Yes. A free table-to-CSV extension turns any HTML table into a CSV inside Chrome. Open the page, let the tool auto-detect the rows, confirm the columns, and download. Free, public spreadsheet methods like Google Sheets IMPORTHTML and Excel's From Web also work for static tables.

Why does my exported table have misaligned columns?

Misaligned columns usually mean merged cells (rowspan/colspan) or that the tool locked onto the wrong repeating element. Use a tool that reads the rendered table so merged values land in the right place, or click one correct row to re-teach the pattern. Then fill any blank cells down in your spreadsheet.

How do I export a table that loads more rows as I scroll?

Use a tool that scrolls and waits for new rows until the table stops growing, then exports them all at once. Built-in importers only see the initial HTML, so they miss scroll-loaded rows. See scrape infinite scroll and pagination to CSV for the full method.

Will the CSV open correctly in Excel and Google Sheets?

Yes. CSV opens directly in both. To protect accented names and currency symbols, export as UTF-8 and, in Excel, import via Data → From Text/CSV and choose UTF-8 rather than double-clicking the file. Google Sheets reads UTF-8 CSVs correctly by default.

What if the page is built from div grids, not real tables?

Spreadsheet importers cannot read <div> grids as tables, but a pattern-detecting scraper can. It finds the repeating visual pattern, treats each block as a row, and lines up the matching fields as columns. Because there are no real headers, you name the columns yourself before exporting.


Ready to try it? Add Calquer to Chrome and turn the next HTML table you are looking at into a clean CSV — free, no code, 100% in your browser.

Keep reading

← All articles