Coles, Woolworths & Aldi Price Scraper - No Login avatar

Coles, Woolworths & Aldi Price Scraper - No Login

Pricing

from $0.38 / 1,000 product saveds

Go to Apify Store
Coles, Woolworths & Aldi Price Scraper - No Login

Coles, Woolworths & Aldi Price Scraper - No Login

Get Woolworths, Coles and Aldi Australia product prices in one table: current and was price, unit price, specials and promo text, stock, category, barcode and links. Search by keyword, category URL or product URL. No login.

Pricing

from $0.38 / 1,000 product saveds

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Get Coles, Woolworths and Aldi Australia prices in one table. Search by keyword, or paste category or product links. Each row has the price, was price, unit price, special and promo text, stock, brand, size and link. No login or API key. A 20-product Woolworths search costs $0.014 on the Free plan.

Use it to compare supermarket prices, track specials or feed a grocery price app. The smallest run is one keyword in one store, and it finishes in a few seconds.

Coles, Woolworths & Aldi prices: search milk in Woolworths, Coles and Aldi and get price, was price and unit price in one table, then export JSON or CSV

Table of contents

What it does

The Actor reads public product listings on three Australian supermarket websites: Woolworths, Coles and Aldi. It saves one row per product. All three stores use the same fields, so you can sort and compare them in one table.

There are three ways to choose products:

  • Search terms: each term is searched in every store you pick.
  • Category links: a category page from a store website, for example Coles milk.
  • Product links: one product page per link.

You can keep only products on special. Prices are the default online prices of each store. The Actor does not pick a local store or postcode.

Good fit

  • Compare the price of the same product type in Coles, Woolworths and Aldi.
  • Watch specials and was prices for a list of products or a category.
  • Get unit prices (per litre, per kg, per 100 g) for fair comparison.
  • Build price history: schedule the same input and keep each run's rows.

Not a fit

  • Prices for one store branch or postcode, or delivery prices.
  • Nutrition facts, ingredients or product descriptions. They are not collected.
  • Other stores, such as IGA, or stores outside Australia.
  • Login, loyalty prices (Flybuys, Everyday Rewards) or carts.

Quick start

  1. Open the Input tab.
  2. Keep Search terms as milk and Stores as Woolworths (the prefill).
  3. Keep Max products per search or category at 20.
  4. Click Start.
  5. Open the Prices view of the dataset. Check store, name, price and unitPriceText.

Expected result: 20 Woolworths milk products with prices, in about 4 seconds.

Use cases

TaskInputKey fieldsNext step
Compare three supermarketssearchTerms + all three storesstore, price, unitPrice, unitOfMeasureSort by unitPrice in a spreadsheet
Track specials in a categorycategoryUrls + onlyOnSpecial: trueprice, wasPrice, savings, promoTextSchedule a daily run
Watch a fixed product listproductUrlsproductId, price, onSpecial, inStockCompare rows from each run by store + productId
Feed a price app or dashboardAny modename, brand, size, image, urlRead the dataset by API

Input

At least one of searchTerms, categoryUrls or productUrls is required. Duplicate terms and links are removed.

FieldTypeDefault / prefillAllowed valuesWhat it does
searchTermsarray of stringsempty / ["milk"]Up to 50 termsEach term is searched in every store from stores. Example: coffee pods, Tim Tam.
storesarrayall three / ["woolworths"]woolworths, coles, aldiStores for searchTerms. An empty list means all three. It does not change category or product links.
maxItemsinteger50 / 201–1000Products to save for each search term in each store, and for each category link.
onlyOnSpecialbooleanfalsetrue / falseKeep only discounted or multi-buy products in searches and categories. It reads up to 25 store pages per search or category.
categoryUrlsarray of stringsemptyUp to 50 links from the three store websitesProducts from a category page. The store comes from the link.
productUrlsarray of stringsemptyUp to 500 links from the three store websitesOne product per link.

Links from other websites are rejected with a clear message before any page is read.

Settings that work together

  • searchTerms × stores: 2 terms in 3 stores make 6 searches. maxItems applies to each of them, so the run can save up to 6 × maxItems products.
  • onlyOnSpecial with maxItems: the Actor reads pages until it has maxItems specials, the listing ends or 25 pages are read. Each page read is charged, also when it has no specials.
  • onlyOnSpecial does not filter productUrls. Use the onSpecial field instead.
  • The same product in two searches gives two rows, one per search. Within one search each product appears once.

Input examples

Compare milk in all three stores

{"searchTerms":["milk"],"stores":["woolworths","coles","aldi"],"maxItems":20}

Returns up to 60 rows: 20 from each store. Costs about $0.038 on the Free plan.

Specials in a Coles category

