Clean Clipper Add to Chrome (free)

Who it is for

Tables that survive the trip into Markdown

Generic HTML-to-Markdown converters break on the tables that matter: the ones with a list, a link or a code sample inside a cell. Clean Clipper serialises the table itself and flattens the cell content instead of dropping the row.

Where the numbers go missing

The table is the reason you saved the page: pricing tiers, rate limits, retention periods, a schema. You paste the clip into your notes and find one row spread over a page, pipes in the wrong places, and a column that has silently merged with its neighbour. The numbers are still on screen behind you in the browser, so the failure is easy to miss, until the tab is gone.

The opposite failure costs the same afternoon. Plenty of sites still use a table purely for positioning, and a converter that treats every one of them as data hands you twenty rows of navigation dressed up as a dataset. One outcome is spent retyping numbers, the other deleting a grid, and neither is the analysis you sat down to do.

Retyping has a third cost that shows up much later. A number typed into a sheet by hand carries no source, no date and no way to check it – six weeks on, nobody can say whether the retention period in cell D14 was read off the page in January or in March, and the page has been edited twice since. Pricing, rate limits and quotas change without an announcement. A captured table with the source URL and the page’s declared date above it answers that question, and answers it again next quarter when you capture the same page and diff the two.

What comes across intact

A table with code in every cell, intactsqlite.org/datatype3.html
| Storage class | Meaning                                                |
| ------------- | ------------------------------------------------------ |
| `NULL`        | The value is a NULL value.                              |
| `INTEGER`     | A signed integer, stored in 1, 2, 3, 4, 6 or 8 bytes.   |
| `REAL`        | A floating point value, stored as an 8-byte IEEE number.|
| `TEXT`        | A text string, stored using UTF-8, UTF-16BE or UTF-16LE.|
| `BLOB`        | A blob of data, stored exactly as it was input.         |

Setting it up for tables

Two settings and one habit. The habit, scrolling before you clip, recovers more rows than any setting can.

  1. Open Options from the extension icon and point the destination at the folder where the working data lives – data/sources beside the notebook or the sheet that consumes it.
  2. Leave the icon click as the preview window. A table is the one thing worth looking at before it is filed – whether the columns line up is visible in one glance and invisible in a folder listing.
  3. Set the filename template to {date}-{domain}-{title}, so the same pricing page captured in January and in April is two files that sort next to each other.
  4. Turn on source and date in the frontmatter. A table without the address it came from is a set of numbers somebody will eventually have to re-derive.
  5. Before clipping, scroll to the bottom of the table. Rows that load as you scroll do not exist in the DOM until they have loaded, and the extension reads the DOM at the moment you clip.
  6. When the surrounding article is irrelevant, select the table on the page and clip the selection. The switch at the top of the window confirms you are looking at the selection rather than the whole page.
  7. Put a recurring capture in the calendar for the pages whose numbers move: quotas, prices, retention periods. The value of the corpus is in the second capture, not the first.

Settings for numbers you will reuse

The point of every value below is that a table read six months from now should still say where it came from and when.

SettingValueWhy this value here
Icon clickPreview windowA misaligned column is obvious on sight and invisible in a file listing
DestinationFolder `data/sources`Keeps the captures next to the notebook or sheet that consumes them
Filename template`{date}-{domain}-{title}`Quarterly captures of one page sort together and never collide
Frontmatter`source` and `date` onThe two lines that turn a set of numbers back into a citable fact
ImagesSkipCharts arrive as image links either way; the extension does not read numbers out of a picture
SelectionSelect the table, clip the selectionA twelve-screen article around a four-row table is noise in a data folder
Repeat captureClip the same page each quarterThe numeric suffix keeps both, and the diff is the analysis
A ragged two-column table becomes key and value linesa specification page with a definition grid
**Content-Type**
: The media type of the resource. Required on every request with a body.

**Cache-Control**
: Directives for caching mechanisms in both requests and responses.

**Retry-After**
: Either a delay in seconds or an HTTP-date after which to retry.

The source grid had merged header cells and a nested list in the last row.
Reproduced as a Markdown table it would have broken; as pairs it does not.

Three tables, three outcomes

A pricing table into a comparison sheet

Four vendors, four pricing pages, four captures. Each table comes across as a GFM table with the plan names, the amounts and the limits in the cells they were in, and the source URL above it, so the comparison sheet is assembled without a single number being retyped.

This is where the serialiser earns its place – the cells that break generic converters are the ones with a footnote marker, a list of included features or a code sample inside. On the fifteen-table technical corpus twelve tables survived here against seven for each engine compared.

The same page, a quarter apart

You captured a provider’s rate limits in February and again in May. The second file took a numeric suffix. A diff shows the burst allowance halved on the starter plan and the retention window on the top plan extended – neither of which was announced anywhere.

