The Basket
One unchanging cart of everyday household items. The weights are frozen at the 2000 vintage — we never re-weight and never swap in cheaper substitutes. Here is exactly what's in it.
What's in the basket
17 strata, biggest share first. The bar shows each item's share of the basket; the weights are fixed at 2000 and sum to 100%.
-
Healthcare — total premium 14.9%
Health-insurance premium
-
Transportation — vehicles 12.8%
Buying a vehicle
-
Food at home 11.3%
Groceries — 22 staple items
-
Transportation — services 10.1%
Driving costs, airfare & transit
-
Shelter — rent 7.6%
Rent for a home
-
Entertainment and reading 7.5%
Movies, streaming & cable
-
Apparel 6.9%
Clothing & shoes
-
Home energy 4.9%
Home electricity & natural gas
-
Gasoline 4.8%
Gasoline at the pump
-
Shelter — property tax 4.3%
Property taxes on a home
-
Communications 3.3%
Phone & internet service
-
Shelter — maintenance & repair 3.1%
Home maintenance & repair
-
Healthcare — medical services 2.5%
Doctor, hospital, dental & vision
-
Education 2.4%
College tuition & fees
-
Other lodging 1.8%
Hotels & short stays
-
Healthcare — prescription drugs 1.6%
Prescription drugs (generic)
-
Postage (USPS) 0.1%
Postage stamps
17 strata · weights sum to 100.00% (validated to 1.0 ± 0.0001 at module import) · weights vintage 2000, BLS CEX + NIPA 7.8 augmentation.
Where each number comes from
Every stratum's price comes from a published, citable source — never
from BLS CPI. Open any item to see its precedence ladder (lower
precedence wins where sources overlap). From app/engine/strata.py.
Food at home
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000709112
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000708111
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000703112
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000706111
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000702111
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000711211
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000712112
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000715211
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000717311
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000701312
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000711311
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000712311
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000710212
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000701111
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000702212
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000FC3101
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000704111
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000704211
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000710411
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000711412
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000712211
Precedence 0
— BLS Average Price Data (APU), monthly, national.
series_id: APU0000713111
Gasoline
Precedence 0
— EIA, weekly (rolled to monthly), national + state ladder.
series_id: eia_gasoline_regular_weekly
Home energy
Precedence 0
— EIA, monthly, national + state ladder.
series_id: eia_electricity_residential_monthly
Precedence 0
— EIA, monthly, national + state ladder.
series_id: eia_natgas_residential_monthly
Shelter — rent
Precedence 0
— zillow_zori, national.
series_id: zillow_zori_us_national_smoothed
Precedence 1
— census_hvs, national.
series_id: census_hvs_median_asking_rent_us
Shelter — property tax
Precedence 0
— census_property_tax, national.
series_id: fred_us_property_tax_per_capita_quarterly
Shelter — maintenance & repair
Precedence 0
— shelter_maintenance_ppi, national.
series_id: ppi_maint_repair_inputs_us
Other lodging
Precedence 0
— ahla_str_adr, national.
series_id: str_us_hotel_adr_annual
Apparel
Precedence 0
— levis_501, national.
series_id: levis_501_original_fit_msrp_us
Precedence 0
— converse_chuck, national.
series_id: converse_chuck_taylor_coreox_msrp_us
Precedence 0
— dr_martens_1460, national.
series_id: dr_martens_1460_msrp_us
Precedence 0
— dickies_874, national.
series_id: dickies_874_list_us
Transportation — vehicles
Precedence 0
— manheim_uvvi, national.
series_id: manheim_uvvi_seasonally_adjusted
Transportation — services
Precedence 0
— aaa_driving, national.
series_id: aaa_ydc_composite_cents_per_mile
Precedence 0
— bts_atpi, national.
series_id: bts_us_domestic_air_fare_quarterly
Healthcare — total premium
Precedence 0
— KFF Employer Health Benefits Survey, annual, national.
series_id: kff_ehbs_premium_family_total
Healthcare — prescription drugs
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_metformin_hcl_500mg_tablet
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_atorvastatin_20mg_tablet
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_lisinopril_10mg_tablet
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_levothyroxine_50mcg_tablet
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_amoxicillin_500mg_capsule
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_omeprazole_dr_20mg_capsule
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_simvastatin_20mg_tablet
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_sertraline_50mg_tablet
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_lansoprazole_dr_30mg_capsule
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_paroxetine_20mg_tablet
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_fluoxetine_20mg_capsule
Precedence 0
— NADAC (CMS National Average Drug Acquisition Cost), weekly (rolled to monthly), national.
series_id: nadac_clopidogrel_75mg_tablet
Healthcare — medical services
Precedence 0
— CMS Physician Fee Schedule, annual, national.
series_id: cms_pfs_99213_non_facility
Precedence 0
— CMS Physician Fee Schedule, annual, national.
series_id: cms_pfs_99214_non_facility
Precedence 0
— CMS Physician Fee Schedule, annual, national.
series_id: cms_pfs_99203_non_facility
Precedence 0
— CMS Physician Fee Schedule, annual, national.
series_id: cms_pfs_99283_facility
Precedence 0
— CMS Physician Fee Schedule, annual, national.
series_id: cms_pfs_93000_non_facility
Precedence 0
— cms_opps, national.
series_id: cms_opps_45378_colonoscopy
Precedence 0
— cms_opps, national.
series_id: cms_opps_66984_cataract
Precedence 0
— cms_opps, national.
series_id: cms_opps_43239_egd_biopsy
Precedence 0
— cms_opps, national.
series_id: cms_opps_70553_mri_brain
Precedence 0
— cms_opps, national.
series_id: cms_opps_93306_echo
Precedence 0
— cms_opps, national.
series_id: cms_opps_99284_ed_visit
Precedence 0
— cms_opps, national.
series_id: cms_opps_64483_epidural
Precedence 0
— meps, national.
series_id: meps_dental_visit
Precedence 0
— meps, national.
series_id: meps_vision_eyewear
Education
Precedence 0
— nces_digest, national.
series_id: nces_avg_tuition_fees_all_inst_us
Precedence 1
— NCES IPEDS, annual, national + state ladder.
series_id: ipeds_in_state_tuition_and_fees
Communications
Precedence 0
— FCC URS, national.
series_id: fcc_urs_voice_us_residential_annual
Precedence 0
— FCC URS, national.
series_id: fcc_urs_broadband_us_residential_annual
Precedence 0
— fcc_wireless_arpu, national.
series_id: fcc_us_wireless_arpu_annual
Entertainment and reading
Precedence 0
— nato_tickets, national.
series_id: nato_us_avg_ticket_price
Precedence 0
— the_numbers_tickets, national.
series_id: the_numbers_us_avg_ticket_price
Precedence 0
— household_subscription, national.
series_id: cable_fcc_expanded_basic_monthly
Precedence 0
— household_subscription, national.
series_id: netflix_us_standard_monthly
Postage (USPS)
Precedence 0
— usps_stamp, national.
series_id: usps_first_class_stamp_1oz
How the weights are built
Weights come from the BLS Consumer Expenditure Survey 2000 standard tables (Tables 1, 3, 5, 7), with employer-paid private group health insurance added to the healthcare premium from NIPA Table 7.8 line 17. They are fixed at the 2000 vintage — they do not re-weight when BLS releases updated CEX tabulations or when BEA rebenchmarks NIPA.
Any change to a SKU, source, weight, or stratum is logged in the
change log below with a basket version bump; prior versions stay
reproducible from observations tagged with their
basket_version.
How weights differ by household
The same prices, but a different weight schedule per household. Here are
the four largest strata across all 10 household
profiles — read from weights.py.
| Household | Healthcare — total premium | Transportation — vehicles | Food at home | Transportation — services |
|---|---|---|---|---|
| National Average | 14.9% | 12.8% | 11.3% | 10.1% |
| Homeowner | 14.8% | 13.6% | 11.6% | 10.9% |
| Renter | 15.4% | 10.8% | 10.6% | 8.2% |
| Working Parent | 13.2% | 13.4% | 12.2% | 9.8% |
| Retiree | 9.0% | 10.5% | 13.5% | 9.7% |
| Income — Lowest Quintile | 22.6% | 8.8% | 11.1% | 6.9% |
| Income — Second Quintile | 18.4% | 10.7% | 12.9% | 8.3% |
| Income — Middle Quintile | 15.6% | 12.8% | 12.1% | 9.8% |
| Income — Fourth Quintile | 13.5% | 14.2% | 11.8% | 10.7% |
| Income — Highest Quintile | 10.0% | 14.1% | 10.6% | 12.3% |
Change log
Every change to the basket, newest first. Each entry: what changed and why, in one factual sentence.
2026-06-07 — Deeper food-at-home sampling: 13 → 22 BLS APU items
Version: data tag 1.0.12 → 1.0.13
What changed. The food_at_home stratum's single-SKU set grew from 13 to 22 BLS Average Price items. Added (each verified against the BLS API for continuous 2000-01→present coverage): flour, whole-wheat bread, beef steaks, bacon, pork chops, ice cream, lemons, iceberg lettuce, and frozen orange juice. The stratum's basket weight is unchanged — this is a within-stratum deepening, not a stratum add/remove, so the archetype weights still sum to 1.0 with no renormalization.
Why. The original 13 thinly sampled protein (only ground chuck, whole chicken, eggs) and carried no pork and no non-ground beef cut, so the Carli average under-represented meat — a high-inflation group. The new mix spreads across grains, beef, pork, dairy, produce, and juice without letting any group dominate (meat and produce each ≈27% of SKUs). Still 100% BLS APU observed average prices — no BLS CPI. APU carries no processed/prepared-food SKUs, so the set necessarily skews toward staples/produce/meat — a disclosed limit, not a fixable skew.
Effect on headline. food_at_home's long-run rate rises 2.47 → 2.72%/yr (correcting the thin protein sample); the National Average headline moves +0.018pp, 3.540 → 3.559%/yr, index 246.36 → 247.50. Surviving rows were re-stamped basket_version 1.0.12 → 1.0.13 (values unchanged); the 9 new SKU series were ingested at 1.0.13. Strata count stays 15.
2026-05-30 — Movie-ticket series continued: NATO → The Numbers
Version: data tag 1.0.10 → 1.0.11
What changed. The entertainment stratum's movie-ticket SKU gained a continuation source. NATO rebranded to Cinema United (Mar 2025) and stopped publishing the annual US average ticket price, so the NATO series ends at 2024. The Numbers (the-numbers.com) computes the same quantity by the same method — total box-office gross ÷ admissions — and its 2024 figure ($11.31) matches NATO's final figure to the cent. It is wired in as its own parallel series (2024 overlap anchor + 2025 = $11.96), and the chain-link engine splices NATO → The Numbers automatically across the 2024/2025 boundary.
Why. With NATO dead after 2024 and cable ending in 2011, entertainment was 100% Netflix for 2025 — so the whole stratum's 2025 reading was the Netflix January price hike (+16%), a single-SKU over-weighting artifact. Restoring a real theatrical-ticket price gives 2025+ a representative streaming + theatrical blend. No BLS CPI is involved; non-CPI share stays 100%.
Effect on headline. Entertainment's 2024→2025 move drops from +16.1% (Netflix-only) to +12.3% (blended). Long-run decay is essentially unchanged (3.55 → 3.54%/yr — one annual SKU over 25 years); the trailing-12 rate corrects from 3.29%/yr to 2.95%/yr. Surviving rows were re-stamped basket_version 1.0.10 → 1.0.11 (values unchanged); the new ticket rows were ingested at 1.0.11. Strata count stays 15.
2026-05-29 — Zero-CPI recomposition, chain-linked headline, CPI ingester removed
Version: v1.1.4 → v2.0.0
What changed. Retired BLS CPI from the index entirely and removed its last infrastructure. (1) Five CPI/proxy-dependent strata EXITED and weights renormalized over the surviving 15: household_goods, personal_care, alcohol (pure CPI primaries), food_away (single-chain Big Mac proxy, rejected as non-representative), and tobacco (CPI Tobacco was its only 2020+ path). (2) The last CPI bridge — CUUR0000SEMF01 (Rx CPI) — removed from healthcare_oop, now NADAC (5 generic drugs) + CMS PFS (2 CPT codes) only. (3) shelter_rent moved to Zillow ZORI (2015+) spliced to Census HVS median asking rent (≤2014), and the state healthcare_premium chain-link to BLS CPI SEME was dropped — these SUPERSEDE the v1.1.2 'chain-link to BLS CPI SEME for 2025+' and v1.1.3 'leaving BLS CPI Rent of Primary Residence as sole source' entries below, which describe the now-replaced v1.1.x state. (4) Headline switched to a drift-free fixed-base-within-spans construction, chain-linked only at composition boundaries, so late-starters splice in at entry with no level jump and the index spans the full window. (5) The dormant bls_cpi ingester, its CLI/freshness/reingest wiring, its fixture, and 7,174 inert CUUR rows were deleted from price_observations (local + prod).
Why. The load-bearing commitment is that the index contains NO BLS CPI anywhere — not a primary, not a bridge, not a fallback — because claiming to improve on CPI while still consuming CPI is incoherent. These changes realize it fully: non-CPI share = 100%.
Effect on headline. Published window 2000-01 → 2025-12 (312 months, up from a truncated 2010-2023); long-run decay 3.440%/yr; Dollar Half-Life 20.5 yr; CPI series in index 0; strata count 20 → 15. Price rows remain tagged basket_version=1.0.10 (a weighting + engine-construction change, not a re-ingest); exited strata's rows stay in the store at weight 0 so prior versions remain reconstructable.
2026-05-27 — /state/<code>/coverage endpoint rebuilt
Version: v1.1.3 → v1.1.4
What changed. Public API endpoint /api/v1/state/<code>/coverage rebuilt to surface per-stratum source, state_coverage_first_month, state_coverage_last_month, and weight_national_average; replaces v1.1 endpoint with a band-inference logic bug exposed by the v1.1.1 splice fix.
Why. METHODOLOGY.md §5.8 publication obligation requires per-stratum first-month state-coverage disclosure so consumers can identify which months mix state-specific signal with national fallback.
Effect on headline. None (disclosure surface only).
2026-05-27 — HUD FMR removed from engine path
Version: v1.1.2 → v1.1.3
What changed. Removed HUD Fair Market Rents ingester, series, fixture, tests, and schedule entries; deleted 46,833 HUD FMR rows from price_observations; shelter_rent precedence-1 fallback dropped, leaving BLS CPI Rent of Primary Residence as sole source.
Why. HUD FMR is administrative data (40th-percentile ceiling for Section 8 vouchers, derived from 5-year-smoothed ACS gross-rent data) measuring assistance-payment standards rather than market rent; never fired as a fallback under existing BLS coverage; retention implied a methodology promise the engine was not honoring.
Effect on headline. ~0.001 pp (rounding noise).
2026-05-27 — Full annual KFF state series + post-2024 trim
Version: v1.1.1 → v1.1.2
What changed. State-level healthcare_premium rebuilt from the complete 2013-2024 annual MEPS-IC publication (12 years × 51 geographies = 612 measurements), replacing the 3-anchor (2014/2019/2024) v1.1.0 simplification; post-2024 hold-forward removed; state series chain-link to BLS CPI SEME for 2025+.
Why. The 3-anchor approach forced stepped hold-forward interpolation between anchors and a post-2024 flat tail that depressed long-run decay rates by ~20-40 bp vs national; KFF publishes annually so ingesting all 12 years removes both artifacts.
Effect on headline. National unchanged. State-vs-region gaps moved from -240/-380 bp to -3/-125 bp.
2026-05-27 — Per-period geography splice + unified series_ids
Version: v1.1.0 → v1.1.1
What changed. EIA and BLS-CPI now write per-state and per-region rows under the same internal series_id as their national equivalent with the geography column differentiating; the §5.4 fallback ladder rewritten from per-ref to per-period with chain-link rescale at geography transitions.
Why. The prior per-ref geography routing silently dropped KFF national 1999-2013 rows for state queries (because the engine picked a single best geography for the whole window); the audit revealed pop-weighted state-vs-national headline gaps of -240/-380 bp driven by a -1860/-2120 bp gap in healthcare_premium that traced to this routing.
Effect on headline. National unchanged. State headlines moved 25-40 bp toward their region's value; per-stratum decomposition now surfaces real state divergence in 4 of 20 strata.
2026-05-27 — Cross-source calibration for state healthcare_premium
Version: v1.0.2 → v1.0.3
What changed. State-level healthcare_premium rows are now emitted with the calibration calibrated_state(s, y) = MEPS_IC_state(s, y) × (KFF_EHBS_US(y) / MEPS_IC_US(y)), with the calibration ratio, raw MEPS-IC value, and adjustment basis surfaced in each observation's raw_payload.
Why. MEPS-IC (the state-level source) and KFF EHBS Figure 1.12 (the national source) measure the same construct through different operational definitions and persistently disagree at the US level by 3-5% in levels; without calibration, state-vs-national comparisons mixed two surveys and state pop-weighted aggregates did not match the national headline.
Effect on headline. None at national level. State family premium values run ~1-4% higher than raw KFF State Health Facts; per-state ranking unchanged.
2026-05-25 — Weighting basis pivot — BEA PCE to BLS CEX + NIPA 7.8 augmentation
Version: v1.0.1 → v1.0.2
What changed. Weight source changed from BEA PCE 2000 to BLS CEX 2000 standard tables with NIPA Table 7.8 line 17 employer-paid private group health insurance augmentation ($329.199 billion in 2000, $3,010/CU for working-age archetypes, $0 for Retiree); basket extended to ten archetypes (five demographic + five income quintile); stratum count increased from 18 to 20 (alcohol, tobacco, other_lodging broken out).
Why. PCE is a national-accounts construct that includes OER, Medicare/Medicaid, imputed banking services, and nonprofit consumption — categories that do not represent cash leaving a household; CEX is what households self-report spending out of pocket; CEX 2000 tabulations are vintage-stable while PCE comprehensive revisions would force a vintage-policy stance.
2026-05-25 — Food-at-home BLS APU coverage audit
Version: v1.0.0 → v1.0.1
What changed. Chicken: APU0000FF1101 (boneless breast) replaced with APU0000706111 (whole fresh chicken). Apples (APU0000711111, Red Delicious) removed — BLS ceased publishing after 2017-10. Butter (APU0000FS1101) removed — six-year publishing gap May 2012 to March 2018 that would require interpolation.
Why. Boneless-breast series begins 2006-01; whole fresh chicken is continuously published 2000-01 to present. Apples and butter have no continuously-published alternative SKU.
What's left out
What is deliberately not in the basket, and why. The underlying rationale lives in METHODOLOGY.md §3.2.
| Excluded | Reason | Disposition |
|---|---|---|
| Mortgage interest | Debt service, not consumption. | Published in companion AEI v1.1+. |
| Personal insurance and pensions | Savings, not consumption. | Excluded from basket denominator. |
| Taxes (federal + state income, payroll, property) | Out of scope for a price-of-consumption index. | Published in companion DIEI v1.1+. |
| Owners' Equivalent Rent (OER) | Imputed price, not a market transaction. | Replaced by market rent + composite owned-shelter operating cost per METHODOLOGY.md §3.2.6 and §4.2. |
| Medicare and Medicaid (government-paid) | Not household cash burden. | Excluded from healthcare premium numerator; only worker-paid + employer-paid private group health insurance counted. |
| Imputed banking services | National-accounts construct, not household cash. | Excluded with PCE pivot in v1.0.2. |
| Nonprofit consumption | National-accounts construct, not household cash. | Excluded with PCE pivot in v1.0.2. |
| OPPS facility component of ED visit | Not yet ingested; CMS PFS 99283 captures professional component only. | Documented gap; v1.1 candidate. |
| Property tax and maintenance/repair components of owned-shelter operating cost | No clean 2000-current annual national series available without methodological interpolation. | Documented partial composite; v1.x candidate. |