When is a sale actually a good deal?

The problem
Black Desert's Pearl Shop runs rotating sales on outfits and subscriptions. A "30% off" banner tells you nothing about whether this is the best deal that item has ever had — or a mediocre one dressed up as a promotion.
Why it matters
Pearls cost real money. Buying at the wrong moment means overpaying for the same item someone else got cheaper last month. Most shops never show you that history — you take every "special" at face value unless you track it yourself.
Real-world parallel
Same problem as SteamDB for game sales, or wanting your supermarket to show the lowest price orange juice has ever been — except there is no public catalog, so I built one from ingested shop announcements.
Approach
Pearl Shop announcements and patch-note posts are parsed offline into a versioned catalog. Messy HTML, inconsistent naming, and layout changes across posts are normalized to stable catalog item IDs so the same outfit spelled three different ways still rolls up to one row.
The compiled catalog lands as a single JSON file on Cloudflare R2. The React app fetches one signed object and filters client-side — read-heavy, batch-updated data with zero database maintenance, same serverless pattern as the marketplace dashboard.
Outcome
Before spending Pearls, you can see whether a sale is historically strong: best recorded discount, original vs sale price, and the post date when that deal ran. Each row shows the best deal ever for that item — not a full price timeline. Category-only lines (percent off with no listed pearl price) surface rotation and bundled sales where individual amounts were never published. Open the full dashboard to search and sort every tracked item.
Technical details
Pre-aggregation at ingest: bestDiscounts keeps the strongest discount per catalog item ID, not every historical event.
v2 schema separates announcement metadata (dimPosts) from price facts to avoid repeating URLs per row.
itemRawName is preserved alongside normalizedName so you can see how the post originally phrased the item.
Category-only filter surfaces rows where only a discount percent was parseable (no original or sale pearl amounts).
See the live dashboard or report this write-up describes.
Open Pearl Shop catalog