Skip to content
PriceGuard

One real break · repaired in 10 minutes

Nineteen confident rows, every price 100× too large

The one real break this project hit, and the command that fixed it without changing the collector id.

The same capture, either side of one heal

Flip the switch. Every health signal reads the same; only the price moves.

Health signals · unchanged by the switch

Job statusready
Rows returned19 of 1919 of 19On baseline.
Prices missing00Of 19.

All three correct. All three useless here.

All 19 rows · joined on the product URL

every price 100× too largeevery price matches the page
The 19 rows of the capture, showing the price each product returned before and after the heal
LaptopPrice at 19:00Price at 19:10Verdict
Apple MacBook Air 13.6" (M5, 16GB, 512GB, Sky Blue)₹1,39,39,900₹1,39,399100× too largematches the page
Apple MacBook Air 13.6" (M5, 16GB, 512GB, Midnight)₹1,39,39,900₹1,39,399100× too largematches the page
Lenovo LOQ 15IAX9 (Core i5-12450HX, 16GB, 512GB, RTX 3050 6GB)₹74,99,000₹74,990100× too largematches the page
Apple MacBook Air 13.6" (M5, 16GB, 512GB, Silver)₹1,39,39,900₹1,39,399100× too largematches the page
Lowest price in the capture₹74,99,000₹74,990
Highest price in the capture₹2,36,99,900₹2,36,999
The other 15 rows, all the same shape ⌄
The 19 rows of the capture, showing the price each product returned before and after the heal
LaptopPrice at 19:00Price at 19:10Verdict
ASUS VivoBook S14 OLED S5406SA-QD098WS (Core Ultra 5 226V, 16GB, 512GB)₹81,99,000₹81,990100× too largematches the page
Apple MacBook Air 15.3" (M5, 16GB, 512GB, Midnight)₹1,67,29,900₹1,67,299100× too largematches the page
Apple MacBook Air 15.3" (M5, 16GB, 512GB, Silver)₹1,67,29,900₹1,67,299100× too largematches the page
HP Victus 15-fa2316tx (Core i5-14450HX, 24GB, 512GB, RTX 3050)₹90,99,000₹90,990100× too largematches the page
Apple MacBook Air 13.6" (M5, 16GB, 1TB, Midnight)₹1,72,87,900₹1,72,879100× too largematches the page
HP OMEN HyperX 15-ga0005tx (Core i7-14650HX, 24GB, 1TB, RTX 5060)₹1,73,99,000₹1,73,990100× too largematches the page
HP Victus 15-fb3124ax (Ryzen 7 7445H, 16GB, 512GB, RTX 4050)₹96,99,000₹96,990100× too largematches the page
HP OMEN 16-am0241tx (Core i7-14650HX, 24GB, 1TB, RTX 5050)₹1,49,99,000₹1,49,990100× too largematches the page
HP Victus 15-fa2309tx (Core i7-13620H, 24GB, 1TB, RTX 5050)₹1,24,49,000₹1,24,490100× too largematches the page
HP Victus 15-fa2192tx (Core i5-13420H, 16GB, 512GB, RTX 3050)₹76,49,000₹76,490100× too largematches the page
Lenovo Legion 5 Pro 16IRX10 (Core i7-14650HX, 32GB, 1TB, RTX 5060)₹2,36,99,900₹2,36,999100× too largematches the page
Apple MacBook Pro 14.2" (M5, 16GB, 1TB, Space Black)₹2,23,09,900₹2,23,099100× too largematches the page
HP OmniBook X Flip 14-fm0119tu (Core Ultra 5, 16GB, 512GB, 2K OLED)₹1,13,99,000₹1,13,990100× too largematches the page
Apple MacBook Pro 14.2" (M5, 16GB, 1TB, Silver)₹2,23,09,900₹2,23,099100× too largematches the page
HP Victus 15-fa2508tx (Core 5 210H, 24GB, 512GB, RTX 4050)₹1,13,99,000₹1,13,990100× too largematches the page

Both captures committed unedited under examples, ten minutes apart.

Read from examples/reliance-digital-capture*.json

How the repair ran

  1. 19:00
    Capture · 19 rows, status ready

    offers.price is the string "139399.00"; the field description said digits only, which ate the decimal point.

  2. 19:07
    scraper heal · 597 characters of evidence

    Observed, expected, cause, and one instruction: do not hard-code a divide by 100, some pages carry no decimal part.

  3. 19:07
    The gate · what the CLI proposes

    preview_result {"price":172879,"list_price":185900, …} and diff_summary "proposed template has 1 step(s)".

  4. 19:10
    scraper approve --auto-save

    completed_steps ends user_approval, save_new_template. Without --auto-save nothing persists.

  5. 19:10
    Verify · 19 rows, none above ₹10,00,000

    Low ₹74,990, high ₹2,36,999, and ₹1,39,399 matching the page to the rupee.

Read from the run envelopes, examples/README.md

The approval step is the only place the platform says what it did

"You are the detector. The CLI never decides on its own that a scraper is broken — you inspect the run output and decide."
Check it: npx -p @brightdata/cli@0.3.5 bdata scraper heal --help

Quoted from @brightdata/cli@0.3.5 README.md

The collector id, across every heal on record

0

heals changed the collector id, of 1 recorded

6

nights in the archive

19

page loads the heals billed, measured not inferred

npm run archive -- --events reads it, and needs MONGODB_URI. Exported 2026-08-23T15:49:15.405Z.

Exported from MongoDB fixtures/ledger/events.json

A second break in the same folder is still there

20 rows, 13 null titles, and the watcher fires

Prices on all 20, titles on 7. The margin for title is 0.20 in src/watch/config.ts, observed 13/20. Left unhealed so you can check it. Run npm run watch:once.

Left unhealed examples/vijay-sales-capture.json