# Changelog of Coles Australia Scraper: Products, Prices, Specials & Stock (`getascraper/coles-scraper`) Actor

- **URL**: https://apify.com/getascraper/coles-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/getascraper/coles-scraper.md

## Changelog

All notable changes to this project will be documented in this file.

### \[0.3] - 2026-09-20

#### Fixed

- 🛡️ Free-plan cooldown and daily-limit requests now finish successfully with a clear run-status message instead of being reported as scraper failures. These requests do not start the browser or write dataset items.
- 🔐 Uses a versioned quota store when running with limited permissions, avoiding access failures for existing named storage.

#### Changed

- 📋 Free-plan limits are now explained in the input form as well as the README.

### \[0.2.1] - 2026-09-17

#### Added

- 🛡️ Added abuse protection for free-plan usage: free runs are now limited to 25 products, 3 runs per day, and a short cooldown between runs. Paid plans are unaffected.

### \[0.2] - 2026-09-08

#### Added

- 📏 **True per-kg/per-L unit pricing**: every row now includes a normalized `price_per_base_unit`, so items priced per-100g and items priced per-1kg compare correctly. Previously the raw display string could rank the most expensive item in a search as the second-cheapest.
- 💸 **Real specials math**: `on_special`, `discount_amount`, and `discount_percent` are now computed directly from the source's own current and original prices, never invented.
- 🔔 **Optional price and stock change monitoring**: track a search or SKU list on a schedule and get `NEW`, `PRICE_DROP`, `PRICE_RISE`, `BACK_IN_STOCK`, `OUT_OF_STOCK`, and `UNCHANGED` rows compared against the previous run, with an option to emit only the rows that changed.
- 🏷️ Two previously-unused taxonomy fields, `trade_profit_centre` and `category_group`, are now included.

#### Fixed

- 🌐 **Fixed a page-load timeout that could hang a run and produce zero results.** The crawler now proceeds as soon as the page's content is ready instead of waiting on every last background resource to finish loading.
- 🛡️ **Removed the `storeId` input and all "regional/state-specific pricing" claims.** Investigation found no way for this Actor to control which Coles store's prices are returned — the store is resolved automatically from the run's network location, not from any input value. The field previously did nothing; keeping it and claiming otherwise was misleading.
- 🛡️ **Removed the `aisle` and `aisle_side` fields.** Coles's own product data confirms this information is not published online for any product, in any store ("ask a Team Member" is the field's actual content) — no code change could have populated them.
- 🐛 A product genuinely out of stock (quantity 0) was being reported with a missing quantity instead of 0, and a genuine $0 price was being dropped instead of kept. Both now report their real value.
- 🐛 Whether an item is an online-only special was silently never appearing in the output, even though the source publishes it. Now populates correctly.
- 🧹 Brand, size, and stock-location fields are no longer replaced with an invented default ("Coles", "1 Each", "InStoreAndOnline") when the source does not provide them.

#### Changed

- 💾 Lowered the default run memory from 2048 MB to 1024 MB after measuring a peak of ~840 MB across recent runs.

### \[0.1.0] - 2026-06-29

#### Added

- ✨ Initialized Playwright-based Coles Australia product and price lister scraper.
- ➕ Added hybrid extraction layer: extracts structured JSON directly from Next.js `__NEXT_DATA__` with fallback to semantic DOM selectors.
- ➕ Added support for regional `storeId` configurations to capture state-specific Australian pricing.

#### Changed

- ⚡ Implemented browser resource interception to abort heavy stylesheets, images, and fonts, speeding up crawls by over 50%.
- 🛡️ Enabled strict Australian residential proxy gating to bypass Imperva Incapsula blocks.
