Free tool + Chrome extension · Now on the Web Store

Table Grabber

Copy any table on any web page into CSV, Excel, Markdown, JSON, SQL and six more formats. Merged cells stay aligned, numbers stay numbers, and every row comes with you.

v1.0.0 · MIT licensed · Chrome, Edge, Brave, Opera and other Chromium browsers 116+

No account. No row limit. No server. No AI. Nothing you grab ever leaves your browser.

13Export formats
Row limit
0Sites it can access
0Bytes uploaded
0Cost, ever

Convert a table now

Select a table on any page, copy it, and paste it below. Browsers put the real HTML on the clipboard, so the structure survives — merged cells and all. This runs the same engine as the extension, entirely in your browser.

Paste anything with a table in it

Copy a table from any web page and paste it here — browsers put the real HTML on the clipboard, so merged cells survive. CSV, TSV, JSON, JSON Lines and Markdown tables work too, and the format is detected for you.

Try:

Why tables are harder than they look

Copying a table sounds trivial until you meet a real one. These are the six cases that break ordinary extractors, and what Table Grabber does about each.

Merged cells

One cell spanning two rows occupies several positions in the grid. Read the cells in order and every column after the merge shifts left — so the numbers end up under the wrong headings, and nothing warns you.

What it does: Every cell is laid onto a coordinate grid before anything is read, so a merged cell still covers the positions it visually covers. You choose how those positions are filled: repeat the value, leave them blank, or mark them.

Multi-row headers

A grouped header — one 'Region' cell sitting above 'Country' and 'City' — is two header rows. Take only the first and you lose the columns; take only the second and you lose the group.

What it does: Header rows are detected, then stacked into one name per column, so you get 'Region – Country' rather than half the information.

Tables that are not tables

Plenty of web apps draw grids out of plain boxes with CSS. There is no table markup at all, so a tool looking for <table> finds nothing on a page that visibly contains a table.

What it does: Repeating structure is the signal: a container whose children look alike and each hold the same number of cells. That finds hand-rolled grids and the big JavaScript grid libraries alike, without hardcoding any library's class names.

Rows that are not loaded

Large grids keep only the visible rows in the page and swap them as you scroll. Read the page once and you get twenty rows out of fifty thousand — and the twenty look perfectly complete.

What it does: The grid is scrolled in steps and the rows are accumulated. Where the grid publishes its own row numbers, those are used to place each row exactly; otherwise rows are matched by content. You are told which of the two happened.

The rest is on page 2

Pagination hides most of the data behind a Next button, and copying ten pages by hand is how an afternoon disappears.

What it does: The next control is found, clicked, and the new rows are collected once the table has actually changed — not after a hopeful fixed delay. Every page is merged into one export. It stops on the last page, and you can stop it sooner.

Tables inside other things

A table inside a shadow root or an iframe is invisible to an ordinary search of the page, so tools report there is nothing there.

What it does: Open shadow roots and same-origin iframes are searched too. Cross-origin frames are skipped, because the browser correctly forbids reading them and no extension should try.

13 formats, none of them paid

Marked formats are ones the most-installed table extension charges a subscription for. They are all pure computation in your browser, which is why they are free here.

CSV.csvpaid elsewhere

Comma-separated, RFC 4180 quoting, UTF-8 BOM so Excel opens accents correctly.

TSV.tsv

Tab-separated. Pastes into Sheets and Excel as real cells, not one.

Excel.xlsxpaid elsewhere

A real workbook with numeric cells, a frozen header and sized columns.

JSON.json

Array of objects keyed by header, with real numbers and booleans.

JSON rows.json

Array of arrays, header row first. Closer to the original grid.

JSON Lines.jsonl

One record per line — what log pipelines and bulk loaders expect.

XML.xml

One element per row, with header names sanitised into legal tag names.

Markdown.mdpaid elsewhere

GitHub-flavoured, padded to align, numeric columns right-aligned.

HTML.html

A clean table with none of the original page's styling.

SQL.sql

CREATE TABLE with inferred types, plus batched INSERTs. Postgres, MySQL or SQLite.

YAML.yaml

One document, a list of records, correctly quoted.

LaTeX.tex

A tabular environment with the special characters escaped.

Plain text.txt

Fixed-width columns, aligned. For terminals and code comments.

