The Everyday Price Index open dataset
Every number behind this site, free to download and free to republish. 233 dated price observations across 75 national service chains in 7 categories. CSV and JSON, CC BY 4.0.
Dataset build: 2026-08-03 · re-checked monthlyDownload
The CSV is the whole dataset in one long-format table — one row per chain per price measure, so categories with different price shapes (a gym has an annual fee, a haircut doesn't) sit together without inventing empty columns.
Download full CSV (233 rows) Per-category JSON →
Columns: category, chain_slug, chain, model, measure, low_usd, high_usd, typical_usd, note, unit, observed_date, sources.
What's in it
| Category | Chains | Observed | JSON |
|---|---|---|---|
| Oil changes | 11 | 2026-07-10 | oil_change_prices.json |
| Haircuts | 10 | 2026-07-10 | haircut_prices.json |
| Car washes | 12 | 2026-07-16 | car_wash_prices.json |
| Gym memberships | 11 | 2026-07-10 | gym_prices.json |
| Self-storage | 10 | 2026-07-10 | storage_prices.json |
| Massage | 10 | 2026-07-14 | massage_prices.json |
| Pet grooming | 11 | 2026-07-20 | pet_grooming_prices.json |
The observed_date column carries the real per-category observation date, not the build date. Individual chains re-checked between cycles carry their own last_checked field in the JSON.
License and citation
Released under Creative Commons Attribution 4.0. Use it commercially, republish it, chart it, feed it to a model — the only condition is attribution.
Everyday Price Index (2026). Everyday Price Index — US Service Chain Price Observations. Retrieved from https://everydaypriceindex.com/data.html
Loading it takes one line:
import pandas as pd
df = pd.read_csv("https://everydaypriceindex.com/DATA/everyday_price_index_all.csv")
df.query("category == 'gym'")[["chain", "measure", "low_usd", "high_usd"]]
What makes this different from the price pages you usually find
- Every figure is dated. An undated price is a guess. Ours carry the month they were observed, in the data itself, not just in prose.
- Every figure names its sources. They travel in the
sourcescolumn, so you can check us. - Gaps stay gaps. Where a chain genuinely publishes no price — Woof Gang quotes by breed and coat, self-storage operators quote by zip code — the record is band-free and says why. There are no filler numbers anywhere in this dataset, which is the entire reason it is worth citing.
- It gets re-checked. Monthly cycle, and the observation dates move even when the price doesn't, because "verified unchanged" is a finding too.
Full write-up: our methodology →
Found an error, or want a category added?
Corrections are welcome and get folded into the next monthly cycle. If you're using this dataset for research, journalism or a tool, you don't need permission — but we'd like to know, so we can prioritise the categories people actually use.
All guides: Oil Changes · Haircuts · Car Washes · Gyms · Storage · Massage · Pet Grooming · Methodology · Home