Coles and Woolworths prices, specials, unit prices, stock and barcodes in one schema. Search, categories, per-store Coles pricing and price-change alerts.
All notable changes to this Actor are documented here. Format: Keep a Changelog , versioning: SemVer .
[0.1.5] - 2026-10-15
Changed
The input field monitorKey is now called monitorName (Apify's quality check read "key" as a credential). The old name still works in saved inputs, tasks and API calls.
[0.1.4] - 2026-10-07
Fixed
With specials: "all", a Woolworths server error on one aisle (HTTP 400 carrying ErrorCode 500) no longer fails the whole run as a "site change". The aisle is retried twice on a new session. If it still fails it is skipped, named in the status message and listed in the run summary (skippedSpecialsAisles), and the other aisles are scraped as usual. The same server error on a search, category or product page is retried twice, then reported as "Woolworths server error" (not "site changed"), with the source in FAILED_INPUT.
[0.1.3] - 2026-10-06
Fixed
When Coles shows its site-wide outage page ("We're currently offline"), the Actor no longer reports it as a bot challenge and retries it 7 times through residential proxies. It retries twice, then gives up on that Coles source with the reason "Coles website offline", saves the Woolworths results as usual, and lists the Coles sources in FAILED_INPUT so you can rerun them once Coles is back.
[0.1.2] - 2026-10-06
Added
Fair charging: every record has isComplete. A product without a readable price that is not shown as unavailable is saved with isComplete: false and is not charged (no product or product-details event). Unavailable products (inStock: false, no price) stay complete and charged.
FAILED_INPUT in the key-value store when anything failed or was incomplete: the original input with all settings kept and the searches, specials, category URLs and product URLs reduced to the ones to retry.
Status message in the form Done: 38 of 40 products saved (...). 2 failed (blocked by Coles). Rerun input saved as FAILED_INPUT.
Monitoring: changePercent (signed, rounded to 0.1; null when the previous price is 0 or missing), lowestPrice, lowestPriceAt and isLowestPrice. Snapshots now store the lowest price and the source of each product. Snapshots from 0.1.1 still load; their stored price is the starting lowest price.
Changed
Monitoring: "removed" products are reported only for the sources the run checked (keyword, category, specials mode, product URL), not for whole chains, so a rerun of a few items no longer marks the rest of the watch list as removed. Old snapshot entries without a source keep the per-chain rule.
Monitoring: a record without a readable price no longer counts as a change and does not overwrite the snapshot.
The Price changes view shows changePercent, lowestPrice and isLowestPrice. priceChangePct is still in every record.
[0.1.1] - 2026-09-29
First public release on Apify Store.
Changed
Pay-per-event prices set for all six tiers as in .actor/pay_per_event.json.
[0.1.0] - 2026-09-29
Added
Coles and Woolworths products in one normalised schema: price, was-price, unit price (normalised measure), promotion type and text, multibuy deals, stock, category path, barcode, store, provenance.
Sources: keyword search, category URLs, product URLs, and the specials catalogue (all or half price) for each chain.
Coles per-store pricing (colesStoreId, store number or store page URL).
Optional Coles barcode enrichment (includeDetails).
Price-change monitoring mode (monitorPriceChanges, monitorKey): outputs new, changed and removed products since the previous run, with the price delta.
Dataset views: Products, Specials, Price changes. A SUMMARY record in the key-value store lists empty sources, not-found items, failures and site-change errors.
Pay-per-event pricing: actor-start, product, product-details, product-checked, with FREE to DIAMOND tiers.
Output schema linking the three dataset views and the SUMMARY record.
Woolworths requests use Apify datacenter proxy so prices stay on Woolworths' national default online store (stable monitoring). Automatic fallback to the main proxy if datacenter IPs are blocked.
A run without any keyword, URL or specials runs the prefilled example (milk, 10 per chain) instead of failing.