What else it does

Getting the rows out is the easy half. Most of the work went into the data being usable when it arrives.

Any input, not just web pages

Paste CSV, TSV, JSON, JSON Lines or a Markdown table and it reads those too, guessing the format and sniffing the delimiter. So it converts in every direction — CSV to Markdown, JSON to a spreadsheet, a web table to SQL.

Reshape before you export

Reorder and rename columns, transpose the whole thing, fill blank cells from the value above, find and replace across every cell, trim whitespace, and rewrite headers to snake_case or camelCase to match wherever the data is going.

Know what you grabbed

Every column reports its detected type, how many cells are filled, how many values are distinct, and for numbers the min, max, sum and mean. It is how you notice a capture came up short or an ID column has duplicates.

Numbers that stay numbers

$1,234.00 pasted into a spreadsheet is text, and your SUM() returns zero. Column types are detected and values can be rewritten so the destination reads them as numbers — including European 1.234,56 and accounting negatives like (1,234).

Excel you can use immediately

The .xlsx export writes real numeric cells, a frozen header row and sized columns, so formulas and charts work the moment the file opens. No import wizard, no text-to-columns.

Fix it before you export

Rename, hide and reorder columns. Filter rows. Sort numerically rather than alphabetically, so 9 comes before 100. Drop duplicate rows and empty columns. The preview updates as you go and the original is never altered.

Paste that lands in cells

Copying as TSV also puts an HTML table on the clipboard, so Google Sheets and Excel receive real cells instead of one long string in A1.

No formula injection

A scraped cell reading =cmd|'/c calc'!A1 is a live formula the moment your CSV opens in Excel. Values starting with = + - @ are neutralised on export, which matters when the source is a page you do not control.

Point at the one you want

If a page has fifteen tables, pick the one you mean by clicking it. The highlight is drawn inside a shadow root, so it looks the same on every site no matter how aggressive the page's own CSS is.

Compared with the paid extensions

Checked in August 2026 against the published listings and pricing pages of the most-installed table extensions. These tools are good; the point is narrower — the features behind their paywalls are pure browser-side computation, with no server and so no running cost.

Feature comparison between typical paid table extensions and Table Grabber
CapabilityTypical paid extensionTable Grabber
Rows per exportCommonly capped at 250 on the free tierUnlimited
Copy as MarkdownTypically a paid featureFree
Download CSV / Excel directlyTypically a paid featureFree
Multi-page and infinite-scroll captureTypically a paid featureFree
Real .xlsx with numeric cellsOften an HTML file renamed .xlsA real workbook
Merged cell handlingVaries; several misalign columns silentlyGrid-accurate, with a choice of fill policy
Tables built from divsSometimes supportedFound by repeating structure
Shadow DOM and iframesRarely supportedSearched
SQL, YAML and LaTeX outputRareIncluded
Site access required to installOften all sites, always onNone at all
Account requiredSometimesNever
Price$12–$120 a yearFree, and open source

Who it’s for

Analysts

Pull a reference table off a stats site into Excel with the numbers already numeric, instead of retyping it or fighting text-to-columns.

Writers and documenters

Copy a table straight into a README or a blog post as Markdown, aligned and correctly escaped, in one click.

Developers

Turn a table of reference data into a SQL seed script, a JSON fixture or a typed array without writing a parser for a one-off job.

Researchers and students

Get a LaTeX tabular out of a web table without rebuilding it by hand, footnote markers already stripped.

Get the extension

The web version above handles anything you can copy. The extension does the three things a web page is not allowed to: read a table in place, scroll a grid that only loads rows as you go, and walk every page of a paginated table.

  1. Open the listing

    The Add to Chrome button goes straight to it. Click Add to Chrome there and confirm. Every Chromium browser installs from the same listing — Edge, Brave, Opera, Arc and Vivaldi included, though Edge shows a one-time banner asking you to allow extensions from other stores.

  2. Pin it

    Click the puzzle-piece icon in the toolbar and pin Table Grabber so it is one click away.

  3. Grab a table

    Open any page with a table and click the icon, or press Alt+Shift+T.

Rather install it from the ZIP?

