Australia Grocery Prices Scraper: Coles, Woolworths & ALDI
Pricing
from $0.64 / 1,000 products
Australia Grocery Prices Scraper: Coles, Woolworths & ALDI
Coles, Woolworths and ALDI prices by search term or category/specials page: price, was-price, specials, multibuys, unit price per kg/L, size, brand, barcode, stock, image. Compare mode finds the same product at each chain and marks the cheapest. Price-change monitoring.
Pricing
from $0.64 / 1,000 products
Rating
0.0
(0)
Developer
Amit Aviv
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Get current supermarket prices from Coles, Woolworths and ALDI Australia in one dataset, by search term or by category and specials page: price, was-price, specials and multibuys, unit price per kg or litre, pack size, brand, barcode (Woolworths), availability, category, image and product link. A compare mode finds the same product at two or three of the chains and marks the cheapest, and a price-change mode delivers only what is new or re-priced since your last run. Plain HTTP, no browser; you pay for delivered products (and, in price monitoring, a small fee per product checked), and a run that delivers nothing because of an error ends as Failed, never as a green empty run (in price monitoring, a run whose other searches were checked ends as Succeeded and names the search that failed).
What you get
- Retailer, product id, name, brand, pack size
- Price, was-price and saving, special flag, promotion text ("2 for $10.00", "Save $0.50", "Half price", "Pick any 2 for $9"), multibuy quantity and price
- Unit price as the shop shows it ("$1.65 / 1L") plus the same restated per kg, per litre or per each, so products of different sizes and shops compare directly
- Availability (Coles, Woolworths), barcode/GTIN (Woolworths), category path, product URL, image URL
- Compare mode: match group, which retailers sell it, cheapest retailer(s) and price,
isCheapest,priceAboveCheapest - Price-change mode:
changeType(new, price-down, price-up, price-added, promotion-change),previousPrice,priceChange - One record per product per retailer, as JSON, CSV or Excel, or through the API, and a run summary (
OUTPUT_SUMMARYin the run's key-value store): what was requested, delivered and charged, which inputs failed or were ignored, and why the run stopped.
What it does not return: reviews or ratings, nutrition panels and ingredients, store-specific prices (each site's default online price is returned), anything behind a login, and no personal data of any kind.
How to use
- Type what you want to price in Search terms (e.g.
milk,vegemite,coca cola), or paste a category or specials page from one of the sites into Category or specials URLs. - Pick the Retailers (all three by default) and set Max products per search term per retailer.
- Optional: tick Compare mode or Only new or re-priced products.
- Press Start, then download the results from the Output tab or read them from the API.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
searchTerms | list of text | none | Products to search for. Each term is searched at every selected retailer. Search-result URLs of the three sites are accepted too. |
retailers | list | coles, woolworths, aldi | Which supermarkets to search. |
categoryUrls | list of URLs | none | Coles /browse/<aisle>/... and /on-special; Woolworths /shop/browse/... (the main specials page /shop/browse/specials is read as its sub-pages: half price, lower shelf price, buy more save more, …); ALDI /products/.../k/<number>. Each URL goes to its own retailer. |
maxItemsPerQuery | number | 100 | Stop after this many products for each search term at each retailer, and for each URL (across all sub-pages of the Woolworths specials page). |
includeMarketplace | yes/no | no | Woolworths also lists third-party "Everyday Market" goods; off = Woolworths's own range only. |
compare | yes/no | no | Match the same product across retailers (at least two selected) and mark the cheapest. See "Compare mode". |
compareIncludeUnmatched | yes/no | no | In compare mode, also deliver products found at only one retailer. |
onlyChanges | yes/no | no | Deliver only products that are new to the monitor or whose price or multibuy changed since the last run. See "Price monitoring". |
monitorKey | text | empty | Name of the price-monitoring memory, to keep two schedules apart. |
proxyConfiguration | proxy | Apify residential, Australia | Coles is read through this proxy from the first request. Woolworths and ALDI are asked directly first and switch to the proxy only if that shop refuses a request. Keep the default. |
{"searchTerms": ["weet-bix", "coca cola", "tim tam"],"compare": true,"maxItemsPerQuery": 60}
Example result
From run C5GX2geDauf8MONMA (compare mode, the input above) on 2026-10-14, unedited:
{"id": "aldi:000000000000366359","retailer": "aldi","productId": "000000000000366359","name": "Tim Tam Original Chocolate Biscuits 200g","brand": "ARNOTT'S","size": "200 g","price": 4.49,"wasPrice": null,"savings": null,"isOnSpecial": false,"promotion": null,"multibuyQuantity": null,"multibuyPrice": null,"unitPrice": 2.25,"unitPriceMeasure": "100g","unitPriceText": "$2.25 per 100 g","pricePerStandardUnit": 22.5,"standardUnit": "kg","available": null,"barcode": null,"category": "Pantry > Biscuit & Cookies","url": "https://www.aldi.com.au/product/arnott-s-tim-tam-original-chocolate-biscuits-200g-000000000000366359","imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/500/cec1353f-da14-4739-9fa5-8865ebb0b0c9/arnott-s-tim-tam-original-chocolate-biscuits-200g","marketplaceSeller": null,"query": "tim tam","queryType": "keyword","changeType": null,"previousPrice": null,"priceChange": null,"matchGroup": "coles:329607+woolworths:36066+aldi:000000000000366359","matchedRetailers": ["coles", "woolworths", "aldi"],"cheapestRetailer": "aldi","cheapestRetailers": ["aldi"],"cheapestPrice": 4.49,"isCheapest": true,"priceAboveCheapest": 0,"scrapedAt": "2026-10-14T17:44:52.368Z"}
In the same group, Coles had this pack at $6.00 (priceAboveCheapest 1.51) and Woolworths at $4.50 (0.01).
| Field | Meaning |
|---|---|
id | retailer:productId, stable between runs. |
price, wasPrice, savings | AUD. wasPrice only when the shop shows a higher previous price. |
isOnSpecial, promotion | The shop's special flag, or a was-price or multibuy; promotion is the shop's own deal wording (tags that are not deals, such as "Designs May Vary", are left out). |
multibuyQuantity, multibuyPrice | "2 for $10" = 2 and 10. |
unitPrice, unitPriceMeasure, unitPriceText | The unit price exactly as the shop shows it. |
pricePerStandardUnit, standardUnit | The shop's unit price restated per kg, L or each (e.g. $2.25 per 100 g = 22.5 per kg). |
available | Coles and Woolworths: can be ordered online. ALDI sells in store only and publishes no stock: null. |
barcode | GTIN, Woolworths only. |
query, queryType | The search term or URL that found the product. |
cheapestRetailer, cheapestRetailers | Compare mode: the retailer with the lowest shelf price; on a tie cheapestRetailer is null and cheapestRetailers lists all tied retailers. |
changeType, previousPrice, priceChange | Price monitoring: what changed since this monitor last delivered the product. |
Fields a shop does not provide for a product are null, never missing.
Pricing
Pay per event. You pay for what is delivered, not for time or memory.
| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| Actor start (once per run, at the default 512 MB) | $0.0036 | $0.003 | $0.0027 | $0.0024 |
| Product delivered | $0.00096 | $0.0008 | $0.00072 | $0.00064 |
| Product checked, unchanged (price monitoring only) | $0.00012 | $0.0001 | $0.00009 | $0.00008 |
Worked examples (Bronze):
-
3 search terms at all three retailers, up to 100 each, delivers at most 900 products: 900 × $0.0008 + $0.003 = $0.723.
-
A daily price-monitoring run that reads 2,000 products and finds 20 changed: 20 × $0.0008 + 1,980 × $0.0001 + $0.003 = $0.217. A run with no change: 2,000 × $0.0001 + $0.003 = $0.203. Reading costs the same whether or not a price moved, which is what the small "checked" event pays for; it is an eighth of the product price.
-
Products that were not delivered are not charged as products. A product returned by two of your searches is delivered and charged once per run; in price monitoring a product read by two searches is charged as checked once.
-
In compare mode each product row is one product event; products left out (found at only one retailer) are not charged.
-
The maximum total charge you set for a run is respected: the actor stops before it would go over, keeps what was delivered, and says so (run
qEenayPHN94GeMlUB: limit $0.0086 = start + 7 products, 7 delivered, Succeeded).
Compare mode
For each search term the actor reads every selected retailer (at least two), then joins products that have:
- the same brand ("a2" matches "a2 Milk"; a shop's own label never matches another shop's), or one shop's brand opening the other shop's product name (Coles files Weet-Bix under "Sanitarium", Woolworths under "Weet-Bix"),
- the same pack size after normalisation (3L = 3 l = 3000 mL; "6 x 375mL" = 2.25 L; weighed goods are never matched),
- names that are mostly the same words once brand, size and filler words are removed.
Each group holds at most one product per retailer. The comparison is on shelf price; multibuys are shown but not used to pick the cheapest. When two retailers share the lowest price (common between Coles and Woolworths), both rows have isCheapest: true, cheapestRetailers lists both and cheapestRetailer is null.
Matching is a heuristic. In run C5GX2geDauf8MONMA it formed 38 groups for "weet-bix", "coca cola" and "tim tam" (13 Weet-Bix pairs at Coles and Woolworths, Tim Tam Original at all three; 21 of the 38 were ties), and we found no wrong pair on reading them. ALDI names are short ("Nutella 400g", "Weet-Bix 375g"), so ALDI products are often left unmatched, and a group without ALDI can name Coles or Woolworths cheapest when ALDI is cheaper: in a review run ALDI's Nutella 400g at $6.69 stayed unmatched while Coles and Woolworths at $6.70 were marked cheapest. Tick also deliver products found at only one retailer to see ALDI's prices beside the groups, and give the output a glance before you publish it.
Price monitoring: only new or re-priced products
- Turn on Only new or re-priced products, set Max products per search term per retailer above the size of the listing, and save the input as a task.
- Schedule the task (daily suits supermarket prices).
- The first run delivers everything it finds with
changeType: "new". Every later run delivers and charges as products only the ones whose price or multibuy changed (price-down,price-up,promotion-change,price-added, withpreviousPriceandpriceChange) and the ones this monitor has not delivered before (new). Every other product it reads is charged as one "product checked" event. A run with no change ends as Succeeded with0 new or re-priced products … — N unchanged products checked.
Good to know:
newmeans new to this monitor, not newly listed by the shop. A product that sat beyond the maximum in earlier runs arrives asnewonce the listing moves it up, so keep the maximum above the listing size.- Searches that overlap (e.g. "milk" and "full cream milk") share products; each product is delivered once per run and every search remembers it (runs
FuetbcEvQ74hV78XVthenAIUafvmLoiA3eCEaD: 90 delivered, then 0 delivered and 90 checked, the 8 shared products included once). - A product that has no price at the moment (Woolworths shows none while it cannot sell it, and this flickers from minute to minute) is not reported; its last price is kept, and the next real price is compared with it.
- Products that disappear from a search are not reported.
Verified live: seed run sUnd0YbhUV8TTQTdJ delivered 1,866 products (Coles and Woolworths, "chocolate" and "cheese", max 500); DGhq49brUYcAs1hMt 3 minutes later delivered 255 (240 Woolworths products new because they sat beyond the first run's maximum of 500, 1 Coles product that was not in the listing 3 minutes earlier, 2 real price-up: Darrell Lea half price ended, $3.00 → $4.50) and checked 1,782 unchanged. That run was built before the no-price rule above, so it also reported 12 Woolworths availability flickers.
The memory is a key-value store named australia-grocery-prices-scraper-monitor in your own account (one record per retailer, search and monitor name, up to 10,000 products each). Delete it or change Monitor name to start over.
Reliability and failure behaviour
| What happened | Run status | Status message |
|---|---|---|
| Products delivered | Succeeded | Scraped 60 products from 3 queries |
| No shop has products for your search | Succeeded | 0 results: Coles / Woolworths / ALDI has no products for these 2 queries |
| One retailer failed, others worked | Succeeded | Scraped 5 products from 3 queries — 1 of 3 queries failed ("Coles: milk": Coles blocked the request: …) |
| Price monitoring: one retailer failed, the others were checked | Succeeded | 0 new or re-priced products in 4 monitored queries — 33 unchanged products checked (product-checked events); 2 of 4 queries failed (…) |
| Nothing delivered because of errors or blocking | Failed | No products delivered: Coles blocked every attempt; try again later. No products were charged (the start fee applies). In price monitoring the products checked before the failure are named: (the start fee and 48 product-checked events apply) |
| Input the actor cannot use | Failed, within seconds | Nothing to do: the input has no "searchTerms". …, Compare mode needs at least two retailers, … |
| Maximum charge reached | Succeeded | … — stopped at the maximum charge set for this run |
| Run timeout close | Succeeded | … — stopped just before the run timeout; raise the timeout to get the rest |
- Requests are retried up to 3 times with increasing pauses on network errors, refusals, HTTP 429 and 5xx. After a network error or a refusal the next attempt goes out on a fresh proxy session (a new Australian residential address). Any Coles answer without its product data counts as a refusal, whatever the page looks like. Only when all attempts fail is that search reported as failed; the other retailers carry on.
- Products are saved page by page. A run that is aborted, times out or is resurrected keeps what was delivered and never delivers or charges the same product twice (the platform charges the start fee again when a run is resurrected).
- Measured on 2026-10-14 over 54 test runs: in every one the products charged equalled the products delivered, with no duplicates. Larger runs:
HBKbETwT19ge9GcrZdelivered 2,425 products from 9 searches in about 6 minutes,sUnd0YbhUV8TTQTdJ1,866 in 2.5 minutes,mBG0pSTdYOu9a8EKn964 (Coles and ALDI) in 39 seconds. - Version 0.3 read Coles in 15 of 15 runs with the default proxy, spread over 25 minutes, with no failed request. With the proxy turned off, Coles refused 20 requests in a row from the cloud server: run
ZAczuiONGfCtf3vs9retried each one, named the 5 failed searches, and kept the 45 products it had read before the refusals.
Limits
- Results are each shop's own search results in the shop's order. Broad words bring loosely related products further down (ALDI's "chocolate" ends with tea and coffee); Woolworths answers even made-up words with its nearest matches, so a Woolworths search is rarely empty.
- Coles shows at most 100 pages (about 4,800 products) of one listing.
- Woolworths mixes third-party "Everyday Market" items into its searches, not only at the end. Without
includeMarketplace, a Woolworths search ends when it has met as many own-range products as Woolworths counts for it, or, for searches whose count is capped at 10,000 results, after 10 pages in a row with nothing else; the run message then says that more may follow. Live: "cheese" read all 36 pages and delivered 666 products; "coffee" stopped at page 29 with 413 (runGigR6tGgXeXuzivkH); a separate scan of "coffee" pages 30-77 found 5 more own-range products. - Prices are each site's default online prices; Coles and Woolworths prices can differ by store and state.
- Speed: about 400 products a minute (48 per Coles page, 36 per Woolworths page, 60 per ALDI page, a few seconds per page).
- Australia only: coles.com.au, woolworths.com.au, aldi.com.au.
FAQ
Do I need a proxy? Keep the default (Apify residential, Australia); the proxy traffic is included in the price. Coles refuses most requests from cloud servers, so Coles is always read through the proxy. Woolworths and ALDI are asked directly first and move to the proxy only if they refuse a request. With the proxy turned off, every request goes out directly and refused ones are only retried directly, so Coles often fails.
Why are some Woolworths products missing a price? They are unavailable online at the moment; price is null and available is false.
Can I run it from code? Yes: the API, the Apify clients for JavaScript and Python, Make, Zapier, n8n. The Output tab shows the URLs.
What happens when a site changes? Runs fail loudly instead of returning empty data; report the run id under Issues.
Legal and responsible use
This actor collects product and price information that Coles, Woolworths and ALDI show publicly on their websites without a login. It returns no personal data: no reviews, no reviewer names, no customer information. For Woolworths marketplace items (off by default) it returns the selling company's trading name. It is an independent tool, not affiliated with or endorsed by Coles, Woolworths or ALDI.
You are responsible for how you use the data: respect the sites' terms of use, trade marks, copyright and database rights, and the law in your country. Run it at a modest pace, and do not present scraped prices as an official price list of the retailers. If you are unsure, ask a lawyer before you build on it.
Related actors
Other actors by the same developer:
- SEEK Jobs Scraper: job ads from seek.com.au and seek.co.nz with salary, work type and classification, to follow hiring by Australian supermarkets, food brands and suppliers alongside their prices.
- Company Hiring Tracker: open jobs per company and the roles opened or closed since your last run, for consumer brands and retail companies whose jobs are on a supported job board (Greenhouse, Lever, Ashby, Workday and others).
- TheFork Restaurants Scraper: average price per person, rating and discounts of restaurants on twelve European TheFork sites, if your food-price research goes beyond Australian supermarkets.
Changelog
- 2026-10-14 0.3: Coles is read through the residential proxy from the first request, and any Coles answer without its product data counts as a refusal and is retried on a fresh proxy session (before, an unrecognised Coles page failed the search at once). A refusal by one shop no longer moves the other shops to the proxy. A price-monitoring run whose other searches were checked ends as Succeeded and names the failed one; a failed run's message counts the product-checked events charged.
- 2026-10-14 0.2: price monitoring charges a small event per unchanged product checked; overlapping monitored searches no longer re-deliver shared products; unavailable (no price) products are not reported as changes. Compare mode matches maker and product brands (Weet-Bix) and names ties with
cheapestRetailers. Woolworths searches no longer stop early on marketplace stretches; the main specials page is read as its sub-pages. Search words with a dot ("1.25L") work; the Coles /browse landing page is refused with a hint. - 2026-10-14 0.1: first version: search terms and category URLs for Coles, Woolworths and ALDI; compare mode; price monitoring.
Support
Open an issue on the actor's Issues tab with the run id.