Coles Products Scraper | Prices, Specials and Nutrition avatar

Coles Products Scraper | Prices, Specials and Nutrition

Pricing

from $0.85 / 1,000 products

Go to Apify Store
Coles Products Scraper | Prices, Specials and Nutrition

Coles Products Scraper | Prices, Specials and Nutrition

Coles scraper for Australian grocery data: 100 products in 28 seconds, 57 fields each. Search terms, aisle or specials links and product numbers return price, was price, unit price, specials, multibuys, ingredients, allergens, nutrition panel, country of origin, stock and photos. No Coles account.

Pricing

from $0.85 / 1,000 products

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Coles Products Scraper | Prices, Specials and Nutrition (2026)

Coles products, 57 fields each, from any search.

From SilentFlow. Creators of Facebook Search Scraper and JD Products Scraper (#1 for โ€œjd scraperโ€ in Apify Store search), with 800,000+ combined lifetime runs.

Every Coles Australia product as one clean row: today's price and the was price, the unit price per litre or per 100 g, the special or multi buy on the shelf, the ingredients and allergens, the nutrition panel per 100 g and per serve, the country of origin, stock and photos. Our test runs returned 100 products for milk in 21 to 34 seconds with every product page, or in 11 seconds for prices only, with no Coles account.

Why choose this actor?

Copying Coles prices into a spreadsheet one product at a time? Finding out on Thursday that a rival brand went half price on Wednesday? Getting a price list without the unit price, the ingredients or the origin, then opening every product page to fill the gaps?

  • 53 fields filled per product, not 40. On the default run (100 products for milk), 53 of the 64 data fields carry a value on at least half the rows, against the 40 dataset fields the most used Coles actor announces. Every row had a brand, a size, a department, stock and photos, 99 had a unit price and 38 were on special with their was price and saving.
  • The product page comes with every row. Ingredients, allergens, dietary claims, the nutrition panel, the country of origin with its share of Australian ingredients, the description and the storage instructions are read by default, on the same row as the price. In the default run, 92 of 100 products had their ingredients and allergens, 88 the full nutrition panel and 96 the country of origin.
  • Nothing to fill in before you start. No field is required: type a search term, paste coles.com.au links or a list of product numbers, and press Start. The most used Coles actor asks you to choose an operation first. In our test, four product numbers, a product link and a search link in the same form gave 16 complete rows in 8 seconds.

Try Coles Products Scraper

Try your first 100 products

Paste this input in the JSON tab of the Input page and press Start. It searches Coles for milk, reads the results page by page in Coles' recommended order, opens each product page and stops at 100 products.

{
"searchTerms": ["milk"],
"maxItems": 100
}

It runs on the Apify Free plan. Each product becomes one row of your dataset: open the Output tab to see the table, switch to the Specials view for was prices, savings and offers or to the Catalog view for departments, allergens and origin, or export the rows as JSON, CSV or Excel.

How it works

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it the full picture of this scraper:

You have access to the Coles Products Scraper on Apify: silentflow/coles-products-scraper
It reads Coles Australia (coles.com.au) without an account and returns one row per product,
with its price, was price, unit price, special, ingredients, allergens, nutrition panel and country of origin.
Input schema (no field is required, at least one of searchTerms, startUrls or productIds is needed):
- searchTerms (array of strings): what you would type in the Coles search box ("milk", "tim tam",
"coffee beans", a brand). Every page of results is read, up to maxItems. A coles.com.au link here is read as a link.
- startUrls (array of {url}): coles.com.au pages. Aisles /browse/{department}[/{category}[/{subcategory}]],
specials /on-special or /on-special/{department}, searches /search/products?q=..., products /product/{slug}-{number}.
The sortBy and filter_Special of a link are kept.
- productIds (array of strings): Coles product numbers (8150288) or product links. Each one gives one complete row.
- maxItems (integer, default 100): max rows for the whole run, across all inputs. Duplicates count once.
- specials (string, default "none"): none, all, halfprice, multibuy, onlineonly. Applies to searches and links.
- sortBy (string, default "recommended"): recommended, bestsellers, price_asc, price_desc,
unit_price_asc, unit_price_desc, brand_asc, brand_desc.
- storeId (string, default "0584" = Coles Online): a Coles store number, a capital city (Melbourne)
or a state (VIC). Prices are national; the store sets the range and stock.
- includeDetails (boolean, default true): add ingredients, allergens, dietary claims, nutrition, country of origin,
description, dimensions, usage and storage instructions from each product page.
Output per product (68 fields, null when absent):
- id (string, product number), url (string), name, brand, brandId, size (strings)
- description, internalDescription (strings)
- department, category, subCategory, departmentId, categoryId, subCategoryId (strings)
- tradeProfitCentre, categoryGroup, merchandiseCategory, merchandiseSubCategory, merchandiseClass (strings)
- ingredients, allergens, dietary (strings), lifestyle (array of strings)
- nutrition (object: servingSize, servingsPerPack, per100g {nutrient: value}, perServing {nutrient: value},
dailyIntakePercent {nutrient: value})
- countryOfOrigin, countryOfOriginLabel (strings), australianIngredientsPercent (number)
- dimensions, usageInstructions, storageInstructions, unspscCode (strings)
- price, wasPrice, saveAmount (numbers, AUD), savePercent (number), currency ("AUD")
- isOnSpecial, isHalfPrice, isOnlineSpecial (booleans), promotionType, specialType, offerDescription (strings)
- multibuyQuantity (integer), multibuyPrice, multibuyUnitPrice (numbers, AUD)
- unitPrice (number), unitPriceQuantity (number), unitOfMeasure (string), comparablePrice (string), isWeighted (boolean)
- isAvailable (boolean), availabilityType (string), stockQuantity, retailLimit, promotionalLimit (integers)
- isLiquor, isTobacco, isRestrictedByOrganisation, isExcludedFromSubstitution, isFeatured (booleans), variantsCount (integer)
- storeId (string), imageUrl (string), images (array of strings)
- searchQuery, sourceUrl (strings), position (integer, rank in its search or aisle), scrapedAt (RFC 3339 UTC)
Use apify-client for Python or JavaScript: client.actor("silentflow/coles-products-scraper").call(run_input=...).

How to scrape Coles products

Three inputs, from the simplest to the most complete. Each one runs as is.

Price a whole search in one run

Type the words a shopper would type. The run reads every page of results and stops at Max products. Several searches share the cap, and a product found by two searches is saved once.

{
"searchTerms": ["tim tam", "coffee beans"],
"maxItems": 200
}

Pull this week's half-price chocolate, cheapest per 100 g first

Keep only the half-price products and read them by unit price, so the best value comes first. In our test, this input returned 30 products from the Melbourne store in 12 seconds, all of them half price, ordered by unit price.

{
"searchTerms": ["chocolate"],
"specials": "halfprice",
"sortBy": "unit_price_asc",
"storeId": "Melbourne",
"maxItems": 30
}

Track an aisle, the specials page and a fixed basket together

Mix aisle links, specials links and product numbers in the same run. Our test of the block cheese aisle plus the half-price specials page returned 60 products in 24 seconds.

{
"startUrls": [
{ "url": "https://www.coles.com.au/browse/dairy-eggs-fridge/cheese/block-cheese" },
{ "url": "https://www.coles.com.au/on-special?filter_Special=halfprice" }
],
"productIds": ["301721", "5322140", "8150288"],
"maxItems": 120
}

Input parameters

ParameterTypeDefaultDescription
searchTermsarray of strings["milk"] in the formWhat you would type in the Coles search box. Every page of results is read, up to Max products.
startUrlsarray of linksnonecoles.com.au aisle, specials, search or product pages, as your browser shows them.
productIdsarray of stringsnoneColes product numbers (the digits at the end of a product link) or product links.
maxItemsinteger100Maximum rows for the whole run, across all inputs. A product found twice is saved once.
specialsstringnonenone, all, halfprice, multibuy or onlineonly. Applies to search terms and links; product numbers are always returned.
sortBystringrecommendedrecommended, bestsellers, price_asc, price_desc, unit_price_asc, unit_price_desc, brand_asc or brand_desc. A link that carries its own sortBy keeps it.
storeIdstring0584 (Coles Online)A store from the list (one supermarket per capital), a Coles store number, a capital city or a state.
includeDetailsbooleantrueAdd ingredients, allergens, dietary claims, nutrition, origin, description and instructions from each product page. Turn it off for prices only: in our test, 100 products took 11 seconds without it and 21 to 34 seconds with it.

Accepted formats.

  • Search terms: plain words, any case: a product (milk), a brand (Cadbury), a brand with a product (tim tam, pauls zymil). A coles.com.au link typed here is read as a link.
  • Aisle links: https://www.coles.com.au/browse/dairy-eggs-fridge, .../dairy-eggs-fridge/cheese, .../dairy-eggs-fridge/cheese/block-cheese. The three levels of the Coles aisle tree are supported.
  • Specials links: https://www.coles.com.au/on-special, .../on-special/pantry, with or without ?filter_Special=halfprice, multibuy or onlineonly.
  • Search links: https://www.coles.com.au/search/products?q=coffee, with or without &sortBy=priceAscending and &filter_Special=halfprice.
  • Product links and numbers: https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288 or 8150288.
  • Stores: 0584 (Coles Online), a store number such as 7689, a capital (Sydney, Melbourne, Brisbane, Perth, Adelaide, Hobart, Canberra, Darwin), a state or territory code (NSW, VIC, QLD, WA, SA, TAS, ACT, NT) or its name (Victoria).

What data can you extract from Coles?

Each row is one product as one store sells it, grouped the way you read a shelf ticket and a pack:

  • Identity (6 fields): id (the Coles product number, stable), url (the product page), name, brand, brandId, size.
  • Content and pack (25 fields): description, internalDescription, the online aisle tree (department, category, subCategory and their ids), the Coles merchandise hierarchy (tradeProfitCentre, categoryGroup, merchandiseCategory, merchandiseSubCategory, merchandiseClass), ingredients, allergens, dietary, lifestyle, nutrition, countryOfOrigin, countryOfOriginLabel, australianIngredientsPercent, dimensions, usageInstructions, storageInstructions, unspscCode.
  • Price and specials (19 fields): price, wasPrice, saveAmount, savePercent, currency, isOnSpecial, isHalfPrice, isOnlineSpecial, promotionType, specialType, offerDescription, multibuyQuantity, multibuyPrice, multibuyUnitPrice, unitPrice, unitPriceQuantity, unitOfMeasure, comparablePrice, isWeighted.
  • Availability (11 fields): isAvailable, availabilityType, stockQuantity, retailLimit, promotionalLimit, isLiquor, isTobacco, isRestrictedByOrganisation, isExcludedFromSubstitution, variantsCount, isFeatured.
  • Store and media (3 fields): storeId, imageUrl, images (3.2 photos per product on average in the default run).
  • Run metadata (4 fields): searchQuery, sourceUrl, position, scrapedAt.

nutrition holds the panel printed on the pack: servingSize, servingsPerPack, then one object per column (per100g, perServing, dailyIntakePercent) mapping each nutrient to its value as printed ("Protein": "3.3 g"). Prices are numbers in Australian dollars, scrapedAt is RFC 3339 in UTC, and a value Coles does not show is null, never an empty string. id and url are permanent; image links are keyed by product number and keep working as long as Coles sells the product.

Output example

One complete row from the default run (milk), as it lands in the dataset:

{
"id": "3035442",
"url": "https://www.coles.com.au/product/big-m-strawberry-flavoured-milk-bottle-750ml-3035442",
"name": "Strawberry Flavoured Milk Bottle",
"brand": "Big M",
"brandId": "2296483675",
"size": "750mL",
"description": "Big day? With protein, energy & electrolytes fuel up with Big M! Pasteurised Reduced Fat Strawberry Flavoured Milk (26% less fat vs regular fat flavoured milk with 3.4% fat). No artificial colours, flavours or sweeteners. No preservatives. Big M Strawberry with protein, energy & electrolytes. Pasteurised reduced fat (26% less fat vs. regular fat flavoured milk) No preservatives.",
"internalDescription": "BIG M (OWP) STRAWBERRY FLAVOURED MILK BOTTLE 750ML",
"department": "Dairy, Eggs & Fridge",
"category": "Milk",
"subCategory": "Flavoured Milk",
"departmentId": "1300",
"categoryId": "8881800",
"subCategoryId": "8881804",
"tradeProfitCentre": "DAIRY",
"categoryGroup": "DAIRY",
"merchandiseCategory": "DY MILK",
"merchandiseSubCategory": "FLAVOURED MILK",
"merchandiseClass": "RAINBOW",
"ingredients": "Fresh Reduced Fat Milk Sugar, Natural Flavours, Natural Colour (Carmine).",
"allergens": "Contains Milk",
"dietary": "No Preservatives",
"lifestyle": null,
"nutrition": {
"servingSize": "250ml",
"servingsPerPack": "3",
"per100g": {
"Calcium": "878 mg",
"Carbohydrate": "8.6 g",
"Dietary Fibre": "0 g",
"Energy": "306 kJ",
"Energy (Cal)": "73 Cal",
"Fat - Saturated": "1.6 g",
"Fat - Total": "2.5 g",
"Potassium": "153 mg",
"Protein": "3.2 g",
"Sodium": "44 mg",
"Sugars - Total": "8.6 g"
},
"perServing": {
"Calcium": "293 mg",
"Carbohydrate": "21.5 g",
"Dietary Fibre": "0 g",
"Energy": "765 kJ",
"Energy (Cal)": "183 Cal",
"Fat - Saturated": "4.0 g",
"Fat - Total": "6.3 g",
"Potassium": "383 mg",
"Protein": "8 g",
"Sodium": "110 mg",
"Sugars - Total": "21.5 g"
},
"dailyIntakePercent": {
"Calcium": "37%",
"Carbohydrate": "7%",
"Dietary Fibre": "0%",
"Energy": "9%",
"Fat - Saturated": "17%",
"Fat - Total": "9%",
"Protein": "16%",
"Sodium": "5%",
"Sugars - Total": "24%"
}
},
"countryOfOrigin": "Australia",
"countryOfOriginLabel": "Made in Australia from at least 99% Australian ingredients",
"australianIngredientsPercent": 99,
"dimensions": "222.00 x 76.00 x 76.00 mm",
"usageInstructions": "Shake me. Shake well for maximum enjoyment.",
"storageInstructions": "Keep me chilled below 4C.",
"unspscCode": "50131700",
"price": 4.05,
"wasPrice": 4.8,
"saveAmount": 0.75,
"savePercent": 15.63,
"currency": "AUD",
"isOnSpecial": true,
"isHalfPrice": false,
"isOnlineSpecial": false,
"promotionType": "SPECIAL",
"specialType": null,
"offerDescription": null,
"multibuyQuantity": null,
"multibuyPrice": null,
"multibuyUnitPrice": null,
"unitPrice": 5.4,
"unitPriceQuantity": 1,
"unitOfMeasure": "l",
"comparablePrice": "$5.40/ 1L",
"isWeighted": false,
"isAvailable": true,
"availabilityType": "InStoreAndOnline",
"stockQuantity": 18,
"retailLimit": 20,
"promotionalLimit": 12,
"isLiquor": false,
"isTobacco": false,
"isRestrictedByOrganisation": false,
"isExcludedFromSubstitution": false,
"variantsCount": 3,
"isFeatured": false,
"storeId": "0584",
"imageUrl": "https://cdn.productimages.coles.com.au/productimages/3/3035442.jpg",
"images": [
"https://cdn.productimages.coles.com.au/productimages/3/3035442.jpg",
"https://cdn.productimages.coles.com.au/productimages/3/3035442_L.jpg",
"https://cdn.productimages.coles.com.au/productimages/3/3035442_R.jpg",
"https://cdn.productimages.coles.com.au/productimages/3/3035442_B.jpg"
],
"searchQuery": "milk",
"sourceUrl": "https://www.coles.com.au/search/products?q=milk",
"position": 23,
"scrapedAt": "2026-10-29T15:08:34Z"
}

Advanced usage

Follow a fixed basket every morning

Schedule this input daily on the Schedules page. Each run returns today's price, was price, special and stock for the same products, ready to append to a price history.

{
"productIds": ["8150288", "301721", "5322140", "3035442", "5467233"],
"includeDetails": false
}

Product numbers always return the full product page, whatever includeDetails says, so the rows stay complete.

Export the full specials list by department

Coles shows up to 5,000 products per list, and the specials often count more. Split them by department with specials links, one per department you track.

{
"startUrls": [
{ "url": "https://www.coles.com.au/on-special/pantry" },
{ "url": "https://www.coles.com.au/on-special/dairy-eggs-fridge" },
{ "url": "https://www.coles.com.au/on-special/drinks" }
],
"maxItems": 3000,
"includeDetails": false
}

Compare unit prices across an aisle

Read an aisle by unit price, cheapest first, to see which pack size gives the best value. unitPrice, unitPriceQuantity and unitOfMeasure give the comparison as numbers; comparablePrice gives it as printed on the shelf ticket.

{
"startUrls": [{ "url": "https://www.coles.com.au/browse/dairy-eggs-fridge/milk" }],
"sortBy": "unit_price_asc",
"maxItems": 200
}

Check the range of a local store

The store sets which products are on the shelf. Run the same search for two capitals and compare the product numbers each one returns: in our milk test, Coles Online listed 307 products and Coles Local Sydney CBD 193.

{
"searchTerms": ["milk"],
"storeId": "Sydney",
"maxItems": 300,
"includeDetails": false
}

Build an allergen and nutrition table for an app

Keep the product page data on (the default) and read a few searches your users care about. Filter the dataset on allergens, dietary or the nutrition.per100g values in your own code.

{
"searchTerms": ["gluten free bread", "protein bar", "oat milk"],
"maxItems": 150
}

FAQ

What does the Coles Products Scraper return? One row per product with its price, was price, saving, unit price, special or multi buy, stock, aisle tree, photos and, by default, the product page: ingredients, allergens, dietary claims, nutrition panel, country of origin, description, dimensions and instructions. The default run filled 53 data fields on at least half the rows.

Do I need a Coles account? No. The scraper reads the public coles.com.au pages any visitor sees. No login and no Flybuys card are needed.

How fresh is the data? Live. Every run reads coles.com.au at the moment it runs, nothing is cached. Coles changes its specials every Wednesday, so a run on Wednesday afternoon picks up the new week.

Which kinds of input can I use? Search terms, coles.com.au links (searches, aisles at any of the three levels, specials pages, product pages) and product numbers. You can mix them in one run; the cap counts all of them together and a product found twice is saved once.

How many products can I get? As many as Max products allows. Coles itself shows up to 5,000 products per search, aisle or specials list; split a bigger list by aisle or by department of the specials, as in the recipe above.

Do prices change by store? Coles prices are the same across Australia. The store changes the range on the shelf and the stock: in our test, milk returned 307 products at Coles Online and 193 at Coles Local Sydney CBD. A few stores show no prices online; the run tells you when that happens, and the default Coles Online store always has them.

Can I combine the specials filter with a sort? Yes. Filters and sort add up: specials: halfprice with sortBy: unit_price_asc returns the half-price products of a search cheapest per unit first. A link that carries its own filter_Special or sortBy keeps them.

Why do some products have no position? Coles places a few promoted products at the top of the first page of an aisle or the specials. They come with isFeatured: true and position: null, since they are not part of the ranked list; every other product carries its rank.

Why is a field empty on some rows? Coles does not print everything for every product: fresh produce often has no ingredients list, a non-food product has no nutrition panel, and only products on special have a was price or an offer. Those fields are null on those rows, and the rest of the row is complete.

What is Coles? Coles is one of Australia's two largest supermarket chains, next to Woolworths, with a national online store at coles.com.au. Pair this actor with our Woolworths Products Scraper to compare both chains product by product.

Can I run it from my own code? Yes. Call silentflow/coles-products-scraper with the Apify API or the apify-client libraries for Python and JavaScript, then read the dataset as JSON, CSV or Excel. The block in Copy to your AI assistant gives an assistant everything it needs to write that code.

More SilentFlow scrapers

๐Ÿ›’ E-commerce

๐Ÿ’ผ Jobs

๐Ÿ  Real estate

๐Ÿ“ฃ Social media

๐Ÿข Business data

โœˆ๏ธ Travel

๐ŸŽฏ Lead generation

๐Ÿ”Ž SEO

๐Ÿ“ˆ Marketing

๐ŸŽฌ Video

๐Ÿ“ฐ News

๐Ÿงฐ More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available product data from coles.com.au. It does not bypass any login, paywall or CAPTCHA, and it collects no personal data: rows describe products, prices and stores. Users are responsible for complying with Coles' terms of service and applicable data protection laws (GDPR, CCPA and PIPL where relevant). The data returned is informational; verify accuracy for regulated use cases such as allergen labelling.

Coles prices, specials, ingredients and nutrition, one clean row per product, ready for your spreadsheet, dashboard or app.