One row per government recall notice. Open any row to see the regulator's record beside the listing we fetched, and the identifier we matched inside that page's own text.
Every proportion above carries a 95% confidence interval, and every figure that depends on a broken collector is withheld rather than published. The three collectors below are the only part of this that touches a marketplace.
A measurement with no addressee is a curiosity. This one has both, and the ask is small on purpose: it is not that anyone fix product recalls, it is that a field already being written gets written into the field that exists for it.
Products[].Model, or add a
ProductGTIN field beside the existing
ProductUPCs.Description, one key away.Right now anyone checking a recall programmatically has to
parse that prose to find out which unit was recalled: a marketplace running
its own listings against the feed, a journalist asking whether a product is
still on sale, a customs authority, a comparison site, and the regulator
itself. We wrote that parser. It is in data/pull_seeds.py and it
recovered an identifier for 82 of 103 US notices the structured field did
not carry. Nobody should have to write it.
What this page does not claim. Nothing in the sweep says any product is on sale, and nothing in it names a seller. The one number this project would stake itself on is a count of an empty field in a public feed, and it needs no scraper, no credit and no permission to reproduce:
curl -s "https://www.saferproducts.gov/RestWebServices/Recall?format=json&RecallDateStart=2026-07-20&RecallDateEnd=2026-08-13" | python3 -c "import json,sys; d=json.load(sys.stdin); print(sum(1 for r in d for p in r['Products'] if not (p.get('Model') or '').strip()), 'of', sum(len(r['Products']) for r in d))"