The Cart Index · Folsom, CA Published weekly Data & code on GitHub ↗
A weekly grocery price index · Folsom, California

The Cart
Index

Every Monday morning, one economics student records what the same fixed basket costs at three Folsom grocery stores (Walmart, Target, and Safeway), item by item, straight from each retailer's own published store prices. National CPI tells you what food costs on average, months later. This tells you what it costs here, this week. Measured, not estimated.

—·—
— wk/wk Base week = 100
Pilot phase complete (Jul 6 – Aug 17). The official index publishes its first reading Monday, Aug 24, 2026.

01 · The number

Grocery inflation, measured on foot

The index is a weighted average of price changes across five food categories, benchmarked to the first week of the official series (= 100). Weights are fixed, BLS-style food-at-home category weights, published in the page source, so a move in this line means the same thing a CPI move does, just for Folsom, and weekly instead of monthly.

—weeks in official series
—observations in index
—items in basket
—stores, every week

The official series begins Aug 24, 2026 (= 100). The seven weeks of Jul 6 – Aug 17 were a pilot used to finalize the collection protocol; pilot observations are published in the raw CSV, flagged pilot, and excluded from the index. Details are in the revision log.

02 · The spread

The cheapest full cart

The exact same basket, rung up at each store this week. The gap between the cheapest and priciest cart is real money a family keeps by driving five extra minutes.

What the spread is worth to you

Based on this week's percentage gap between the priciest and cheapest cart, applied to your own grocery budget.

— back in your pocket per year
— per week, at this week's spread

03 · The shelf

On the shelf this week

Average listed price across all tracked stores for each basket item, with the week-over-week move. These are the prices each retailer publishes for its Folsom store.

04 · The method

How it's measured

1

Fixed basket

The same named products, at the same stores, every week. Each item is defined by a written specification (brand tier, cut, package size, and price type), so every observation is like-for-like. Out-of-stock items carry the prior week's price forward (standard index imputation) and are never substituted. Full specifications are in the README.

2

Collected consistently

Prices recorded every Monday morning from each retailer's own website, with the exact Folsom store location selected, exactly as displayed for that store. Free loyalty pricing counts where a retailer shows it by default (Safeway for U); Target displays its base price. Clip-to-activate coupons and paid memberships are never used.

3

Weighted like the CPI

Category price relatives are combined with BLS-style food-at-home weights (a Laspeyres index), so the composite behaves like a true price index rather than a raw price average. The weights sit in the site's configuration block, so anyone can inspect them or change them in a fork.

4

Published open

Every observation lives in a public CSV on GitHub. From Sept 28, 2026, a dated screen capture of each listing is published the same day in archive/listings/, so any price can be checked against the page it came from. Anyone can audit the math or rebuild the index.

REVISION LOG · 3 entries

2026-09-23 · Archival capture of source listings adopted, effective Mon, Sept 28, 2026; item_id added to the schema. Adopted today and taking effect with the collection of Monday, Sept 28, 2026: a dated screen capture of every price listing is published in archive/listings/, all 42 observations, on the same day as the prices they support, so any published figure can be checked against the page it was read from. Captures and prices are committed separately, minutes apart, and both timestamps are recorded by GitHub rather than by the author. Five official weeks already published (Aug 24 through Sept 21) precede the rule and have no captures; that boundary is separate from the pilot boundary below, and no published price changed when the rule was adopted. The CSV gains an item_id column, a short key matching the capture filenames (safeway_eggs, target_coke), appended last so existing columns are unchanged. Also recorded: online prices can change more than once within a day, so each Monday reading is a snapshot of that morning rather than the week’s price; and Target’s displayed price is its base price, with no Circle member offer applied.

2026-08-22 · Collection protocol adopted; official series defined. A written protocol now fixes every item specification: brand tier, cut, and package size for both meat items; per-banana pricing (the only unit all three stores display); normalization of Safeway’s 22 oz loaf to a 20 oz equivalent; and the price-type rule under which Safeway prices are its free-membership (for U) prices. Ground beef is priced from the store-brand 1 lb 80/20 tray; chicken breast from each store’s value-pack tier, the only tier stocked at all three, so part of any cross-store chicken gap reflects pack size rather than store pricing. This affects cart levels, not the index. The official series begins with the first collection under this protocol, Monday, Aug 24, 2026 = 100.

2026-08-21 · Jul 6 – Aug 17 designated the pilot phase; panel set at three stores. During those seven weeks the meat items were not selected under a written specification, so those observations are not like-for-like week to week. They remain published in the CSV, flagged pilot, and are excluded from the index; the index previously shown here, computed from all pilot data with base week Jul 6, is superseded and not comparable to the official series. Target banana rows were corrected from an inferred per-pound figure to the observed per-each price. The pilot panel also included Bel Air, removed to avoid a potential conflict of interest for the author (see the README); its 98 pilot observations remain published at archive/belair.csv.

This is an independent student research project. It is not affiliated with, endorsed by, or informed by any retailer's internal data. Every price is the retailer's own publicly listed price for its named Folsom store. Store names can be anonymized on request.