Without the February file the change is unprovable, because the page shows only its current state and the previous numbers exist nowhere the vendor publishes. The whole method depends on the first capture having been cheap enough to take before you knew it mattered.

A grid that could not be a table

A specification page defines twenty headers in a two-column grid with merged header cells and a nested list in one row. Reproduced as a Markdown table it would have collapsed; instead it comes across as bold key lines with their values underneath, which is lossless for reading and for searching.

That behaviour is deliberate rather than a fallback failure. Ragged two-column tables are far more often definition lists wearing a grid than they are data, and a broken pipe table is harder to repair than a list is to read.

Against the usual ways to move a table

Every one of these gets numbers off a page. They differ in what arrives with the numbers and in what you have to do afterwards.

How it is done nowWhat you getWhat it costs
Retype into a sheetExactly the cells you needTranscription errors, and no record of the source or the date
Copy and paste into a spreadsheetOften the grid, sometimesFails on cells with lists or code; layout grids come across as data
Screenshot the tableThe table as displayedNothing computable, nothing searchable, no source line
The site’s own CSV exportClean data, when it existsMost pages offer none, and the export sometimes differs from what is displayed
A generic HTML-to-Markdown converterMarkdown, quicklyA cell with a list or a code block is where generic converters break
Clean ClipperA GFM table with the source and date above itNo merged cells, no CSV export, and no numbers read out of a chart image

When a table does not come out right

The merged cells are gone

Markdown has no merged cells, so colspan and rowspan are flattened – the content is preserved and the visual merge is not, because the format cannot express it. Where a merged header spanned three columns, the text lands in the first of them. This is a property of the target format rather than of the conversion, and no Markdown table anywhere expresses it.

Half the rows are missing

The extension reads the DOM at the instant you clip, so rows that a page loads as you scroll (or serves through a “show more” button, or paginates) do not exist yet unless you have caused them to. Scroll to the bottom, expand what expands, then clip. For a paginated table, clip each page – the parts can be joined afterwards, and nothing else can recover rows the browser never received.

I got a grid of navigation instead of data

That is a layout table: a grid used purely for positioning, which many older sites still use for menus and headers. Those are unwrapped rather than converted, so the content comes through without the grid. If a navigation grid did reach the note as a table, it is because the page marked it up as a data table – the markup said “data” and the extension believed it.

The table came out as key and value lines

That is the ragged two-column path. A two-column table with uneven rows is usually a definition list drawn as a grid, and reproducing it as a pipe table produces a broken grid rather than a readable one. The content is complete: bold key, value beneath it, in the original order. If you need it as a real table, the pairs convert back mechanically.

Where the format gives out

Markdown has no merged cells, so colspan and rowspan are flattened – the content is preserved, the visual merge is not, because the format cannot express it. A table nested inside a cell is hard for every tool and this one is no exception. It does not read numbers out of a chart image, and it exports no CSV or XLSX. The output is Markdown. And it converts one page at a time – the page you are on.

Add to Chrome (free)Free in full. No account, no sign-up, no limits.

Questions

What happens to a table used purely for layout?
It is unwrapped. Reproducing a positioning grid as a Markdown table produces noise, so the content is kept and the grid is not.
Are merged cells supported?
Markdown has no merged cells, so they are flattened. The content is preserved; the visual merge is not, because the format cannot express it.
Can I clip only the table?
Yes: select it on the page and clip the selection. The switch at the top of the window shows whether you are looking at the selection or the whole page.
Can I get CSV out of it?
No. The output is Markdown. A GFM table pastes into most spreadsheet and notebook tools, but there is no CSV or XLSX export.
What about tables that load more rows as you scroll?
The extension reads the DOM at the moment you clip, so only the rows the page has actually rendered are captured. Scroll to load the rest first.
Does it read numbers out of a chart?
No. A chart is an image or a canvas, and the extension does no image processing of any kind. Where a page publishes the underlying figures as a table below the chart – many statistical agencies do – that table clips normally.
Does the file record when the numbers were valid?
It records what the page declared: the publication date goes into the frontmatter, and the day you captured it can go into the filename through {date}. Where a page declares no date, the field is left empty rather than filled in, which is at least an honest gap rather than a wrong number.
Can it clip a table inside an embedded dashboard?
No. Content displayed inside an embedded viewer or a dashboard widget belongs to a separate document sitting in the page, and clipping the page around it does not reach inside. Where the tool offers its own export or a full-page view, use that.
Is the column formatting preserved?
Column order, header row and cell content are. Colour, shading, cell width and font weight are not, because a Markdown table has no way to carry them. A cell that was bold in the source keeps its bold; a cell that was merely coloured does not keep the colour.
What if a table is nested inside another table?
That is the hard case for every tool and this one is no exception – the inner table’s content is flattened into the cell that held it. It is preserved, but as text rather than as a grid, and a badly nested layout is worth checking by eye before you rely on it.