Ivan Savchenko
← All demos
Sift

A scraper that notices when a site is redesigned — and checks its own repair against old records

Describe the data you want in plain English, get clean typed JSON from public websites you are allowed to crawl, with the source of every value.

15% → 95.2%
records found after a redesign (37 sites): old rules vs self-healing, direct-extraction fallbacks included
99.2%
field accuracy on 47 synthetic sites (7,594 of 7,655 values)
20 ms vs 26 s
per page, median: code time of learned rules (after one learning call per site, ~18 s median) vs a direct call to a free reasoning model
31 of 37
redesigned sites healed and verified with a free model; the other 6 fell back
Interactive demo

Redesign a shop. Can you break the self-healing?

A fictional kitchen shop with a hidden decoy and a planted prompt injection. A stand-in model writes the extraction rules once. Redesign the page, watch the old rules fail and the repair get verified, then break it with your own HTML.

A small browser version with a deterministic fake model — no API key, nothing leaves your device. The real project is in the repo.

What it solves

Hand-written scrapers break when a site renames a class, and quietly return empty fields until someone notices. Asking an LLM about every page avoids that, but a 10,000-page catalog becomes 10,000 model calls and a bill that grows with every crawl.

How it works

  1. A model proposes a typed schema from your sentence, then reads a few sample pages once and writes CSS/XPath rules; code validates them on 2 or 3 pages before trusting them.
  2. Code runs the rules on every page, drops hidden decoys and text aimed at AI, normalizes money, dates and units, and records the page, rule and raw text behind each value.
  3. When a page stops matching, Sift re-learns the rules and accepts them only if they largely reproduce the records it already had (90% of values agree, no field off on more than 20% of records). If not, it says so and falls back to direct extraction.

The honest verdict

On a synthetic web of 47 fictional sites (learned rules on 37, direct extraction on 10), field accuracy was 99.2% with 55 model calls for 183 pages. After a redesign, the old rules found only 15% of the records on the 37 sites with learned rules. With a free model (Nemotron 3 Super), Sift noticed the change on 37 of 37 and verified its own repair on 31; counting the 6 that fell back to direct extraction, 95.2% of the records came back at 99.8% field accuracy. Of those 6, one register lost 15% of its rows and one infinite-scroll page produced nothing. Healing depends on the model: on a 44-site subset the free model verified 28 of 34 repairs and Claude Haiku 5.5 verified 31 of 34. Verification is evidence, not a guarantee: it once passed a repair that read the lower salary into the upper one on every posting (now every field must agree), and a repair can pass and still lose detail, as one shop healed by Haiku lost its half-star ratings. The benchmark is cleaner than the real web and was written and labelled by an AI agent in the same session as the code; its first run scored 90.7% and verified 27 of 36 repairs, and the numbers above come after fixing what that run exposed. The PII guard removes emails and phone numbers, not names. Read the numbers as evidence that the mechanisms work, not as a forecast for your site.

PythonFastAPIPlaywrightPostgreSQL
Next demoNotewell →