{"categoryUrls":["https://www.coles.com.au/browse/dairy-eggs-fridge/milk"],"maxItems":100,"onlyOnSpecial":true}

Returns up to 100 milk products on special. Every row has onSpecial: true, and most have a wasPrice.

A fixed list of products

{"productUrls":["https://www.woolworths.com.au/shop/productdetails/888140","https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288"]}

Returns one row for each product that exists. A product that no longer exists gives no row and is listed as not_found in the run summary.

Output

One dataset row is one product in one store. The Prices view shows the main columns. The All fields view shows all fields. Download JSON, CSV or Excel from the dataset.

Output example

{
"store": "coles",
"productId": "3034279",
"name": "Big M Banana Flavoured Milk | 600mL",
"brand": "Big M",
"size": "600mL",
"price": 3.45,
"wasPrice": 3.9,
"savings": 0.45,
"unitPrice": 5.75,
"unitOfMeasure": "1L",
"unitPriceText": "$5.75 / 1L",
"onSpecial": true,
"promoText": "Save $0.45",
"category": "Dairy, Eggs & Fridge > Milk",
"inStock": false,
"isSponsored": false,
"barcode": null,
"url": "https://www.coles.com.au/product/big-m-banana-flavoured-milk-600ml-3034279",
"image": "https://cdn.productimages.coles.com.au/productimages/3/3034279.jpg",
"currency": "AUD",
"sourceType": "search",
"query": "milk",
"sourceUrl": null,
"position": 15,
"fetchedAt": "2026-10-14T11:29:52.330Z"
}

This is one full row from a milk search in October 2026. null means the store did not show this value. A missing price is null, never 0.

Output fields

FieldTypeCan be null?Meaning
storestringnowoolworths, coles or aldi.
productIdstringnoThe store's own product ID (stockcode or SKU).
namestringnoProduct name as the store shows it.
brandstringyesBrand, such as Big M.
sizestringyesPack size, such as 3L or 800g.
pricenumberyesCurrent price in AUD.
wasPricenumberyesPrice before the discount. Only when the product is on special.
savingsnumberyeswasPrice minus price.
unitPricenumberyesPrice per comparison unit.
unitOfMeasurestringyesComparison unit, such as 1L, 1kg or 100g.
unitPriceTextstringyesUnit price as the store shows it, such as $1.65 / 1L.
onSpecialbooleannotrue when the product is discounted or on a multi-buy offer.
promoTextstringyesOffer text, such as Save $0.45 or Pick any 3 for $7.50.
categorystringyesStore category, such as Dairy, Eggs & Fridge > Milk.
inStockbooleanyesOnline availability. Always null for Aldi, because Aldi does not sell online.
isSponsoredbooleannotrue for a paid (sponsored) position in search results.
barcodestringyesGTIN barcode. Woolworths shows it; Coles and Aldi usually do not.
urlstringnoProduct page link.
imagestringyesProduct image link.
currencystringnoAlways AUD.
sourceTypestringnosearch, category or product: the input that gave this row.
querystringyesThe search term, for search rows.
sourceUrlstringyesThe category or product link, for those rows.
positionintegeryesPlace in the store's results (before the specials filter).
fetchedAtstringnoTime the row was read, ISO UTC.

Run summary

The key-value store record RUN_SUMMARY has status, reason, message, counts per store and per search or link, warnings and request statistics. The run's Output tab links to it.

SituationDatasetStatus / runWhat to do
Products savedOne row per productcomplete, succeededExport the rows.
No product matchesEmptynot_found, succeededCheck spelling or try a wider term.
Spending limit reachedRows saved so farpartial + CHARGE_LIMIT, succeededRaise the maximum cost per run.
Run timeout reachedRows saved so farpartial + TIME_LIMIT, succeededRaise the timeout or split the input.
A store blocked or failedRows from other stores and pages staypartial or error + SOURCE_ERROR, failedCheck tasks in the summary and retry later.
Invalid inputEmptyinvalid_input, failedRead the message; fix the field it names.

Pricing and limits

Pay per event. The price includes proxy and platform usage. There are three events:

EventPriceWhen it is charged
Actor start$0.002Once per run (per GB of memory; the default 256 MB counts as one).
Store page read$0.003Each search, category or product page read from a store. One page has up to 36 (Woolworths), 48 (Coles) or 60 (Aldi) products.
Product$0.00045 – $0.00038Each saved row. The price depends on your Apify plan (see below).
Apify planPer productPer 1,000 products, with pages and start
Free$0.00045about $0.50–$0.54
Bronze$0.00043about $0.48–$0.52
Silver$0.0004about $0.45–$0.49
Gold and higher$0.00038about $0.43–$0.47

A page that a store blocked or failed to return is not charged. A product page for a product that no longer exists is charged as a page read, with no product event.

