Build1 publisher3 min readPublished
A used Raspberry Pi case asked 31% above new while the retail anchor returned no results
With no completed sales, nine live asks running from £35 to £240 and no route to the £26.99 shop price, a self-hosted pricing tool proposed £35.39 and recorded the missing check only in a log line.
The Engineer · Build desk

What happened
- With no completed sales for the case, the tool took 15% under the cheaper half of nine live asking prices that ran from £35 to £240, and proposed £35.39.
- Every stage did what it was written to do, and the run ended with a used case asked at 31% above the £26.99 that the same case sells new for on Amazon.
- Typing the shop price into the item's notes fed the anchor, which read £12.62; the crosscheck logged the disagreement, marked the price thin, and kept £35.39.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint Because every source was a signal and no signal was allowed to dictate, a weighted vote could not express a ceiling: the rule that a used item must undercut a new one had to be written as a cap outside the scoring.
- exposure A log line and a thin flag were the whole defence, and the listing went out at the price the surviving sources agreed on. The buyer-facing artefact was where the degradation showed up first.
- cost The operator's escape hatch is not free: a free-text notes field shares its vocabulary with the condition parser, so every price an operator types has to be stripped out before the condition words are read.
The desk ranks its evidence: completed sales of the same product first, then live asking prices carrying a warning that nobody has paid them. Alongside both sits a retail anchor, the new price scaled down by a used-goods factor and independent of every resale price [4]. Each of those is a vote. A vote can be absent and the run still finishes. On Friday the anchor's discovery step returned nothing, because its only route to a price-comparison site was a `site:` search through a self-hosted metasearch instance whose engine had been rate-limited since breakfast [7]. The run logged `retail-anchor discovery unavailable: no results and these engines were unresponsive: google cse` [6]. The anchor, the author wrote, "said so, politely, in a log line nobody reads before a listing goes up" [8].
Feeding it by hand changed nothing about the output. With the shop price typed into the item's notes, the anchor produced its number. The crosscheck reported that "the price sources disagree with each other (live asks £42.29, retail anchor £12.62)", marked the price "thin", and left it at £35.39 [13]. The anchor was one vote among several, and the design was careful never to let a single source dictate [14].
So the absent anchor and the present anchor produced the same listing. £35.39 against a new price of £26.99 is 31% above retail [21]. The anchor's own reading, £12.62, is about 47% of the new price, which is what the category factor estimates a used one realises [23].
The fix sits outside the scoring. Once the new price is known, the ask is capped at that price times a condition multiplier: 85% for "good", 92% for "like new", 70% for "fair". That multiplier is explicitly not the category factor, which belongs to the anchor [16]. For this case the cap is £26.99 times 0.85, which is £22.94 [22]. That is £12.45 below the number the pipeline produced with nothing broken, a cut of 35% [24].
The manual override cost two parser changes. "New" is already a condition keyword, and it tells the comp filter to discard every used sale. So "new on amazon £26.99" in the notes silently reclassifies the item, unless the price phrase is read and removed before the condition words [11]. The second problem is which keyword owns the pound sign. In "brand new, sealed, rrp £30" the price belongs to `rrp`. The author's first pattern matched from the first keyword and swallowed "new, sealed, rrp £30" whole. The item stopped being new. A negative lookahead in the gap between keyword and `£` fixed it, with a test [12].
Typing prices by hand works one item at a time. The comparison site indexes electronics well and everything else badly, and the stock includes a tin of malt drink powder, a newborn bottle set and a graphing calculator, none of which it has ever anchored; Amazon sells all of it [18]. Before writing a scraper the author checked that Amazon's `robots.txt` does not disallow the search page or product pages for `User-agent: *`, only sub-paths the tool never touches [19]. The client identifies itself as `listing-desk/2.31` with a link to the source, with no browser string and no headers pretending to be Chrome [20]. The post says three things were measured and breaks off partway through the second [25].
What to watch
- Whether the Amazon scraper ships, and whether the search page keeps serving title and price to a client identifying itself as listing-desk/2.31.
- Whether the cap binds for items with no current new price, since it only applies once the new price is known.
- Whether a missing retail anchor gets promoted from a log line to something that blocks a research run.