Byte for byte the same build as the listing, installed the way Chrome tests every extension before it is published. You give up automatic updates and gain the ability to read every line before you run it.

  1. Download and unzip

    Unzip it somewhere you will keep — Chrome loads the extension from this folder every time it starts, so a temporary folder will break it later.

  2. Open the extensions page

    Paste this into the address bar and press Enter.

    chrome://extensions
  3. Turn on Developer mode

    The switch is in the top-right corner of that page.

  4. Load unpacked

    Click Load unpacked and choose the table-grabber folder inside the archive — the one containing manifest.json.

  5. Pin it and go

    Pin it from the puzzle-piece menu, then open any page with a table and press Alt+Shift+T.

Check what you downloaded

Installing unpacked means trusting a file from the internet, so here is its fingerprint. Run one of these on the ZIP and compare — if the hash matches, the file arrived exactly as it was built.

603aff1444710683d905f1e1788112999e35195f47a411baf8af8181f8d34aa8
Windows (PowerShell) Get-FileHash table-grabber-1.0.0.zip
macOS shasum -a 256 table-grabber-1.0.0.zip
Linux sha256sum table-grabber-1.0.0.zip

Two things worth knowing. While any unpacked extension is installed, Chrome shows a “Developer mode extensions” notice on startup — that describes how the extension was loaded, not a problem with it. And unpacked extensions do not update themselves, so check back here for new versions, or install from the store and let Chrome handle it; the ZIP also contains an INSTALL.txt with these steps.

Privacy

The short version: nothing is collected, because there is nothing in it capable of collecting anything.

  • No network code at all.The extension makes no fetch, XMLHttpRequest, WebSocket or sendBeacon calls. There is no server behind it and no endpoint to send anything to — and this is enforced, not promised: the build fails if any of those appear anywhere in the source.
  • It installs with access to no sites. There is no host permission in its manifest, so adding it approves nothing and nothing runs in the background. Clicking the icon gives it that one tab, for as long as you stay on that page.
  • Nothing is stored on disk. A grabbed table is held in memory and cleared when the browser closes; the copy handed to the editor is deleted the moment it is read.
  • No analytics, no account, no identifiers. There is no way to tell one user from another, even in principle.
  • The web version is the same. Pasting a table into this page parses it in your own tab. There is no API route behind it and no server ever receives it.
  • Exports are yours. Files are generated in the browser and handed straight to the download manager. A table grabbed from a logged-in page can contain personal data, so treat the file as you would any other download.

Why this exists

This exists because of a one-star review. Someone had used a popular table extension for years, recommended it to everyone they knew, and then found the free tier limited to 250 rows. Another reviewer put the objection more precisely: needing a subscription to copy as Markdown is odd, because converting a table to Markdown requires no backend, and therefore has no continuous operating cost to recover.

That is exactly right, and it generalises. Reading a table out of a page, expanding its merged cells, working out which columns are numbers and writing the result as CSV, Markdown or a spreadsheet is arithmetic. It happens on your own machine, in your own browser, on data your browser already downloaded. Nobody is paying for servers to make it happen, because there are none.

So the whole thing is free and it will stay free, which is a promise that costs nothing to keep. There is no account to create, no row limit to hit, no format held back, and no upgrade screen. It is MIT licensed and the source is public, so you do not have to take any of that on faith.

The privacy position follows from the same logic. A tool that does its work locally has no reason to make a single network request, so this one contains no network code at all — and that is checked automatically, with the build failing if a fetch ever appears in the source. It installs with access to no websites, and reads a page only in the moment you ask it to.

Frequently asked questions

Is it really free, or is there a paid tier later?

Really free, permanently, and open source under the MIT licence. The reasoning is not generosity: everything it does happens in your browser, so it costs nothing to run and there is nothing to recover. A row limit would exist only to sell you the absence of a row limit.

Is there a row limit?

No. The editor draws the first few hundred rows for speed, and says so, but exports always contain every row.

Does my data get uploaded anywhere?

No, and it cannot be. The extension contains no network code — no fetch, no XMLHttpRequest, no WebSocket, no analytics. This is enforced by a check in the build that fails if any of those appear in the source, so it is verifiable rather than merely promised.

What permissions does it need?

It installs with access to no websites at all — there is no host permission in its manifest, so nothing runs anywhere until you invoke it. When you click the icon it reads that one tab. It also asks for storage (to pass a table to the editor tab, in memory), downloads (to save your file) and contextMenus (for the right-click item).

