What the panel shows
Five tabs under a market + basket selector and a time-range control:
Panel-level controls:
- Market bar — a button per supported market (default
AE; the full list comes fromMARKETSinsrc/services/consumer-prices). Selecting a market implicitly sets the basket to that market’sessentials-<code>variant (or the default basket when theallaggregate view is active) — there is no separate basket picker. - Range bar —
7d,30d, or90d. - Category filter — click a category row on the Categories tab to scope the Movers tab to that category. A clear-filter affordance resets it.
localStorage under wm-consumer-prices-v1.
Panel id is consumer-prices; canonical component is src/components/ConsumerPricesPanel.ts.
How you reach it
- Cmd+K: type prices or consumer.
- Availability by variant: enabled by default in the finance and commodity variants. Registered but disabled (opt-in) in the full/geopolitical variant. Not registered in the tech or happy variants. Source:
FINANCE_PANELS,COMMODITY_PANELS,FULL_PANELSinsrc/config/panels.ts.
Data sources
Five tab RPCs plus one sparkline RPC back the panel:
Upstream data is scraped from retailer price feeds by the companion
consumer-prices-core service and published as Redis snapshots per market and
basket.
Refresh cadence
The underlying seeders run roughly once per day per market+basket combination. The Consumer Prices keys inapi/health.js allow up to 25 hours (maxStaleMin: 1500) before the health surface escalates a warning, which gives the seeder a 1-hour grace window on top of the daily cadence.
The Health tab inside the panel shows the per-source fetched-at timestamps so you can see staleness directly rather than relying on global health flags.
Tier & gating
Consumer Prices is free. The panel is registered without apremium flag in src/config/panels.ts, so anyone — including unauthenticated readers — can see it on variants where it is enabled.
API reference
- Consumer Prices service — full OpenAPI for all 5+1 RPCs.
