Method and limits
What this feed will not tell you
Three claims are available about a recalled product and a marketplace listing, and only two of them are honest. This page states which one the feed makes, the measured cost of making only that one, and the failure modes that are still open.
The claim we make
Recalls are usually batch-specific. A notice covers serials 4400 to 6200, or units manufactured between two dates. A resale listing almost never shows a lot code, and frequently does not show the model.
So a title match cannot establish that a listing is a recalled unit. It can establish that a listing is for the same product line as a recall. That is a materially weaker claim, and it is the only one the feed makes.
Matched on product line, not on unit. Recalls are often limited to specific batches or serial ranges, and marketplace listings rarely show them, so a match here means this listing appears to be the same product as a recall, not that this particular item is affected.
What follows from that
- Seller identity is never published. It is hashed at the adapter, before the matcher sees it, and the published record type has no field for it. Naming a seller as trading recalled goods on a fuzzy title match is the specific lie this project exists to avoid.
- A match below
0.7confidence is quarantined, shown with its reason, and never asserted. The threshold is set high on purpose: a false positive here is an accusation and a false negative is only a miss. - A listing that states an attribute the recall rules out is demoted below the threshold even when the brand and product agree. A 4-litre fridge is not covered by a recall of the 10 and 15 litre models, however well the words line up.
Measured on a real marketplace
6 real recalls from US CPSC recall API (real) against 193 real listings from eBay search results via Bright Data Scraper Studio (real), captured 2026-08-17. One run, reported whole.
The rate is low and it is meant to be. 168 of 185 matches were held back, and the reasons below are checkable rather than a score. Most of them are a stated capacity that the recall does not cover, which is exactly the case a keyword search gets wrong and reports as a hit.
Why each match was held back
| Reason, as the matcher stated it | Listings |
|---|---|
| recall covers 10L, 15L; this listing states 4L | 97 |
| listing is for an accessory ("cord"), not the recalled product | 15 |
| listing is for an accessory ("adapter"), not the recalled product | 14 |
| recall covers 10L, 15L; this listing states 20L | 13 |
| recall covers 10L, 15L; this listing states 12L | 10 |
| confidence 0.30 on product-only is below the 0.7 threshold | 9 |
| listing is for an accessory ("cable"), not the recalled product | 5 |
| recall covers 10L, 15L; this listing states 9L | 2 |
| recall covers 10L, 15L; this listing states 4L, 6L | 1 |
| listing is for an accessory ("logo"), not the recalled product | 1 |
| listing is for an accessory ("charger"), not the recalled product | 1 |
What the confidence rests on
| Basis | Matches | What it means |
|---|---|---|
| brand+product | 150 | Brand agrees and several product nouns overlap. Reasonable for a product line. |
| product-only | 35 | Product nouns overlap with no brand agreement. Not publishable on its own. |
Worked examples, both directions
| Verdict | Recall | Listing | Rests on |
|---|---|---|---|
| asserted | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | BRAND NEW MINI FRIDGE- COOLULI | minifridgecoolulifridgefridgecooluli |
| asserted | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | Cooluli Mini Fridge Portable Plug In Cooler & Warmer for Food, Drinks, Skincare | minifridgecoolulifridge |
| asserted | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | Cooluli Mini Fridge 4K Portable Bedroom Car Office Dorm Cools Warms Black New | minifridgecoolulifridge |
| asserted | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | Cooluli Infinity Black 15 Liter fridge | coolulifridge |
| held | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | COOLULI CL4L Classic-4L Compact Thermoelectric Cooler And Warmer Mini Fridge | minifridgecoolulifridge clash: recall covers 10L, 15L; this listing states 4L |
| held | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | Cooluli 12L Beauty Mini Fridge. Brand New. Never Used. In Original Box. | minifridgecoolulifridge clash: recall covers 10L, 15L; this listing states 12L |
| held | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | Cooluli 20 Liter Mini Fridge with Temperature Control - White Thermoelectric ... | minifridgecoolulifridge clash: recall covers 10L, 15L; this listing states 20L |
| held | Cooluli Recalls 10-Liter and 15-Liter Minifridges Due to Fire and Burn Hazards | UL AC Power Cable for most brands of mini fridges such as Cooluli Mini Fridge | minifridgecoolulifridge clash: listing is for an accessory ("cable"), not the recalled product |
How a source is judged
Each source has a contract with a version, a minimum row count, a maximum row-count drop, and a per-field null-rate and type limit calibrated against an observed healthy capture. A run that breaches the contract is diagnosed before anything is repaired.
| Diagnosis | Evidence used | Action |
|---|---|---|
| blocked | A refusal status, or a block signature in a body served at HTTP 200. The dangerous block is the one that does not announce itself with a 4xx. | Back off. Serve the last verified copy, labelled stale. |
| gone | The record is absent from the listing and its own permalink returns 404 or 410. The permalink is the oracle that separates a withdrawal from a read failure. | Never repair. Keep the record, mark it withdrawn. |
| pagination | Row count lands on one page of the known page size while every missing record still returns 200. | Repair, then verify against the contract before serving. |
| drift | Fields breached their limits and the missing records are still published. | Repair, then verify against the contract before serving. |
The gate that matters most
A repair reporting success is not evidence that it worked. Every repair is followed by a fresh run measured against the same contract, and the result is only served if that run passes. This has already caught a repair that finished cleanly and returned nothing, which is on the incident log as the oldest entry.
Still open
- Matching is title-based. It cannot read a lot code off a photo, so batch-level certainty is out of reach by construction, not by effort.
- A record that is withdrawn at source and later reappears sorts above every other recall and carries both dates, but nobody is told. There is no subscription and no alert, so the feed reports a relisting only to a reader who happens to open it.
- Three collectors in the account are permanently stuck: one on a repair prompt that was too aggressive, and two holding a repair lock that outlived the job that took it. A repair can damage a working scraper, and nothing here prevents that beyond refusing to serve the result.
- Bright Data cannot run a repaired collector as a draft from the CLI, so the verification gate sits at serving time rather than at promotion time. The collector can be left in a worse state than it started, even though the feed never shows the bad output.
- Coverage is two recall sources and one marketplace. Nothing here has been measured against a regulator that redesigns its site without warning, because that has not happened during the build.