Provenance record
US food prices, monthly (BLS Average Price)
Where every row came from — source, original license, transformations, and redistribution basis, recorded before the API went live.
← Dataset record Machine-readable license (X-License)
Dataset slug: us-food-prices
Status: LIVE (monthly refresh — ADR-013)
This is the live/current food-price dataset: the fresh companion to the
historical, static F-MAP grocery-prices. Together they
sell the "current prices + deep history" angle; separately because the two
sources have incompatible schemas (BLS = dollar prices per item; F-MAP = price
indexes per category). Catalog freshness for the current food-price story
rides on this dataset.
Source
- Publisher: U.S. Bureau of Labor Statistics (BLS), Consumer Price Index program — Average Price (AP) survey.
- Factsheet: https://www.bls.gov/cpi/factsheets/average-prices.htm
- Flat files retrieved (public FTP mirror): https://download.bls.gov/pub/time.series/ap/
ap.data.3.Food— all food-item observations (series_id, year, period, value)ap.series— series_id → area_code, item_codeap.item— item_code → item_nameap.area— area_code → area_name
- Retrieved: 2026-07-13 · Latest observation (as-of): 2026-05
- Access note: download.bls.gov 403s requests without a browser User-Agent; the ingest sends an honest identifying UA (
ingest/lib/fetch.ts). No API key required.
License / redistribution basis
- Original license: Public domain. Works of the U.S. federal government (BLS) are not subject to copyright (17 U.S.C. §105). BLS copyright policy: data may be reused freely; citation requested, not required.
- Redistribution basis: Public-domain U.S. Government work — free to redistribute, including commercially. No share-alike, no attribution obligation (we cite BLS anyway).
- Recommended citation (carried into the API
licenseendpoint): U.S. Bureau of Labor Statistics, Average Price Data (AP), Consumer Price Index program.
Transformations applied (ingest/sources/bls-food.ts)
- Scope filter. Kept the documented food scope: U.S. city average (
0000) + the 4 census regions (0100Northeast,0200Midwest,0300South,0400West). BLS publishes food AP only for these areas. - Decoded codes from
ap.series/ap.item/ap.area: each row carriesseries_id,area_code+area_name,item_code+item_name. - Period → month. BLS periods
M01–M12become integermonth1–12.M13(annual average) is not published for food and is skipped if present. - Values kept verbatim.
value(average price in USD, 3 decimal places) is stored unchanged asprice_usd. Non-numeric/empty observations skipped. - No rounding, no unit conversion, no inflation adjustment.
Freshness
- Cadence: monthly. BLS releases new AP data with each CPI release, typically the 10th–14th of the month after the reference month. Refresh cron: 15th 07:00 UTC.
- Refresh path:
ingest/refresh-us-food-prices.ts→ validation gates (schema, row-count floor 100K & ±10% delta, any item's latest price moving >50% MoM holds the batch) → apply to prod D1 →dataset_meta.last_refreshedupdated. Snapshot committed as audit trail (ingest/snapshots/us-food-prices.json).
Coverage
- Items: ~100 food categories · Areas: 5 (US city avg + 4 regions) · Rows: 149,011
- History: monthly back to 1980 for long-running items ("deep history"), current through 2026-05.
- Prices are nominal USD, not inflation-adjusted, per the source.