Cost examples (Free plan)

ScenarioInputPagesProductsTotal
Prefillmilk, Woolworths, 20120$0.014
Three storesmilk, all stores, 20 each360$0.038
No matchesan unknown word, all stores30$0.011
Specials onlyrice, Coles, onlyOnSpecial15277$0.172
Large search1,000 Woolworths products281,000$0.536
Product links100 product URLs100100$0.347

These totals use the listed event prices and the page and product counts from test runs. Searches with many products are the cheapest per product. Product links cost more, because each link is one page read.

Set a maximum cost per run to control spending. The Actor checks it before each page read and each row. When the limit is reached, the run stops and keeps the rows saved so far (CHARGE_LIMIT, succeeded).

Speed and size

  • Default memory is 256 MB; the maximum is 512 MB. More memory does not make runs faster.
  • In tests, 20 products took about 4 seconds, 1,800 products took 36 seconds and 5,000 products took 2 minutes.
  • Product links are slower: one page per link, about 1 second each. 500 links took about 9 minutes.
  • The default timeout is 300 seconds. For more than about 5,000 products or more than about 250 product links, raise the run timeout (for example to 900 seconds) or split the input into several runs.

API, export and integrations

Start a run with the Apify API and the same JSON input as in the examples:

POST https://api.apify.com/v2/acts/cliqtomedia~au-supermarket-prices/runs

Read the default dataset when the run finishes. Export JSON, CSV or Excel. Use store + productId as the key when you join rows from different runs. Keep your Apify token private.

You can create an Apify schedule yourself to collect prices every day or week. This Actor does not create schedules or send alerts.

Use with AI agents (MCP)

Apify MCP gives agents access to this Actor. The smallest useful input is:

{"searchTerms":["milk"],"stores":["woolworths"],"maxItems":20}

Key output fields: store names the supermarket, name and size describe the product, price and wasPrice are in AUD, unitPrice with unitOfMeasure allows fair comparison, and onSpecial marks a discount. This run takes about 4 seconds and costs $0.014 on the Free plan. Limits: up to 1,000 products per search or category, 50 search terms, 50 category links and 500 product links per run.

Limits and data notes

  • Online prices. Prices are the default online prices of each store. Local store and postcode prices can differ.
  • Aldi. Aldi does not sell online, so inStock is always null. Aldi shows few specials on its website, so wasPrice and promoText are usually null and onlyOnSpecial often returns no Aldi rows.
  • Names. Each store writes names its own way. Coles adds the size after a bar, for example Coles Full Cream Milk | 3L; the size is also in size.
  • Coles product links. Coles finds a product by the number at the end of the link. If the name part of the link is wrong but the number exists, you get that product.
  • Sponsored results. Store search results can include paid positions. They are kept and marked with isSponsored: true.
  • Not complete. Store search decides which products match a term. The Actor does not promise every product of a store.
  • Changes. If a store changes its website, a run can fail with SOURCE_ERROR until the Actor is updated.

Data comes from the public websites of Woolworths, Coles and Aldi Australia. Their website terms limit automated access and commercial use of their content. You are responsible for checking that your use of the data is allowed. This Actor is an independent tool. It is not made by or endorsed by Woolworths, Coles or Aldi.

Troubleshooting

The dataset is empty

Open RUN_SUMMARY. not_found means the stores returned no products for your terms or links. Check the spelling, or try a shorter term. With onlyOnSpecial, there may be no specials in the first 25 pages; the summary warns about this.

One store has no rows

Check tasks in RUN_SUMMARY. not_found means that store has no match. error with BLOCKED or SOURCE_UNAVAILABLE means the store did not answer after retries. Rows from other stores stay. Try again later.

The run stopped early

CHARGE_LIMIT means the maximum cost per run was reached; raise it. TIME_LIMIT means the run timeout was reached; raise the timeout or split the input. In both cases the run succeeds and keeps saved rows.

Only links from woolworths.com.au, coles.com.au and aldi.com.au are accepted. Copy the link from the product or category page in your browser.

FAQ

Do I need a store account or API key?

No. The Actor reads public pages. You only need an Apify account.

Are these the prices in my local store?

They are the default online prices. Prices in a local store or another state can be different.

Does an empty search cost money?

Yes, but little. It charges the start and the pages read. A search for an unknown word in all three stores costs $0.011.

Can I get price history?

Each run gives the current prices. Schedule the same input and keep the datasets to build your own history.

Why is the same product in two rows?

You searched for two terms and the product matched both. Each search keeps its own rows. Remove duplicates by store + productId if you need one row per product.

Support

Open an issue in this Actor's Issues tab. Include the run ID, your input (without private data) and the error text from RUN_SUMMARY. Never share your Apify token.