# Changelog of UK Supermarket Price Scraper: Tesco, Sainsbury's, Asda, Aldi (`yappman/uk-supermarket-price-scraper`) Actor

- **URL**: https://apify.com/yappman/uk-supermarket-price-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/yappman/uk-supermarket-price-scraper.md

## Changelog

### 0.2 — 2026-09

- Tesco adapter: `search`, `category` and `product` modes, reading Tesco's own product API.
- `ean` present on every Tesco row seen (Tesco's API returns a GTIN for every product).
- Clubcard prices: single-item Clubcard prices in `loyaltyPrice`; multibuy and meal-deal Clubcard offers in `promotionText`.
- `tesco` added to the `retailers` input.
- Pricing unchanged: same per-run start fee and per-product price, no new events.
- Sainsbury's category mode (25 Sep 2026): pagination now follows the site's redirect when a category URL has moved, and a category whose page says "page cannot be found" is reported as not found instead of a parse failure (issue #31).
- `outputDataset` input (added 24 Sep 2026): also append every row to a named dataset in your account, so repeated runs build a history in one place. Rows are still charged once.
- `datasetName` input (25 Sep 2026, build 0.2.8): at the end of a successful run, name the run's own dataset with `{isoWeek}`, `{date}` and `{retailer}` placeholders, so a scheduled task's weekly datasets are named and never expire; a taken name, an empty run or a run that stopped early leaves the dataset unnamed with a warning, so a retry can take the name.
- Build 0.2.7 (25 Sep 2026) was made from an unreviewed working tree and is superseded by 0.2.8; do not pin it.
- `categoryUrls` accepts up to 250 URLs per run (was 50), so a retailer's whole category list fits in one category-mode run; the per-retailer request budget still bounds the work.

### 0.1 — 2026-09

- First public release.
- Retailers: Aldi, Sainsbury's, Asda.
- Modes: `search` (keywords run against every selected retailer), `category` (retailer category page URLs) and `product` (product page URLs).
- Join keys on every row: `ean` (Sainsbury's on nearly every row, Asda on about 97%) and `matchKey` (normalised brand + name + pack size, used where no EAN exists and as the cross-retailer join key).
- Loyalty and promotion fields: Sainsbury's Nectar prices in `loyaltyPrice`, Asda Rollback was-prices in `wasPrice` and multibuy promotions in `promotionText`.
- Per-store Asda stock via the `asdaStoreId` input.
- Pay-per-event pricing: a per-run start fee plus a price per product returned.

### Planned

- Product-details add-on (description, ingredients, allergens, nutrition).
- Catalogue mode.
- Cross-retailer merged rows (one row per product with a `prices[]` array).
