I publish two weekly indices of posted online supermarket prices, one for the UK and one for Australia. Both for 2026-W44 went out on 2 November 2026. This post covers the headline moves, what the indices do not measure, and how to read the data yourself.
What the indices are
Each week I read the online catalogues of the retailers, match products week on week by the retailer's own product id, and chain the geometric mean (a Jevons index) of the price ratios. Retailers get equal weights. There are no spending weights. The indices are intended weekly, normally on Monday.
They are not CPI and not an official statistic. They measure posted online shelf prices, not prices paid.
UK, 2026-W44
The headline for Tesco, Sainsbury's, Asda and Aldi is 99.72, down 0.24% on the week. The base is 100 at 2026-W42, when the series restarted after a skipped week 41. It rests on 74,335 matched products. Food and soft drinks is 99.81, down 0.21%.
By retailer, week on week:
- Tesco: +0.05%
- Sainsbury's: +0.04%
- Asda: -0.17%
- Aldi: -0.88%
I am not giving a cause for Aldi's fall. The index shows the movement only.
Australia, 2026-W44
The like-for-like headline for Coles, Woolworths and Aldi Australia is 100.64, up 0.48%, from a base of 100 at 2026-W41. It rests on 21,029 matched products, in Australian dollars. Food and soft drinks is 100.23, up 0.05%.
Across all matched products, by retailer: Coles +0.15%, Woolworths +1.19%, Aldi Australia -0.10%.
Personal care is the class that moved most, up 7.15% on the page. Shelf prices include promotions by design, so a change in how many products are on offer can move a class even when regular prices do not.
One limit matters here: Coles is a partial slice, with 6,425 products used (21.0% of the Coles lists) this week.
Read the data
The full UK series is a public CSV under CC BY 4.0. It is long format, with one row per vintage, record type, retailer and class.
import pandas as pd url = ("https://api.apify.com/v2/datasets/AvRCWqFinCiNjx3sP/items" "?format=csv&clean=true") df = pd.read_csv(url) head = df[df["recordType"] == "headline"] print(head[["vintage", "level", "weekOnWeekPct", "matched"]] .sort_values("vintage")) The column names come from the data dictionary. Levels from different series (base W39 and base W42) cannot be compared.
Where to get it
- UK W44: DOI 10.5281/zenodo.23881940, and the Hugging Face dataset yappman/uk-online-shelf-price-index.
- AU W44: DOI 10.5281/zenodo.23882013, and the Hugging Face dataset yappman/au-online-shelf-price-index.
- Pages and methods: UK index, AU index.
The indices publish aggregates only. Product-level shelf prices can be read on demand with the UK Supermarket Price Scraper, a pay-per-event Actor on the Apify Store. For Australia, the Australia Supermarket Price Scraper reads Aldi Australia; the AU index page says Coles and Woolworths are read only on runs started by the Actor owner's account. Check each Store page for current pricing.
Cite as "Yappman Data, UK Online Shelf-Price Index" or "Yappman Data, AU Online Shelf-Price Index", CC BY 4.0, with the vintage.