Why did my export come out with the columns shifted?

That is the merged-cell problem, and it is the main thing Table Grabber is built to get right. If you are seeing it here rather than in another tool, the table has a structure worth reporting — please send the URL.

The table on my page has thousands of rows but only twenty came through.

That grid keeps only the visible rows loaded. Open the editor and use 'Scroll for all rows', which scrolls the grid and collects the rest. If the data is paginated instead, use 'Walk every page'.

Why does Excel show my numbers as text?

Because the page wrote them as $1,234.00, which is a string. Tick 'Values as numbers' in the editor, or export as .xlsx, which writes genuine numeric cells so formulas work immediately.

Is it on the Chrome Web Store?

Yes. It passed review and the listing is live, so the normal way to install it is the Add to Chrome button at the top of this page — one click, and Chrome keeps it updated from then on.

Should I install from the Web Store or from the ZIP?

The Web Store, unless you have a reason not to: it is one click and it updates itself. The ZIP is the same build, kept here for anyone who would rather read every line before running it, or who cannot install from the store — you load it unpacked, and a published SHA-256 on this page lets you check the file arrived intact. Unpacked extensions do not update themselves.

Can I use it without installing anything?

Yes. The web version on this page runs the same extraction and export engine — copy a table from any page and paste it in, or paste the HTML. The extension exists for the things a web page cannot do: reading a table in place, scrolling a virtualised grid, and walking pagination.

Does it work on Firefox or Safari?

Not yet. It is built for Chromium browsers — Chrome, Edge, Brave, Opera, Arc and Vivaldi, version 116 or newer. A Firefox port is plausible since the code is nearly all standard web APIs.

Is it safe to run on a page I am logged into?

It reads what is on screen, which is the point, so an exported table can contain personal or account data — treat the file accordingly. Nothing is transmitted, and access ends when you leave the page.

Support

Something not working? Start here — these six cover nearly everything. If none of them fit, the report link at the bottom goes straight to me.

The popup says no tables were found, but I can see one

Why: The page draws its table out of plain boxes in a way the structure detector did not recognise, or the table lives in a cross-origin iframe, which no extension is permitted to read.

Fix: Use “Pick one” and click the table directly — that reads whatever you point at. If it is inside an embedded frame from another domain, open that frame in its own tab first.

Only a handful of rows came through

Why: The grid keeps just the visible rows loaded and swaps them as you scroll, so a single read genuinely only sees those.

Fix: Open the editor and press “Scroll for all rows”. If the data is paginated instead, use “Walk every page”. Leave the tab visible while it runs.

Columns are shifted or misaligned

Why: Almost always merged cells. This is the case Table Grabber is specifically built to get right, so seeing it here is a bug worth reporting.

Fix: Please send the page address — a table that defeats the grid builder is the single most useful thing you can report.

Excel shows my numbers as text

Why: The page wrote them as $1,234.00, which is a string, not a number.

Fix: Tick “Values as numbers” in the editor, or export as Excel (.xlsx) — that writes genuine numeric cells, so formulas work the moment the file opens.

Nothing happens when I click the icon

Why: Chrome does not allow extensions to run on its own pages — chrome://, the Web Store, and the new-tab page are all off limits.

Fix: Open an ordinary website and try again. If it fails on a normal page, please report it with the address.

The extension is not in my toolbar

Why: Chrome hides new extensions behind the puzzle-piece menu by default.

Fix: Click the puzzle piece to the right of the address bar and pin Table Grabber. The keyboard shortcut Alt+Shift+T works whether it is pinned or not.

Report a bug or ask a question

A table that comes out wrong is genuinely useful to me — the awkward ones are how this got good. Please include:

  • The address of the page with the table, if it is public
  • What you expected, and what you got instead
  • Which browser and version (chrome://version)
  • The extension version, from chrome://extensions

There is no support inbox to be lost in and no ticket queue — it is one person, so please be patient, and include the page address if you can.

Privacy policy: how your data is handled · Source code · Changelog

What people look for

Everything below is something Table Grabber answers directly.

More free tools

Query Studio

Free SQL translator, formatter & validator

Git Rescue

Git cheat sheet & fix-it playbook

Storage Inspector

Chrome Web Store extension — see every byte a site stores

Browse all tools →