Table to JSON + Diff avatar

Table to JSON + Diff

Pricing

Pay per usage

Go to Apify Store
Table to JSON + Diff

Table to JSON + Diff

Extract HTML tables from pages you own or may read into clean JSON records, and report added / removed / changed rows since the last run.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Sumizumi Works

Sumizumi Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Features

Limited permissions

Share

Turn HTML tables on pages you own or are allowed to read into clean JSON records, and get what changed since last time (added / removed / changed rows) instead of re-reading the whole table.

Typical uses: your own price list or inventory page, a partner's public rate table you are permitted to monitor, a public timetable, a league table, a government open-data page, a status board. Feed the output to a spreadsheet, a Slack / Discord notification, or an LLM.

What you get

One dataset item per table:

{
"url": "https://example.com/prices",
"table_index": 0,
"caption": "Price list",
"headers": ["Item", "Price", "Stock"],
"row_count": 42,
"rows": [{"Item": "A-100", "Price": "1,200", "Stock": "in stock"}, ...],
"diff": {
"first_run": false,
"previous_run_at": "2026-11-03T09:00:00+00:00",
"counts": {"added": 1, "removed": 0, "changed": 3, "previous_rows": 41, "current_rows": 42},
"added": [...], "removed": [...],
"changed": [{"key": "A-100", "fields": {"Price": {"before": "1,100", "after": "1,200"}}, "after": {...}}]
},
"run_at": "2026-11-04T09:00:00+00:00"
}
  • Header row becomes the keys (duplicate headers get _2, _3; empty headers become col_n).
  • colspan is flattened; thead / tbody / th-less tables are handled.
  • Give a Key column (e.g. ID) to get field-level changes. Without it, rows are matched by full content (added / removed only).
  • Snapshots live in a named key-value store in your account (snapshotStore), so you can run this on a schedule and only act on diff.counts.

Input

FieldMeaning
urlsPages to read (required)
tableSelectorCSS selector, default table
headerRowFirst row is the header (default on)
keyColumnColumn that identifies a row, enables changed detection
diffModeCompare with previous run (default on)
includeRowsInDiffOff = counts only
snapshotStoreName of the key-value store that keeps snapshots
maxTablesPerPageSafety cap (default 20)

Pricing (pay per event)

You are charged only when a table is actually delivered: one table-extracted event per table, plus one diff-computed event per table that had a previous snapshot. Failed requests and pages with no matching table are free.

Fair use

Plain HTTP fetch, one request per URL, no login, no anti-bot evasion, no JavaScript rendering. Use it on pages you own or have permission to read, and respect the site's terms and robots rules. For JavaScript-rendered tables, pre-render the page with a browser Actor and feed this Actor the HTML URL.

Scheduling

Create a Task with your input, add a Schedule (e.g. every morning), and connect a webhook or an integration (Slack, Google Sheets, Make, Zapier) that fires when diff.counts.added + changed + removed > 0.