Coles & Woolworths Scraper: Aldi & IGA Supermarket Prices AU
Pricing
from $0.35 / 1,000 products
Coles & Woolworths Scraper: Aldi & IGA Supermarket Prices AU
Coles, Woolworths, Aldi and IGA prices across Australia in one table: half-price and multibuy specials, keyword search, full catalog, store prices, barcodes and a changed-only price watcher. No login, no browser.
Pricing
from $0.35 / 1,000 products
Rating
0.0
(0)
Developer
Jay Novello
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
5
Monthly active users
8 hours ago
Last modified
Categories
Features
Share
Coles, Woolworths, Aldi & IGA Prices Scraper (Australia)
Australian supermarket prices from Coles, Woolworths, Aldi and IGA in one table: this week's half-price and multibuy specials, keyword search, whole categories or the full catalog, store-specific prices, barcodes and nutrition, and a price watcher that outputs only what changed. No login, no browser, no API key.
Try it: Click Start with the default input (this week's half-price specials at Coles, Woolworths and IGA, 20 per retailer): 60 products in 15 seconds for about $0.03 (run on October 21, 2026).
| Retailer | Product | Size | Now | Was | Saving | Price for |
|---|---|---|---|---|---|---|
| Coles | I&J Frozen Raw Prawns Tail Off | 500g | $12.00 | $24.00 | $12.00 | Coles Online Hub Store Ocado - Melbourne |
| Coles | Ostelin Vitamin D | 250 pack | $24.75 | $49.50 | $24.75 | Coles Online Hub Store Ocado - Melbourne |
| Woolworths | Vanish Gold Pro Turbo Stain Remover Powder | 1kg | $11.00 | $22.00 | $11.00 | national online price |
| Woolworths | Coca-Cola Zero Sugar Soft Drink Mini Bottles | 300mL x 12 pack | $12.00 | $24.00 | $12.00 | national online price |
| IGA | Bulla Creamy Classics Boysenberry Sundae Cone | 4 pack | $6.25 | $12.50 | $6.25 | Ashcroft's IGA Erskine Park |
Every row carries price, wasPrice, saving, specialType, promoText, unitPrice and unitOfMeasure in the same format for all four retailers, so a mixed table sorts directly.
Pricing: $0.50 per 1,000 products, plus $1.00 per 1,000 for the optional product-details add-on and $0.50 per 1,000 store or category rows; $0.00005 per run start. Platform compute, proxy and storage are included. Failed runs, error rows and products skipped by the watcher are not charged.
Weekly specials watch
Specials at Coles, Woolworths and IGA change on Wednesdays. To get only the products that went on special, came off special or changed price since last week, turn on Only changed prices, name the watcher and schedule the input weekly:
{"mode": "specials", "specialsType": "halfPrice", "retailers": ["woolworths"], "maxItemsPerQuery": 0,"onlyChanged": true, "watcherName": "woolworths-half-price"}
The first run outputs every special as new and sets the baseline. Each later run outputs only rows with a changeType (special-started, special-ended, price-down, price-up, new, stock changes) together with previousPrice and priceChange; unchanged products are skipped and not charged. Use maxItemsPerQuery: 0 so the whole specials list is read each time, and keep the retailers and store IDs the same from run to run.
Real example: search mode
Run on Apify on October 14, 2026 (07:53 UTC). Search mode, keyword full cream milk 2l, all four retailers, 6 products each, Coles store 357 (North Perth), product details on. It finished in 23 seconds and returned 24 products, every one with a barcode or nutrition data where the retailer publishes it.
| Retailer | # | Product | Size | Price | Unit price | Store | Barcode |
|---|---|---|---|---|---|---|---|
| Coles | 1 | Coles Full Cream Milk | 2L | $3.40 | $1.70 per 1L | Coles North Perth | 9300601186938 |
| Coles | 3 | Masters Full Cream Milk | 2L | $4.30 | $2.15 per 1L | Coles North Perth | 9310232957012 |
| Woolworths | 1 | Woolworths Full Cream Milk | 2L | $3.40 | $1.70 per 1L | national online price | 9300633556143 |
| Woolworths | 6 | Pauls Zymil Lactose Free Full Cream Milk | 2L | $5.95 (was $6.90, price drop) | $2.98 per 1L | national online price | 9310036048985 |
| Aldi | 1 | Full Cream Milk 2L | 2L | $3.39 | $1.70 per 1L | national shelf price | (Aldi publishes none) |
| Aldi | 4 | Lactose Free Full Cream Milk 2L | 2L | $4.79 | $2.40 per 1L | national shelf price | (Aldi publishes none) |
| IGA | 3 | Pauls Full Cream Milk | 1L | $2.50 (was $2.60) | $2.50 per 1L | Ashcroft's IGA Erskine Park | (IGA publishes none) |
| IGA | 4 | A2 Milk Full Cream Milk | 3L | $10.50 | $3.50 per 1L | Ashcroft's IGA Erskine Park | (IGA publishes none) |
House-brand 2L milk came out within a cent everywhere: Aldi $3.39, Coles $3.40 and Woolworths $3.40.
Other runs on the same day:
- Half-price specials at Coles, Woolworths and IGA, 200 each: 600 products in 46 seconds. The deepest cuts were a Philips Sonicare toothbrush at Coles ($35, was $70) and an Oral-B Pro Expert at Woolworths ($59.50, was $119).
- Load test: the whole Dairy, Eggs & Fridge category at Coles (2,265 products) and Woolworths (1,726) in 3 minutes 34 seconds, 103 requests, no blocks.
- Price watcher:
milkandtim tamsat all four retailers. The first run output 138 products markednew; the second run a few minutes later output nothing and skipped 138 unchanged products. Unchanged products incur no product events; the $0.00005 start event still applies.
Real before/after: October 14 to October 21
The separate readme-demo baseline from October 14, 2026, 19:18 UTC held 118 products. Rerunning its original input on October 21, 07:19 UTC returned 41 rows in 18.9 seconds: 25 changes to previously observed products and 16 newly observed products, with 76 unchanged products skipped and no error rows. Build 0.1.7, run NCoOp4GexCNgQsTnL.
| Product | Price scope | Oct 14 (AUD) | Oct 21 (AUD) | changeType |
|---|---|---|---|---|
Devondale High Protein Full Cream Milk 1L, Coles 1329781 | Coles store 7674 | $2.50 | $2.00 | special-started |
Arnott's Tim Tam Original Chocolate Biscuits 200g, Woolworths 36066 | National online | $4.50 | $6.00 | special-ended |
Milk Chocolate Block 180g, Aldi 000000000000398417 | National shelf | $3.49 | $2.99 | price-down |
Arnott's Tim Tam Chocolate Original 200g, IGA 308953 | IGA store 32600 | $3.00 | $5.70 | price-up |
{"mode":"search","queries":["milk","tim tams"],"maxItemsPerQuery":20,"onlyChanged":true,"watcherName":"readme-demo"}
Use your own watcher name for a new workflow. Its first run establishes your baseline; it cannot recreate this historical comparison. Keep retailer and store settings consistent. These search windows can rotate: new means newly observed by this watcher, and missing products do not establish delisting or stock loss. Changes happened between the two observations, not necessarily on Wednesday. Coles and IGA examples apply only to the stated stores.
At list prices, 41 product events plus one start event total $0.02055. An unchanged run still incurs the $0.00005 start event. This was an owner validation run, not evidence of paid customer usage. Each exported change includes its source URL, observation timestamp, previousPrice, price and priceChange.
One full row from the search run (nutrition cut to 3 of 10 lines):
{"type": "product","retailer": "coles","productId": "439693","name": "Coles Full Cream Milk","brand": "Coles","size": "2L","price": 3.4,"wasPrice": null,"saving": null,"isOnSpecial": false,"specialType": null,"promoText": null,"unitPrice": 1.7,"unitOfMeasure": "1L","unitPriceText": "$1.70 per 1L","inStock": true,"barcode": "9300601186938","categories": ["Dairy, Eggs & Fridge", "Milk", "Full Cream Milk"],"imageUrl": "https://cdn.productimages.coles.com.au/productimages/4/439693.jpg","url": "https://www.coles.com.au/product/coles-full-cream-milk-2l-439693","storeId": "357","storeName": "Coles North Perth","priceScope": "store","currency": "AUD","searchQuery": "full cream milk 2l","position": 1,"details": {"barcode": "9300601186938","description": "Coles Australian Dairy Full Cream Milk, 2L. Fresh full cream milk sourced from Australian farmers for wholesome goodness. Better together with Australian Farmers.","ingredients": "Homogenised and Pasteurised Full Cream Milk","allergens": "Contains Milk","nutrition": [{"name": "Energy (kJ)", "per100": "260 kJ", "perServing": "650 kJ"},{"name": "Protein", "per100": "3.5 g", "perServing": "8.75 g"},{"name": "Sugars - Total", "per100": "4.4 g", "perServing": "11 g"}],"servingSize": "250mL","servingsPerPack": "8.00","countryOfOrigin": "Australian Milk"},"scrapedAt": "2026-10-14T07:53:52Z"}
What you can do
| Mode | Input | Output |
|---|---|---|
specials | all, halfPrice, multibuy or onlineOnly | Products on special with was price, saving and promo text |
search | Keywords, e.g. milk, tim tams, nappies size 4 | Products in each retailer's own ranking (position) |
category | Category names, IDs or URLs, or all for the full catalog | Every product in the category, de-duplicated |
products | Product URLs or IDs (coles:439693, woolworths:888140, Woolworths barcodes) | A price check of your watchlist, in input order |
categories | Nothing | Each retailer's category tree with IDs and product counts |
stores | A postcode or suburb | Nearby stores with store IDs for store pricing |
Turn on Only changed prices with any mode and schedule the same input to get a feed of price drops, price rises, specials that started or ended, and stock changes. Each row then carries changeType, previousPrice and priceChange. Unchanged products are not output and not charged.
Retailer coverage
| Coles | Woolworths | Aldi | IGA | |
|---|---|---|---|---|
| Prices | Per store (default: Coles online store 7674, Melbourne) | National online price | National shelf price | Per store (default: 32600, Erskine Park NSW) |
Full catalog (all) | ~31,900 lines | 22,000+ lines (Everyday Market excluded) | ~3,250 lines incl. Special Buys | ~13,800 lines per store |
| Specials | half price, multibuy, online only, price drops | half price, multibuy, online only, lower shelf price | Special Buys (with on-sale date), Super Savers, Lower Prices | half price and % off, with start and end dates |
| Barcode | With product details, or in products mode | Always | Not published | Not published |
| Details | Ingredients, allergens, nutrition, country of origin | Ingredients, allergens, nutrition, health star rating | Description, ingredients, allergens | Ingredients, nutrition, allergens, country of origin |
| Stock | Yes | Yes | Not published | Yes |
| Store finder | Postcode or suburb | Postcode or suburb | Postcode or suburb | Postcode, suburb, state or all 536 stores |
Input examples
Every half-price product at Coles and Woolworths, unlimited:
{"mode": "specials", "specialsType": "halfPrice", "retailers": ["coles", "woolworths"], "maxItemsPerQuery": 0}
Compare keywords across all four supermarkets:
{"mode": "search", "queries": ["milk", "bread", "eggs"], "maxItemsPerQuery": 50}
Daily price-change feed for a full category at one Coles store:
{"mode": "category", "retailers": ["coles"], "categories": ["Dairy, Eggs & Fridge"], "colesStoreId": "357","maxItemsPerQuery": 0, "onlyChanged": true, "watcherName": "coles-357-dairy"}
Watchlist with barcodes and nutrition:
{"mode": "products", "includeDetails": true,"products": ["https://www.coles.com.au/product/coles-full-cream-milk-2l-439693", "woolworths:888140", "iga:726347"]}
Pricing
Pay per event. Platform usage (compute, proxy, storage) is included.
| Event | Price | When |
|---|---|---|
| Product | $0.50 per 1,000 | Each product row output |
| Product details add-on | $1.00 per 1,000 | Only with Include product details, and only when details were found |
| Store or category | $0.50 per 1,000 | Each row in stores or categories mode |
| Actor start | $0.00005 | Once per run |
Examples: 1,000 products from a search or specials list cost $0.50. The whole Coles catalog (about 31,900 products) costs about $16. A weekly watcher over 2,000 specials where 150 change costs $0.08 a week. Error rows and blocked requests are never charged.
Accuracy and limits
- Store prices. Coles and IGA prices depend on the store. Every row says which store the price is for (
storeId,storeName,priceScope). Woolworths and Aldi show one national online or shelf price to anonymous visitors, so their rows saypriceScope: "national". Woolworths store-level prices need a login and are not collected. - Small Coles stores. Coles Central and Coles Local Express stores have no online range; choosing one returns an uncharged error row. Pick a full-size supermarket from stores mode.
- Aldi sells in store only, so its rows have no stock flag, and Aldi publishes no barcodes. Aldi has no half-price, multibuy or online-only specials; those types return an uncharged error row for Aldi, which is why the default input lists Coles, Woolworths and IGA. Use
specialsType: "all"to include Aldi's Special Buys and price drops. - Coles "other" specials. Coles lists some products as specials without a previous price; they come out with
specialType: "other"and nowasPrice. - Sponsored products appear in Coles and Woolworths results as they do on the website; each product appears once per list.
- Woolworths Everyday Market (over a million third-party listings) is left out unless you turn on Include Woolworths Everyday Market.
- Proxy. Coles blocks most direct connections from cloud servers, so keep the default Apify proxy on. When a site refuses repeatedly, the run stops that list with an error row instead of hanging, and keeps what was already delivered.
- Prices change during the day and specials usually change on Wednesdays.
scrapedAtis the time each row was read.
FAQ
Do I need an account at the supermarkets? No. The actor reads the same public prices any visitor sees, without a login.
How do I get prices for my local store? Run mode stores with your postcode, copy the Coles or IGA storeId, and put it in Coles store ID or IGA store ID.
How do I match the same product across retailers? Use barcode: Woolworths always has it and Coles has it with product details or in products mode. Otherwise match on brand, name and size.
Can I get a price history? Schedule the actor with Only changed prices on. Each run outputs only the changes, so the datasets together form the history. Use a different Watcher name per schedule.
Can I call it from code or an AI agent? Yes. For example:
curl -X POST "https://api.apify.com/v2/acts/varnmill~au-supermarket-prices/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "specials", "specialsType": "halfPrice", "retailers": ["woolworths"], "maxItemsPerQuery": 50}'
What if a search finds nothing or a product id is unknown? The run still succeeds and the dataset gets an uncharged error row that explains why, so schedules and integrations keep running. A run fails only when a supermarket blocks or errors and nothing comes back.
Do I have to set mode? Not if you fill only one kind of input. products, categories or location on their own select that mode, and product URLs typed into queries are price-checked as products. Common field names from other scrapers also work: query, keyword(s), searchTerms, productUrls, startUrls, category, postcode.
Something is wrong or missing? Open an issue on the actor page. Issues are checked daily.
Watcher scheduling: use a separate watcherName for each independent workflow and keep its filters/location consistent. Runs using the same name wait up to 50 seconds for the previous run; if it is still busy, retry after it finishes. Local and cloud baselines are separate. A failed or interrupted delivery can appear again on retry, so deduplicate downstream by product or observation time. Existing names keep their baselines, but a baseline previously shared by colliding names cannot be disentangled automatically.
Cleaner product-name searches
For procurement and restocking workflows, set searchMatch to allWords to require every query word in the product name or brand. Unrelated retailer recommendations are filtered before product/detail charges and watcher updates. The default retailer setting keeps the retailer's original results.
{"mode":"search","retailers":["coles","woolworths","aldi"],"queries":["kinder bueno"],"searchMatch":"allWords","maxItemsPerQuery":12,"maxItems":36,"includeDetails":false,"onlyChanged":false}
The filter ignores case and punctuation but uses whole words: no synonyms, stemming, variant equivalence or pack-size validation. A match may still be a different format (for example ice cream versus a chocolate bar); verify variant, quantity and unit before comparing prices. maxItemsPerQuery limits source products before filtering, so twelve fetched products can yield fewer matches. No extra pages are fetched to fill that limit. Zero matches describe this fetched window, not the entire retailer catalogue. Use product IDs for known exact listings and a new watcher name when changing matching settings. Full snapshots are useful when you need a positive observation on every check; missing products are not proof of removal or stock loss.
Optional pack-size evidence
Set "includePackEvidence": true to add packEvidence to delivered product rows. This uses the retailer's explicit size field, with no extra source requests or billable events. It works with search, specials, category and product lookup. The default is off; unchanged watcher rows remain skipped. Enabling this option does not backfill unchanged products: run a snapshot with onlyChanged: false if you need their evidence.
The output includes the original size, status (explicit or unknown), dimension, quantity, unit and pricePerBaseUnit in AUD per g, mL or each. For example, an explicit 6 x 330mL means 1,980 mL. A 4 pack establishes a count of four, not a volume. Mixed strings such as 204g 10 pack remain unknown because the weight's scope is ambiguous. Unknown quantities and unit costs are null, never zero.
Evidence is not product matching: productEquivalenceEstablished is always false. Product names, nutrition, concentration, pack variants, store scope and retailer promotions still need review. We never infer quantity from product names, unit prices or assumed density. The retailer's original size, unitPrice and unitOfMeasure remain available unchanged.
{"mode":"search","retailers":["coles","woolworths"],"queries":["kinder bueno"],"searchMatch":"allWords","includePackEvidence":true,"maxItemsPerQuery":12,"maxItems":24,"includeDetails":false,"onlyChanged":false}
Search coverage for restocking integrations
Search runs save SEARCH-OUTCOMES in the run's default key-value store (also linked under Output). This report has no event fee and adds no rows to the product dataset. Join a report entry to products using retailer and searchQuery; product IDs and source URLs stay on the product rows.
Each entry counts source products observed, literal matches, filtered products, delivered products and unchanged products. deliveredProducts counts successful product deliveries in this attempt; source totals and matched totals are not billed-row counts. An unchanged-only run can observe matching products and deliver zero rows without being an empty search.
coverage: boundedmeans the source iterator ended within the configured window. It does not prove exhaustive search;sourceCompleteremainsnull.coverage: truncatedmeans processing reachedmaxItemsPerQuery, the sharedmaxItems, or the spending limit. More source matches may exist; this is not proof that they do.coverage: unknowncovers source/start failures, cancellation and queries not reached. Partial delivered products remain valid observations.stopReasondistinguishes these cases.outcome: empty_source_windowmeans no product was observed in a normally ended source window.no_matches_in_windowmeans source products were observed but none passed the literal filter. Neither means the retailer has no matching stock.
The report is checkpointed before fetching and after each query, not after every product. pending, running or interrupted entries are incomplete; after a hard stop, counts can lag the dataset. Use the dataset for actual delivered rows. A restarted run writes a report for that attempt, not an aggregate over previous attempts. No report is created for non-search modes.
Keep full snapshots when your application needs them, and treat missing products as unknown. This report never declares stock loss, removal, equivalent pack sizes or complete retailer coverage. Prices and existing watcher behavior are unchanged.
Changelog
-
0.1.12 (November 10, 2026): optional
includePackEvidenceadds explicit pack quantities and AUD per base unit to delivered products. Ambiguous sizes remain unknown. No added requests, events or automatic product matching. -
2026-11-09: Search runs now save an uncharged
SEARCH-OUTCOMESreport with per-retailer/query observed, filtered, delivered and unchanged counts, source errors and explicit result-window limits. Missing products do not establish stock loss. -
2026-11-09: Optional
searchMatch: "allWords"filters unrelated recommendations before charges or watcher updates. Default retailer behavior and prices are unchanged. -
0.1.8 (2026-10-21): Default input is now this week's half-price specials at Coles, Woolworths and IGA (60 products in 15 seconds). README restructured around the weekly specials watch. No code changes.
-
0.1.7 (2026-10-19): Watcher runs with the same name now wait for each other before loading and saving their baseline. Losing the lock stops the run without saving stale state. Cancelled runs keep only confirmed output in watcher state.
-
0.1.6 (2026-10-19): Spending-limit fix. When your maximum charge per run runs out, a product and its details add-on are charged together or not at all, and only delivered products are counted and remembered by the watcher, so a product cut off by the limit shows up again on the next run. Watcher names with spaces or other special characters now get their own record (existing watchers carry over); state is merged before saving. Full overlap serialization was added in 0.1.7.
-
0.1.5 (2026-10-17): Runs no longer fail when a search finds nothing or a product id is unknown (uncharged error rows instead). The mode is now picked from the filled fields, and common field names from other scrapers (
query,productUrls,startUrls,postcodeand more) are accepted. An unusable proxy group now falls back to the datacenter proxy. -
0.1 (2026-10-14): First release. Coles, Woolworths, Aldi and IGA; search, category and full catalog, specials, products, categories and stores modes; store pricing for Coles and IGA; product details add-on; changed-only price watcher.