Coles Scraper — Prices, Specials, Barcodes & Nutrition
Pricing
from $1.30 / 1,000 results
Coles Scraper — Prices, Specials, Barcodes & Nutrition
Coles.com.au scraper: export the whole Coles catalogue (~25,000 products), any category, search or specials page with prices, was prices, half-price & multibuy specials, unit prices, barcodes (GTIN), ingredients, allergens and nutrition. Store prices by postcode. No login. Not affiliated with Coles.
Pricing
from $1.30 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Coles Scraper
Export the entire Coles Supermarkets online catalogue — prices, was prices, half-price and multibuy specials, unit prices, barcodes, ingredients, allergens and nutrition — as clean JSON, CSV or Excel, in about a minute.
Independent tool. Not affiliated with, endorsed by, or sponsored by Coles Group Limited or Coles Supermarkets Australia Pty Ltd. "Coles", "Coles Online", "Liquorland" and "Flybuys" are trademarks of their owners and are used here only to describe the website this Actor reads.
Coles Scraper is a Coles product and price data tool for Australia: it lets you scrape coles.com.au without a Coles account, login, cookies or browser, and returns one structured row per product. Use it as a Coles API alternative (Coles offers no public product API), a Coles price tracker, a weekly feed of Coles specials and half price data, or a one-click Coles product data export to CSV, Excel or JSON. One run reads the whole Coles online range — 25,153 products across 21 departments, measured on 2026-10-18 in 70 seconds — or just the categories, search terms, specials pages or product IDs you give it.
Every row carries what grocery analysts actually need: current price, was price, savings in dollars and percent, the promotion exactly as Coles labels it (1/2 Price, 40% Off, "Pick any 2 for $15", Reduced to clear, Every Day, New), the unit price ($ per 100 g / 1 L / 1 kg / each), the EAN/GTIN barcode, purchase limits, availability, the full online category path and Coles' internal merchandise hierarchy, plus — in the same request — ingredients, allergen statements, the nutrition panel as numbers, country of origin with the percentage of Australian ingredients, product description and alcohol content for liquor. Prices can be taken from Coles' default online store or from any Coles supermarket by store number or postcode. The field names follow a shared grocery vocabulary, so the data drops straight into an Australian grocery prices dataset, a supermarket price monitoring Australia dashboard, or a side-by-side Coles vs Woolworths comparison.
Table of contents
- At a glance
- What you get
- Who uses it — 14 workflows
- Cookbook — 15 ready-to-run inputs
- Tutorial: your first run in the Apify Console
- Tutorial: run it from the API
- Input reference
- Output data dictionary
- Real output sample
- Scale and speed — measured
- How Coles specials, promotions and unit prices work
- How the Actor works
- What you pay
- Integrations
- Performance tips
- Troubleshooting
- Honest limits
- Comparison with manual collection
- FAQ
- Glossary
- Is it legal to scrape Coles?
- Changelog
- Support
At a glance
| Source | coles.com.au — the public product data the website loads for every visitor |
| Coverage | Whole online catalogue: 25,153 unique products in 21 departments (2026-10-18), or any category, search, specials page or product list |
| Speed | Whole catalogue 69.9 s; 1,000 products 10.3 s; 100 products 4.1 s (Apify platform, 2026-10-18) |
| Prices | Price, was price, savings $ and %, unit price, multibuy deal price, promotion label and type |
| Specials | Half price, multibuy and online-only specials through Coles' own filters; "any special" adds clearance lines |
| Product data | Barcode (EAN/GTIN), brand, size, images (front, back, sides), description, availability, purchase limits |
| Food data | Ingredients, allergens, dietary and lifestyle claims, nutrition per 100 g and per serving (as numbers), country of origin, % Australian ingredients |
| Categories | Online department › category › sub-category, every path a product is listed under, Coles' merchandise hierarchy |
| Store prices | Default online prices, or any Coles supermarket by store number or postcode |
| Accuracy check | 16 products × 18 fields compared with the live product pages: 288 / 288 match (2026-10-18) |
| Output | JSON, CSV, Excel, XML, RSS, HTML table — via the Console, API, integrations or MCP |
| Login / cookies | None needed |
| Price | From $1.30 per 1,000 products, compute and proxies included — see What you pay |
What you get
One row per product, 82 fields. Values that do not exist are null — never an empty string or an invented 0. Field names are camelCase and shared with other Australian supermarket datasets (price, wasPrice, unitPrice, unitOfMeasure, isOnSpecial, barcode, brand, categoryPath …), so Coles rows stack with Woolworths rows without renaming columns. Every field is defined, with its measured fill rate, in the Output data dictionary.
| Group | Fields | Example |
|---|---|---|
| Identity & links | productId, retailer, name, brand, title, size, url, imageUrl, imageUrls, barcode, skuDescription | 1338400 · Rokeby Protein Snack Banana Honey | 160g · barcode 9336243004675 |
| Price & promotion | price, wasPrice, savings, savingsPercent, isOnSpecial, isHalfPrice, isMultibuy, isOnlineOnlySpecial, isNew, specialType, promotionType, promoLabel | 1.55 · was 3.15 · save 1.6 (50.8%) · HALF_PRICE · 1/2 Price |
| Multibuy deals | multibuyQuantity, multibuyPrice, multibuyPricePerItem, multibuyLabel, multibuyUnitPrice | 5 · 9 · 1.8 · Pick any 5 for $9 |
| Unit price | unitPrice, unitOfMeasure, unitPriceText, isSoldByWeight | 0.97 · 100g · $0.97/ 100g |
| Availability & rules | isAvailable, availabilityType, purchaseLimit, promotionalPurchaseLimit, isAgeRestricted, deliveryRestrictions, minimumShelfLife, bonusOffer, variantCount | true · limit 20 (12 on special) · Life 2 days min |
| Categories | department, category, subCategory, categoryPath, allCategoryPaths, departmentId, categoryId, subCategoryId | Dairy, Eggs & Fridge > Dairy Desserts > Chilled Dairy Desserts |
| Coles merchandise hierarchy | merchandiseDepartment, merchandiseCategoryGroup, merchandiseCategory, merchandiseSubCategory, merchandiseClass | DAIRY › DAIRY DESSERTS › PROTEIN › HIGHPROTEIN |
| Label data (option on by default) | description, ingredients, allergens, dietary, lifestyle, nutritionalClaims, countryOfOrigin, countryOfOriginStatement, australianIngredientsPercent, servingSize, servingsPerPackage, nutritionPer100g, nutritionPerServing, nutritionText, dimensions, storageInstructions, usageInstructions, preparationInstructions, warnings, alcoholPercent, standardDrinks, otherInfo, disclaimer | Contains Milk · Made in Australia from 92% Australian ingredients · { "energyKj": 386, "sugarsG": 4.9 } |
| Run context | storeId, storeName, storeState, source, scrapedAt | 7674 · Coles Online Hub Store Ocado - Melbourne · VIC |
The Output tab has four ready views: Overview (image, product, price, special, unit price, category, barcode), Specials, Ingredients & nutrition and Categories & limits.
Who uses it — 14 workflows
1. FMCG brand and sales teams
Track your range and your competitors' at Coles every week — shelf price, was price, half price or multibuy, purchase limits, availability. Run your aisles every Wednesday, filter brand, and send the promotion calendar (promoLabel, specialType, savingsPercent) to the key-account team.
2. Category managers and retail buyers
Map a category's price ladder: unitPrice per 100 g / 1 L, private-label share (brand starting with "Coles"), SKUs per sub-category and Coles' own merchandise hierarchy (merchandiseCategory → merchandiseClass). Export the department monthly and pivot it in Excel.
3. Price-comparison apps and websites
Feed your engine with the full catalogue, refreshed daily or weekly, keyed by barcode so products match across retailers; images, sizes, unit prices and canonical URLs build a product page from one row.
4. Retail and equity analysts
Measure promotional intensity (33.5% of products on special on 2026-10-18), discount depth (savingsPercent) and half-price counts by department. A Wednesday schedule turns the datasets into a promo index.
5. Economists and inflation trackers
Build a supermarket price index: fix a basket by productId, read it weekly with productIds, and use unitPrice + unitOfMeasure to compare per-kilo prices across pack-size changes. postcode runs add geography.
6. Journalists and consumer advocates
Check half-price claims against earlier weeks' prices, find shrinkflation (same productId, smaller size, higher unitPrice), or compare Coles brands with national brands — with dated, reproducible datasets.
7. Dietitians, nutrition and health apps
Get every food product's nutrition panel as numbers (nutritionPer100g.energyKj, sugarsG, sodiumMg …) with ingredients, allergens and claims. In the food departments 75% carry a nutrition panel and 84% an ingredient list (2026-10-18).
8. Allergy, vegan and special-diet apps
Filter on allergens ("Contains Milk. May Contain Soy"), lifestyle (Vegan, Halal …) and nutritionalClaims (Gluten free …) to build "safe for me" lists that update with the range.
9. Grocery marketplaces, meal-kit and recipe platforms
Map recipe ingredients to purchasable Coles products (name, size, images, barcode, price) and price a shopping list; productIds keeps a known list fresh in seconds.
10. Independent grocers and convenience stores
Price your shelf against the nearest Coles: set postcode and export the categories you compete in; each row names the Coles store priced.
11. Liquor retailers and wine analysts
Liquorland (2,274 products on 2026-10-18) comes with alcoholPercent, standardDrinks, region and food pairing, prices and multibuys — a competitive feed for bottle shops.
12. AI agents, chatbots and RAG pipelines
"Cheapest gluten-free pasta per kg at Coles this week" is one filter on this dataset. Call the Actor through the Apify MCP server or load rows into your vector store; each has a canonical URL to cite.
13. Academic and public-health researchers
Study the food environment — healthy vs. less healthy food prices, promotions on high-sugar products, origin labelling, private-label share — with timestamped, citable datasets.
14. Data engineering and BI teams
Load runs into BigQuery, Snowflake or Postgres via the API or a webhook, key them on productId + scrapedAt, and build Looker Studio / Power BI / Tableau dashboards.
Cookbook — 15 ready-to-run inputs
Paste any of these into the JSON tab of the input form (or send them as the API body).
1. The whole Coles catalogue (weekly export)
{"maxItems": 0}
Leave every scope field empty and set maxItems to 0. Measured on 2026-10-18: 25,153 products in 69.9 seconds. Make sure your Maximum cost per run covers ~25,000 results (see What you pay).
2. One department
{"categories": ["Pantry"],"maxItems": 0}
Department names are matched case-insensitively against the live Coles menu: Meat & Seafood, Fruit & Vegetables, Dairy, Eggs & Fridge, Bakery, Deli, Pantry, Chips, Chocolates & Snacks, International Foods, Health & Dietary, Drinks, Liquorland, Frozen, Cleaning & Laundry, Health & Beauty, Baby, Pet, Home & Garden and the seasonal ones.
3. Exact categories by URL or path
{"categories": ["https://www.coles.com.au/browse/dairy-eggs-fridge/cheese","pantry/coffee","liquorland/spirits"],"maxItems": 2000}
4. Search terms
{"searchTerms": ["milk", "coffee pods", "gluten free bread"],"maxItems": 1500}
Each term is one Coles search, in Coles' own relevance order. With several terms, maxItems is shared fairly between them first.
5. Every product on special this week
{"onlySpecials": "any","maxItems": 0}
Measured on 2026-10-18: 8,427 products on special — half price, % off, multibuy, special prices, reduced to clear and while stocks last.
6. Half-price specials only
{"onlySpecials": "halfPrice","maxItems": 0}
Uses Coles' own half-price filter: 1,951 products, read in 15.6 seconds on 2026-10-18.
7. Multibuy deals only ("Any 2 for $X")
{"onlySpecials": "multibuy","categories": ["Chips, Chocolates & Snacks", "Drinks"],"maxItems": 0}
multibuyQuantity, multibuyPrice (the deal total) and multibuyPricePerItem make deals comparable with single prices.
8. Online-only specials
{"onlySpecials": "onlineOnly","maxItems": 0}
282 products on 2026-10-18.
9. A brand's range
{"searchTerms": ["Cadbury"],"maxItems": 0}
Then filter the brand column (Cadbury). For Coles' own brands search Coles, Coles Finest, Coles Simply, Coles Kitchen … — the brand field separates them.
10. Prices at a specific store or postcode
{"postcode": "6000","categories": ["Dairy, Eggs & Fridge"],"maxItems": 0}
The nearest Coles supermarket that publishes online prices is used (postcode 6000 → store 481, Coles Central Raine Square, Perth WA). Or give the store number directly: "storeId": "481".
11. A watchlist of products (daily price check)
{"productIds": ["8150288","https://www.coles.com.au/product/rokeby-protein-snack-banana-honey-160g-1338400","6600805"]}
Up to 20 products per request; a 500-product watchlist takes seconds.
12. Paste coles.com.au pages
{"startUrls": [{ "url": "https://www.coles.com.au/on-special/drinks?filter_Special=halfprice" },{ "url": "https://www.coles.com.au/search/products?q=olive%20oil" },{ "url": "https://www.coles.com.au/browse/frozen/ice-cream" }],"maxItems": 0}
Category pages, specials pages (with their filter_Special), /half-price-specials, search pages and product pages are all understood.
13. Fast prices-only export
{"maxItems": 0,"includeNutrition": false}
Drops the label data (ingredients, nutrition, description …) and roughly halves the data volume; prices, specials, barcodes and categories stay.
14. Price-change tracking with a schedule
Create a Schedule in Apify Console (Schedules → Create) with the cron 0 6 * * 3 and the time zone Australia/Sydney — every Wednesday 6:00, when Coles' weekly specials start — running input #1 or #5. Each run is a new dataset; join two weeks on productId and compare price, wasPrice, promoLabel:
import pandas as pda = pd.read_csv("coles_week1.csv")b = pd.read_csv("coles_week2.csv")m = a.merge(b, on="productId", suffixes=("_w1", "_w2"))changed = m[m.price_w1 != m.price_w2][["title_w1", "price_w1", "price_w2", "promoLabel_w2"]]print(changed.sort_values("price_w2"))
15. Merge with Woolworths data
The Woolworths Scraper from the same publisher on Apify Store writes the same column names (retailer, price, wasPrice, unitPrice, unitOfMeasure, isOnSpecial, isHalfPrice, barcode, brand, categoryPath …). Stack both datasets and match on the barcode:
import pandas as pdcoles = pd.read_json("coles.json")wow = pd.read_json("woolworths.json")both = pd.concat([coles, wow]) # one table, column "retailer" tells them apartpairs = coles.merge(wow, on="barcode", suffixes=("_coles", "_wow"))pairs["cheaper_at"] = (pairs.price_coles < pairs.price_wow).map({True: "Coles", False: "Woolworths"})print(pairs[["title_coles", "price_coles", "price_wow", "cheaper_at"]].head(20))
Tutorial: your first run in the Apify Console
- Open the Actor and click Try for free (or Start if you are signed in). A free Apify account is enough.
- Choose what to export. The form opens with
milkin Search terms and Max results = 100. For the whole catalogue, delete the search term and set Max results to0. For specials, pick a value in Only specials. - Optional — choose a store. Type a store number (e.g.
481) or a postcode (e.g.2000). Leave both empty for coles.com.au's default online prices. - Leave "Include ingredients, allergens & nutrition" on unless you only need prices.
- Click Start. The status line shows progress ("Saved 4,859 products · 39 requests · 38 s"). The first products appear in the Output tab within seconds.
- Browse the views — Overview, Specials, Ingredients & nutrition, Categories & limits.
- Export. Click Export and choose CSV, Excel (XLSX), JSON, JSONL, XML or HTML. Pick the columns you want, or keep them all.
- Repeat automatically. Click Schedule to run it every week (see recipe #14), or connect an integration (Google Sheets, webhook, Make, Zapier, n8n).
Tutorial: run it from the API
- Get your API token in Apify Console → Settings → API & Integrations.
- Start a run and wait for the data in one call (good for up to a few thousand products):
curl -X POST "https://api.apify.com/v2/acts/logiover~coles-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN&format=json" \-H "Content-Type: application/json" \-d '{"searchTerms":["coffee"],"onlySpecials":"halfPrice","maxItems":200}'
- For the whole catalogue, start asynchronously and read the dataset when the run finishes:
# startcurl -X POST "https://api.apify.com/v2/acts/logiover~coles-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" -d '{"maxItems":0}'# poll the run (status SUCCEEDED), then download its dataset as CSVcurl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN" -o coles.csv
- Limit the cost of one run with
maxTotalChargeUsd, e.g..../runs?token=YOUR_TOKEN&maxTotalChargeUsd=10— the run stops cleanly when the budget is used (see Maximum cost per run). - Read the run summary from the run's key-value store, record
SUMMARY: outcome, store, products per query, coverage, duplicates skipped, stop reason.
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
searchTerms | array of strings | [] (form prefill: ["milk"]) | Keywords searched on coles.com.au, one search each, in Coles' relevance order. |
categories | array of strings | [] | Departments / categories as a URL (https://www.coles.com.au/browse/pantry/coffee), a path (pantry/coffee) or a name (Pantry). Resolved against the live Coles menu. |
startUrls | array of URLs | [] | coles.com.au pages: /browse/…, /on-special… (incl. ?filter_Special=halfprice|multibuy|onlineonly), /half-price-specials, /search/products?q=…, /product/…. |
productIds | array of strings | [] | Coles product numbers or product URLs. |
onlySpecials | string | no | no (all products), any, halfPrice, multibuy, onlineOnly. Applies to every scope, including the whole catalogue. |
storeId | string | "" | A Coles supermarket number (481 or COL:481). Its prices and range are used. |
postcode | string | "" | An Australian postcode; the nearest Coles supermarket with online prices is used. Ignored when storeId is set. |
includeNutrition | boolean | true | Adds description, ingredients, allergens, dietary/lifestyle claims, nutrition panel, country of origin, dimensions, instructions, alcohol content. |
maxItems | integer | 1000 (form prefill: 100) | Maximum unique products in the run. 0 = no limit. |
proxyConfiguration | object | { "useApifyProxy": true } | Coles refuses direct connections from cloud servers, so Apify Proxy (datacenter) is used and included in the price. |
Scope rules. If you fill none of searchTerms, categories, startUrls and productIds, the whole catalogue is exported. Otherwise only what you give is read, and a product found by two scopes is saved once (source names the first one).
Output data dictionary
Fill rates were measured on the full-catalogue run of 2026-10-18 (25,153 products, default store, nutrition on). Booleans are always filled. A field that applies only to some products (e.g. multibuy fields) has a low fill rate by nature.
| Field | Type | Fill | Meaning | Example |
|---|---|---|---|---|
productId | string | 100% | Coles product number; unique per row | 8150288 |
retailer | string | 100% | Always Coles (for stacking with other retailers) | Coles |
name | string | 100% | Product name without brand | Full Cream Milk |
brand | string | 100% | Brand (3,717 distinct on 2026-10-18) | Coles |
title | string | 100% | Brand + name + size as on the site | Coles Full Cream Milk | 3L |
size | string | 99.9% | Pack size as labelled | 3L, approx. 281g, 1 Each |
url | string | 100% | Canonical product page | https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288 |
imageUrl | string | 100% | Main image (front of pack) | https://cdn.productimages.coles.com.au/productimages/8/8150288.jpg |
imageUrls | array | 100% | All images: front, left, right, back of pack | […/8150288.jpg, …/8150288_B.jpg] |
barcode | string | 91.2% | EAN-13 / EAN-8 / UPC barcode (GTIN) | 9300601186945 |
price | number | 99.4% | Current price in AUD (empty only for unavailable products) | 4.95 |
wasPrice | number | 24.6% | Price before the special | 3.9 |
savings | number | 24.6% | wasPrice − price | 0.45 |
savingsPercent | number | 24.6% | Saving in %, 1 decimal | 11.5 |
isOnSpecial | boolean | 100% | Any temporary promotion (special price, % off, multibuy, clearance) | true |
isHalfPrice | boolean | 100% | Coles' "1/2 Price" | false |
isMultibuy | boolean | 100% | "Pick any N for $X" deal | true |
isOnlineOnlySpecial | boolean | 100% | Special valid online only | false |
isNew | boolean | 100% | Product carries Coles' "NEW" roundel | false |
specialType | string | 49.4% | HALF_PRICE, PERCENT_OFF, MULTIBUY, SPECIAL, REDUCED_TO_CLEAR, WHILE_STOCKS_LAST, EVERYDAY_LOW_PRICE | MULTIBUY |
promotionType | string | 52.7% | Coles' raw promotion type | SPECIAL, EVERYDAY, NEW |
promoLabel | string | 52.7% | Roundel text | Any 2 $10.50 |
multibuyQuantity | number | 7.8% | Items in the deal | 2 |
multibuyPrice | number | 7.8% | Deal total | 10.5 |
multibuyPricePerItem | number | 7.8% | Price per item inside the deal | 5.25 |
multibuyLabel | string | 7.8% | Deal wording | Pick any 2 for $10.50 |
multibuyUnitPrice | string | 7.4% | Unit price at the deal price | $4.38/ 1L |
unitPrice | number | 95.5% | Price per unit of measure | 1.65 |
unitOfMeasure | string | 95.5% | Unit for unitPrice | 1L, 100g, 1kg, 1ea |
unitPriceText | string | 95.3% | Shelf-label unit price | $1.65/ 1L |
isSoldByWeight | boolean | 99.4% | Variable-weight item | false |
isAvailable | boolean | 100% | Can be ordered online now | true |
availabilityType | string | 100% | InStoreAndOnline or InStoreOnly | InStoreAndOnline |
purchaseLimit | number | 99.4% | Max units per order | 20 |
promotionalPurchaseLimit | number | 99.2% | Max units per order at the special price | 12 |
isAgeRestricted | boolean | 100% | Liquor (18+) | false |
deliveryRestrictions | string | 18.4% | Coles' delivery-method restriction codes | REMOTE SERVICE | OVN |
minimumShelfLife | string | 8.5% | Guaranteed life on delivery (fresh food) | Life 7 days min |
bonusOffer | string | 5.7% | Current collectable / bonus credit program | Bonus Cookware Credit |
variantCount | number | 36.8% | Other flavours / sizes | 18 |
department | string | 99.9% | Online department (level 1) | Dairy, Eggs & Fridge |
category | string | 99.9% | Level 2 | Milk |
subCategory | string | 99.9% | Level 3 | Full Cream Milk |
categoryPath | string | 99.9% | Primary path | Dairy, Eggs & Fridge > Milk > Full Cream Milk |
allCategoryPaths | string | 99.9% | All paths the product is listed under | … | Back To School > Lunchbox Snacks > Yoghurt |
departmentId, categoryId, subCategoryId | string | 99.9% | Coles' category ids | 1300, 8881800, 8881801 |
merchandiseDepartment | string | 100% | Coles trade profit centre | DAIRY |
merchandiseCategoryGroup | string | 100% | Category group | DAIRY |
merchandiseCategory | string | 100% | Merchandise category | DY MILK |
merchandiseSubCategory | string | 100% | Merchandise sub-category | WHOLE WHITE |
merchandiseClass | string | 100% | Merchandise class | WHOLE 3-3.9L |
skuDescription | string | 100% | Coles' internal item description | COLES FULL CREAM MILK 3L |
description | string | 87.9% | Product description | Coles is committed to bringing you … |
ingredients | string | 69.0% (84% of food) | Ingredient list | Homogenised and Pasteurised Full Cream Milk. |
allergens | string | 38.7% (64% of food) | Allergen statement | Contains Milk |
dietary | string | 14.7% | Dietary statement | Source of Calcium |
lifestyle | string | 25.5% | Lifestyle tags | Vegetarian | Vegan |
nutritionalClaims | string | 30.3% | Nutrition claims | Gluten free |
countryOfOrigin | string | 98.6% | Country as labelled | Australia |
countryOfOriginStatement | string | 60.3% | Country-of-origin label text | Made in Australia from at least 99% Australian ingredients |
australianIngredientsPercent | number | 23.3% | % Australian ingredients from that statement | 99 |
servingSize | string | 44.7% | Serving size | 250mL |
servingsPerPackage | number | 44.7% | Servings per pack | 12 |
nutritionPer100g | object | 42.8% (75% of food) | Numbers per 100 g/mL: energyKj, energyKcal, proteinG, fatTotalG, fatSaturatedG, fatTransG, carbohydrateG, sugarsG, dietaryFibreG, sodiumMg, calciumMg, potassiumMg … | { "energyKj": 258, "proteinG": 3.4 } |
nutritionPerServing | object | 42.8% | Same keys per serving | { "energyKj": 646 } |
nutritionText | string | 44.0% | Whole panel as text (keeps "<1 g" values) | Per 100g/ml: Protein 3.4 g, … |
dimensions | string | 99.9% | Pack dimensions | 273.00 x 153.00 x 102.00 mm |
storageInstructions | string | 54.3% | Storage | Keep refrigerated. Store at or below 5°C |
usageInstructions | string | 39.5% | Usage | Ready to consume |
preparationInstructions | string | 12.7% | Preparation | Heat in microwave … |
warnings | string | 28.0% | Label warnings | Keep out of reach of children |
alcoholPercent | number | 9% (all liquor) | Alcohol by volume, % | 40 |
standardDrinks | number | 9% (all liquor) | Standard drinks per pack | 22 |
otherInfo | object | 12.5% | Other label attributes, by Coles' title | { "Liquor Region": "BAROSSA" } |
disclaimer | string | 9.7% | Label disclaimer | Always read the label … |
storeId, storeName, storeState | string | 100% | Store whose prices the row carries | 7674, Coles Online Hub Store Ocado - Melbourne, VIC |
source | string | 100% | Which input found the product | category: Pantry |
scrapedAt | string | 100% | Run time, ISO 8601 | 2026-10-18T20:31:12.402Z |
Real output sample
Two real rows from the full-catalogue run on 2026-10-18 (Apify platform, default store), some fields left out for space; the second shows a multibuy.
{"productId": "1338400","retailer": "Coles","name": "Protein Snack Banana Honey","brand": "Rokeby","title": "Rokeby Protein Snack Banana Honey | 160g","size": "160g","url": "https://www.coles.com.au/product/rokeby-protein-snack-banana-honey-160g-1338400","imageUrl": "https://cdn.productimages.coles.com.au/productimages/1/1338400.jpg","barcode": "9336243004675","price": 1.55,"wasPrice": 3.15,"savings": 1.6,"savingsPercent": 50.8,"isOnSpecial": true,"isHalfPrice": true,"isMultibuy": false,"specialType": "HALF_PRICE","promotionType": "SPECIAL","promoLabel": "1/2 Price","unitPrice": 0.97,"unitOfMeasure": "100g","unitPriceText": "$0.97/ 100g","isAvailable": true,"purchaseLimit": 20,"promotionalPurchaseLimit": 12,"minimumShelfLife": "Life 2 days min","variantCount": 2,"department": "Dairy, Eggs & Fridge","category": "Dairy Desserts","subCategory": "Chilled Dairy Desserts","categoryPath": "Dairy, Eggs & Fridge > Dairy Desserts > Chilled Dairy Desserts","merchandiseDepartment": "DAIRY","merchandiseCategory": "DAIRY DESSERTS","merchandiseSubCategory": "PROTEIN","merchandiseClass": "HIGHPROTEIN","skuDescription": "ROKEBY PROTEIN SNACK BANANA HONEY 160G","description": "Rokeby Protein Snack is a delicious dairy dessert crafted with quality ingredients and 15g of natural protein to satisfy your cravings any time of the day. A creamy mix of ripe banana and warm cinnamon, finished with a hint of natural honey flavour.","ingredients": "Filtered low fat milk, cream (milk), erythritol, native starch, banana puree (2%), dietary fibre, gelatine, sea salt, natural flavours, cinnamon, enzyme (lactase), natural preservative (nisin), stevia (steviol glycosides), natural colour (carotene).","allergens": "Contains Milk","countryOfOrigin": "Australia","countryOfOriginStatement": "Made in Australia from 92% Australian ingredients","australianIngredientsPercent": 92,"servingSize": "160g","servingsPerPackage": 1,"nutritionPer100g": { "proteinG": 9.4, "carbohydrateG": 9.6, "energyKj": 386, "fatSaturatedG": 0.9, "sugarsG": 4.9, "calciumMg": 305, "sodiumMg": 70, "fatTotalG": 1.7 },"nutritionPerServing": { "proteinG": 15, "carbohydrateG": 15.4, "energyKj": 618, "fatSaturatedG": 1.4, "sugarsG": 7.8, "calciumMg": 488, "sodiumMg": 112, "fatTotalG": 2.7 },"storeId": "7674","storeName": "Coles Online Hub Store Ocado - Melbourne","storeState": "VIC","source": "category: Dairy, Eggs & Fridge"}
{"productId": "6600805","title": "Farmers Union No Added Sugar Kids Yogurt Pouch Blueberry | 130g","price": 2.9,"unitPrice": 2.23,"unitOfMeasure": "100g","unitPriceText": "$2.23/ 100g","isOnSpecial": true,"specialType": "MULTIBUY","promoLabel": "Any 5 $9","multibuyQuantity": 5,"multibuyPrice": 9,"multibuyPricePerItem": 1.8,"multibuyLabel": "Pick any 5 for $9","multibuyUnitPrice": "$1.38/ 100G","barcode": "9300658410994","categoryPath": "Dairy, Eggs & Fridge > Yoghurt > Pouch","url": "https://www.coles.com.au/product/farmers-union-no-added-sugar-kids-yogurt-pouch-blueberry-130g-6600805"}
CSV / Excel columns. Exports have one column per field. Arrays and objects are flattened by the platform: imageUrls/0, imageUrls/1 …, nutritionPer100g/energyKj, nutritionPer100g/proteinG …, otherInfo/Liquor Region. Choose "Clean items" and pick the columns you need in the export dialog; the four Output views are a good starting set.
Scale and speed — measured
Every number below was measured on the Apify platform on 2026-10-18 with default settings (2 GB memory, Apify datacenter proxy).
| Run | Result | Time |
|---|---|---|
| Form prefill (search "milk", 100 products) | 100 products, first rows after ~2 s | 4.1 s |
Default input {} (catalogue, first 1,000) | 1,000 products from all departments | 10.3 s |
| Postcode 6000 (Perth), "milk" + "bread", 300 products | 300 products priced at store 481 (WA) | 8.6 s |
| Half-price specials, whole store | 1,951 products | 15.6 s |
| Whole catalogue, nutrition on | 25,153 unique products, 0 duplicates | 69.9 s |
Coverage of the whole-catalogue run. Coles reported 34,139 results across the 40 queries the run needed (a product listed in several departments counts in each); 34,136 distinct products were read — 100.0%. Three queries were read a second time in another order to fill gaps; three Liquorland products stayed unreachable and are named in the run's SUMMARY. Two of 213 requests needed a new connection.
The catalogue on 2026-10-18 (default store). 25,153 products, 3,717 brands, median price $7.20 (from $0.10 to $990). By primary department: Pantry 6,107 · Health & Beauty 4,451 · Liquorland 2,274 · Dairy, Eggs & Fridge 1,952 · Chips, Chocolates & Snacks 1,619 · Cleaning & Laundry 1,478 · Home & Garden 1,296 · Frozen 1,272 · Drinks 1,092 · Pet 825 · Baby 719 · Bakery 591 · Meat & Seafood 567 · Fruit & Vegetables 490 · Deli 195 · Deliver More Range 130 · Health & Dietary 57 · Big Pack Value 18 · Back to School 1 · without an online category 19 (in-store-only liquor). Departments such as Health & Dietary, International Foods and the seasonal ones mostly re-list products of other departments; each product is counted once, under its primary department. On special: 8,427 (33.5%) — 1,950 half price, 1,963 multibuy, 3,942 special price, 405 reduced to clear, 127 other % off, 40 while stocks last; 4,000 products carried "Every Day" and 601 "New".
Store prices differ. With postcode 6000, Perth's Coles Central Raine Square (store 481) returned 228 "milk" results against 324 at the default online store; of the 137 products both carry, 3 had a different price (for example a juice on special online at $3.80 and $5.00 in Perth). Range differs more than price — choose the store that matches your market.
Accuracy. 16 products chosen across every promotion type (half price, % off, multibuy, special, reduced to clear, online-only, new, every day, fresh by weight, unavailable, liquor, non-food) were compared field by field with their live coles.com.au product pages: title, brand, barcode, price, was price, saving, unit price, roundel, multibuy wording, availability, canonical URL, size, ingredients, allergen statement, country-of-origin statement, energy per 100 g and category — 288 of 288 values matched.
Big runs need a big enough "Maximum cost per run"
Apify stops every pay-per-result run at its Maximum cost per run (you set it in the run options; the platform also sets a default). The Actor reads that limit at start, stops cleanly when it is reached and says so — for example "Saved 28 products — this run's maximum cost ($0.05) covers 28 results at the current price. Raise 'Maximum cost per run' to get more." The run still ends as Succeeded, and you pay only for the products saved. For the whole catalogue, set the limit to cover ~25,500 results.
How Coles specials, promotions and unit prices work
The weekly cycle. Coles' catalogue specials run Wednesday to Tuesday; schedule runs for Wednesday (recipe #14) to capture each cycle once.
What counts as a special. isOnSpecial is true for every temporary promotion: Coles' "SPECIAL" promotions (special price with a was price, 1/2 Price, % Off, multibuy, reduced to clear, while stocks last) and any product shown with a was price higher than the price. Coles' "Every Day" (everyday low price) and "New" roundels are not specials: they are reported in promotionType, promoLabel, specialType = EVERYDAY_LOW_PRICE and isNew.
The roundels, and how they map to fields:
| Roundel on coles.com.au | specialType | Other fields |
|---|---|---|
| 1/2 PRICE | HALF_PRICE | isHalfPrice: true, wasPrice, savings, savingsPercent |
| 40% OFF, 30% OFF … | PERCENT_OFF | wasPrice, savingsPercent |
| SPECIAL (with "Save $X", "Was $Y") | SPECIAL | wasPrice, savings |
| SPECIAL (multibuy, "Pick any 2 for $15") | MULTIBUY | isMultibuy: true, multibuyQuantity, multibuyPrice, multibuyPricePerItem |
| ONLINE ONLY | any of the above | isOnlineOnlySpecial: true |
| REDUCED TO CLEAR | REDUCED_TO_CLEAR | wasPrice, savings |
| WHILE STOCKS LAST | WHILE_STOCKS_LAST | wasPrice when shown |
| EVERY DAY | EVERYDAY_LOW_PRICE | isOnSpecial: false |
| NEW | — | isNew: true, promoLabel: "New" |
| Bonus credit / collectable | — | bonusOffer, promotionType: BONUSCOLLECTABLE |
Multibuy arithmetic. Coles stores a multibuy as a quantity and a price per item inside the deal: "Pick any 2 for $15" is quantity 2 at $7.50 each. The Actor gives you both multibuyPricePerItem (7.5) and the deal total multibuyPrice (15), next to the single-item price.
Coles' own specials filter vs. "any special". The half-price, multibuy and online-only options use Coles' own website filters, so the result equals what coles.com.au lists on its specials pages. Coles' specials filter leaves out most reduced-to-clear and while-stocks-last items, so onlySpecials: "any" reads the whole scope and keeps every product on promotion — 8,427 products on 2026-10-18, 450 more than Coles' own "All specials" filter.
Unit prices. Australian law requires supermarkets to show a comparable unit price. Coles uses $ per 100 g / 100 mL for most packaged goods, $ per 1 kg / 1 L for larger packs and fresh food, $ per each for countable items (and $ per metre for wraps and foil). unitPrice and unitOfMeasure hold the number and unit; unitPriceText is the label text. On 2026-10-18 the units were 100 g (9,401 products), 1 L (3,494), 1 each (3,466), 100 mL (3,147) and 1 kg (2,977). Compare products only within the same unit — or convert (1 kg = 10 × 100 g).
Products sold by weight. Variable-weight items (isSoldByWeight, 219 products) show an approximate size ("approx. 1.4kg") priced at that weight; unitPrice per kg is what you pay per kilo.
Unavailable products. Coles lists out-of-stock lines without a price: isAvailable: false, price: null (160 products on 2026-10-18).
How the Actor works
- It reads the same public product data coles.com.au loads in your browser — the live department menu, listings, search results and product details — through Apify Proxy. No login, cookies or account.
- The department list is read from the site on every run, so new and seasonal ranges are picked up automatically.
- Up to 240 products come per request, in a fixed sort order, with price, specials, barcode, categories and label data in one answer. Queries over Coles' 5,000-result limit (Pantry, 6,160 products) are split into their categories.
- A query that returns fewer distinct products than Coles says it holds is read again in another order to fill the gaps;
SUMMARYreports every query's coverage. Products are de-duplicated by their Coles number. - Refused connections are replaced at once and slow answers re-sent in parallel. Rows stream into the dataset as they arrive; a run that cannot reach Coles fails with the reason instead of reporting an empty success.
What you pay
A fixed price per product in the dataset — compute, proxies and every request are included. No monthly rental, no start fee, no charge for duplicates that are skipped or for products filtered out by "Only specials".
| Apify plan | Price per 1,000 products |
|---|---|
| Free | $2.00 |
| Bronze | $1.77 |
| Silver | $1.53 |
| Gold, Platinum, Diamond | $1.30 |
Examples
| Run | Products | Free | Bronze | Silver | Gold + |
|---|---|---|---|---|---|
| A category or a few searches | 1,000 | $2.00 | $1.77 | $1.53 | $1.30 |
| Weekly specials (all, 2026-10-18) | 8,427 | $16.85 | $14.89 | $12.92 | $10.96 |
| A large slice | 10,000 | $20.00 | $17.67 | $15.33 | $13.00 |
| The whole catalogue (2026-10-18) | 25,153 | $50.31 | $44.45 | $38.56 | $32.70 |
| Four weekly whole-catalogue exports | 100,612 | $201.22 | $177.78 | $154.24 | $130.80 |
Half-price only (1,951 products on 2026-10-18) costs $3.90 on the Free plan and $2.54 on Gold and above.
Maximum cost per run
Every pay-per-result run has a Maximum cost per run — set it in the run options (Console: "Run options" → "Maximum cost per run"; API: maxTotalChargeUsd). The Actor converts it into a number of products at your plan's price before it starts, collects up to that number, then stops with a clear status message. The run ends Succeeded and you are charged for exactly the products in the dataset. Raise the limit before big exports (whole catalogue ≈ $51 on the Free plan, ≈ $33 on Gold).
Integrations
API (curl)
curl -X POST "https://api.apify.com/v2/acts/logiover~coles-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"categories":["Fruit & Vegetables"],"maxItems":600}'
Node.js (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('logiover/coles-scraper').call({onlySpecials: 'halfPrice',maxItems: 0,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const cheapest = items.filter((p) => p.unitOfMeasure === '100g').sort((a, b) => a.unitPrice - b.unitPrice);console.log(items.length, cheapest[0].title, cheapest[0].unitPriceText);
Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("logiover/coles-scraper").call(run_input={"searchTerms": ["gluten free pasta"],"maxItems": 300,})for p in client.dataset(run["defaultDatasetId"]).iterate_items():per100 = p.get("nutritionPer100g") or {}print(p["title"], p["price"], p["unitPriceText"], per100.get("sugarsG"), p["barcode"])
Make, Zapier and n8n
Use the Apify app / node: Run an Actor with logiover/coles-scraper and your JSON input, then Get dataset items and map the fields into Google Sheets, Airtable, HubSpot, Slack, email or your database. A typical scenario: every Wednesday, run with onlySpecials: "halfPrice", filter on department, post the list to a Slack channel.
Google Sheets
Use the Google Sheets integration on the Actor's Integrations tab to append or replace a sheet after every run, or import the CSV export.
Airtable
Send items through Make / Zapier / n8n with productId as the primary field, so weekly runs update existing records.
Looker Studio, Power BI, Tableau and other BI tools
Point the tool at the dataset's CSV or JSON endpoint (https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv) or at your warehouse table. scrapedAt gives the time axis; department / categoryPath the drill-down.
Data warehouses (BigQuery, Snowflake, Postgres, S3)
Fetch …/items?format=json (or csv) after each run — a webhook can trigger the loader — and append to a table keyed on productId + scrapedAt.
Webhooks
Add a webhook on Run succeeded to call your endpoint with the run and dataset ids — ideal for a weekly specials pipeline.
Scheduling
Apify Schedules run the Actor on any cron with a time zone: 0 6 * * 3 in Australia/Sydney for the weekly specials, 0 5 * * * for a daily watchlist.
MCP and AI agents
The Actor works as a tool through the Apify MCP server, so Claude, ChatGPT or your own agent can call it ("half-price coffee at Coles this week, sorted by price per 100 g") and receive structured rows with canonical URLs.
Performance tips
- Leave
maxItemsat 0 for full exports — the Actor splits and parallelises by itself; a whole-catalogue run takes about a minute. - Use "Only specials" when specials are all you need: half price reads ~1,950 products instead of ~25,000.
- Turn
includeNutritionoff for price-only monitoring: about half the data volume, same prices and barcodes. - Use
productIdsfor watchlists — up to 20 products per request, the fastest way to track a fixed basket. - One store per run. For several stores, start one run per
storeId/postcode(they can run at the same time). - Keep weekly datasets. Price history is the comparison of runs; name your runs or export them with the date.
- Set the Maximum cost per run to cover the expected number of products before big runs (see the table above).
Troubleshooting
| Status message / outcome | What it means | What to do |
|---|---|---|
Saved N products (every matching product read) in X s — prices from … | COMPLETED — everything your input matches was read | Nothing |
Saved N products (max results reached) … | COMPLETED at maxItems | Raise maxItems (0 = no limit) |
Saved N products — this run's maximum cost ($X) covers N results … | COMPLETED, stopped at the Maximum cost per run (SUMMARY.stoppedBy = MAX_COST) | Raise "Maximum cost per run" |
Saved 0 products — this run's maximum cost ($X) does not cover a single result … | The limit is below the price of one product | Raise the limit |
Saved N products (stopped at the run time limit) … | The run timeout ended the run; rows so far are saved | Raise the run timeout (default 3,600 s) |
… N page(s) could not be read. | PARTIAL — most of the data is there, some pages failed after all retries | Run again; the SUMMARY lists the queries |
No products matched on Coles … | EMPTY_RESULT — Coles answered, nothing matches | Check spelling, scope and the specials option |
Store 602 (…) does not publish online prices … | Failed (bad input) — some small-format stores have no online prices | Use another store number or a postcode |
Coles has no store number … | Failed (bad input) | Use the number from the store's page on coles.com.au/find-stores |
Coles does not know the postcode or suburb … | Failed (bad input) | Use a 4-digit Australian postcode |
Category not found on Coles: "…" (warning) | That entry was skipped, the rest ran | Use a coles.com.au category URL or a department name |
Product …: not found at this store (in SUMMARY.notes) | The product number does not exist (or is not ranged at the chosen store) | Check the number in the product URL |
No products collected: no page could be fetched … | BLOCKED / FETCH_FAILED — Coles could not be reached at all | Run again later; if it persists, contact us |
Could not read the Coles category list … | The menu could not be loaded, so nothing could be planned | Run again later |
Every run also writes a SUMMARY record (key-value store) with the outcome, store, every query with the number of products Coles reported, coverage, duplicates skipped, products without price, notes and the stop reason.
Honest limits
- Default prices are Coles Online's (the Melbourne online store coles.com.au shows before you choose a location). For local prices, set
storeIdorpostcode; a few small-format stores publish no online prices — the Actor tells you and the postcode option skips them. - Range differs by store. A CBD store lists far fewer products than the online store; exports at a chosen store reflect that store's range.
- No stock quantities and no in-store aisle numbers. Coles shows anonymous visitors only "available / unavailable" and "Aisle information is not available".
- Unavailable products have no price (160 on 2026-10-18); they are kept with
isAvailable: false. - No ratings or reviews.
- Tobacco is not exported — Coles does not sell it online and hides the department.
- Label data is Coles' text. Ingredients, allergens and nutrition are copied as published; always read the physical label for health decisions. Nutrition values written as "<1 g" stay in
nutritionTextonly. - Coles' search answers at most 5,000 results per query — handled by splitting; you never need to split yourself.
- A handful of listings are counted but never returned by Coles (3 of 34,139 query results on 2026-10-18); the run's
SUMMARYnames the queries concerned. - Specials change every Wednesday, and prices can change any day; a dataset is a snapshot at
scrapedAt.
Comparison with manual collection
| This Actor | Copying from coles.com.au by hand | Weekly catalogue PDF | |
|---|---|---|---|
| Products covered | Whole online range (25,153 on 2026-10-18) | What you have time to click | A few hundred featured specials |
| Time for the full range | ~1 minute | Weeks | — |
| Barcodes (EAN/GTIN) | Yes, 91% of products | Not shown on the page | No |
| Unit prices | Yes, number + unit | Yes, as text | Partly |
| Ingredients, allergens, nutrition | Yes, nutrition as numbers | Per product page | No |
| Store-specific prices | Any store or postcode | One store at a time | Regional editions |
| History | Keep every weekly dataset | Spreadsheet discipline | Archive PDFs |
| Output | JSON, CSV, Excel, API | Copy-paste | |
| Repeatable on a schedule | Yes | No | No |
FAQ
What is Coles Scraper?
An Apify Actor that exports Coles products — prices, specials, unit prices, barcodes, categories, ingredients, allergens, nutrition — as JSON, CSV or Excel, for the whole catalogue or any part of it.
Is there an official Coles API for product prices?
No public one. This Actor reads the public data coles.com.au loads for every visitor and returns it structured — the practical Coles API alternative.
How do I scrape Coles prices?
Enter a search term or category (or nothing, for the whole catalogue), click Start, export the dataset. No coding needed; developers can use the API.
Can I download the entire Coles product catalogue?
Yes. Run with an empty scope and maxItems: 0. On 2026-10-18 that was 25,153 products in 70 seconds.
How many products does Coles sell online?
25,153 unique products in 21 departments at the default online store on 2026-10-18. Individual stores range fewer.
How do I get the Coles half price specials every week?
Set Only specials to "Half price only" and schedule the Actor every Wednesday morning (Sydney time). On 2026-10-18 there were 1,951 half-price products.
When do Coles specials change?
Weekly specials start on Wednesday and run to the following Tuesday; online-only and clearance deals can change any day.
Can I track Coles price changes over time?
Yes — schedule runs (daily or weekly), keep each dataset, and compare price, wasPrice and promoLabel by productId (recipe #14 shows the code).
Can I get prices for my local Coles store?
Yes — give storeId or postcode; storeName and storeState on each row show which store priced it.
Do Coles prices differ between states and stores?
Sometimes, and the range differs a lot: on 2026-10-18, 3 of 137 shared milk products were priced differently in a Perth store, which carried 228 results against 324 online.
Can I get Coles product barcodes (EAN / GTIN)?
Yes — 91.2% of products (22,506 EAN-13, 412 EAN-8, a few UPC on 2026-10-18); loose fresh items usually have none.
Does it include nutrition information, ingredients and allergens?
Yes (option on by default): 84% of food products have ingredients and 75% a nutrition panel, given per 100 g and per serving as numbers.
How do I export Coles data to Excel or CSV?
Click Export in the Output tab and choose Excel or CSV, or download …/datasets/DATASET_ID/items?format=csv.
Can I send Coles data to Google Sheets automatically?
Yes — use the Google Sheets integration on the Actor's Integrations tab, or Make / Zapier / n8n.
How do I compare Coles and Woolworths prices?
Combine with a Woolworths dataset using the same field names (the publisher's Woolworths Scraper on Apify Store) and match on barcode — recipe #15.
Do I need a Coles account, login or Flybuys?
No — public data only; no account, cookies or Flybuys number.
Do I need my own proxies?
No — Apify Proxy is used automatically and included in the price.
How fast is the Coles scraper?
100 products in ~4 s, 1,000 in ~10 s, the whole catalogue in 70 s (2026-10-18).
How much does it cost to scrape Coles?
$2.00 per 1,000 products on Free, down to $1.30 on Gold+ — the whole catalogue ≈ $50 / $33. Proxies and compute included.
What is "Maximum cost per run"?
A per-run spending limit; the Actor stops cleanly at it and you pay only for saved products.
Why did my run stop before Max results?
Either everything matching was read, or the Maximum cost per run was reached — the status message says which.
Why do some products have no price?
They are unavailable — Coles lists them without a price (isAvailable: false).
How is the unit price calculated?
Coles publishes it per 100 g, 100 mL, 1 kg, 1 L or each: unitPrice + unitOfMeasure, and unitPriceText as on the label.
How are multibuy deals ("Any 2 for $X") stored?
As multibuyQuantity, multibuyPrice (deal total) and multibuyPricePerItem, wording in multibuyLabel.
What is the difference between Special, 1/2 Price, Every Day and Down Down?
"1/2 Price", "% Off", "Special" and multibuys are temporary promotions (isOnSpecial: true). "Every Day" marks Coles' everyday low prices and "Down Down" is Coles' long-running price-reduction campaign — permanent price programs, not weekly specials. See the Glossary.
Can I get only Coles brand (private label) products?
Search Coles (or a category) and filter brand for Coles, Coles Finest, Coles Simply, Coles Kitchen and the other Coles brands — 2,462 products carried the plain Coles brand on 2026-10-18.
Can I scrape a list of Coles product URLs or IDs?
Yes — productIds (or startUrls); each becomes a full row.
Can I scrape Liquorland products and alcohol content?
Yes — Liquorland is included with alcoholPercent, standardDrinks, region and food pairing.
Can I download Coles product images?
Each row has imageUrl (front) and imageUrls (all views, often the back-of-pack label) on Coles' public image server.
Does it include online-only specials?
Yes — flagged isOnlineOnlySpecial; the "Online-only specials" option exports just them (282 on 2026-10-18).
Does it scrape Coles ratings and reviews?
No — product, price, promotion and label data only.
Can I get stock levels or aisle locations?
No — Coles shows visitors only available / unavailable (isAvailable) and no aisle numbers.
Can I use it with ChatGPT, Claude or other AI agents?
Yes — through the Apify MCP server or the API.
What happens if Coles blocks the scraper?
Refused connections are replaced at once (2 of 213 requests on 2026-10-18); if Coles is unreachable the run fails with the reason, never an empty "success".
How do I schedule a weekly Coles specials report?
Console → Schedules → Create: cron 0 6 * * 3, time zone Australia/Sydney, Actor input {"onlySpecials":"any","maxItems":0}. Add a Google Sheets or Slack integration to deliver it.
Can you add a field or a feature I need?
Probably — open an issue on the Actor's Issues tab and describe it.
Glossary
1/2 Price — half the was price for the special week (isHalfPrice, HALF_PRICE).
% Off — another percentage discount, e.g. 40% Off (PERCENT_OFF).
Special — a temporary lower price with "Save $X" / "Was $Y" (SPECIAL).
Multibuy / "Pick any 2 for $X" — a deal price for a set number of items, usually mix-and-match (MULTIBUY).
Online only — a special for online orders only (isOnlineOnlySpecial).
Reduced to clear — a clearance price on a line being cleared (REDUCED_TO_CLEAR).
While stocks last — a special limited to remaining stock (WHILE_STOCKS_LAST).
Every Day — Coles' everyday low price: lasting, not a weekly special (EVERYDAY_LOW_PRICE).
Down Down — Coles' long-running price-cut campaign; like Every Day, a lasting price rather than a weekly special. Coles' label is passed through in promotionType / promoLabel.
New — Coles' roundel for newly ranged products (isNew).
Bonus credit — collectables such as "Bonus Cookware Credit" on selected products (bonusOffer).
Flybuys points — extra points offers, e.g. "Triple points" (promotionType: FLYBUYS).
Was price — the regular price before the current special (wasPrice).
Unit price / comparable price — price per standard unit (100 g, 1 L, 1 kg, each) that Australian supermarkets must display (unitPrice).
Sold by weight — variable-weight items priced per kilo, approximate size (isSoldByWeight).
Purchase limit — max units per order; the promotional limit applies at the special price.
Minimum shelf life — life guaranteed on delivery for fresh food, e.g. "Life 6 days min".
Department › Category › Sub-category — the online aisle hierarchy (categoryPath).
Merchandise hierarchy — Coles' internal trade hierarchy, profit centre › class (merchandise*).
GTIN / EAN — the number under the barcode; the key for matching products across retailers (barcode).
Country of origin label — Australia's mandatory food origin label with the share of Australian ingredients (countryOfOriginStatement).
Default store — the store coles.com.au prices before a location is chosen: the Melbourne online store, id 7674.
Is it legal to scrape Coles?
This Actor reads only publicly available product information — names, prices, promotions, categories and label data that any visitor sees on coles.com.au without logging in. It collects no personal data: no customer accounts, no reviews, no names or contact details. Product and price information is commercial data published to be seen. You are responsible for how you use the data: respect Coles' terms of use, intellectual-property rights in images and descriptions, and the laws that apply to you (including Australian consumer law when you publish price comparisons). This is not legal advice; if in doubt, consult a lawyer.
Legal & trademark disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Coles Group Limited, Coles Supermarkets Australia Pty Ltd, Liquorland or Flybuys. All trademarks mentioned are the property of their respective owners.
Changelog
- 1.0 (2026-10-18) — First release. Whole catalogue (departments read live from coles.com.au), categories by URL / path / name, search terms, coles.com.au URLs, product IDs; specials filters (any, half price, multibuy, online only); prices at any Coles store or postcode; barcodes, unit prices, multibuy deal maths, promotion types and roundel labels; ingredients, allergens, nutrition panel as numbers, country of origin with % Australian ingredients, alcohol content; automatic splitting past Coles' 5,000-results-per-query limit; gap-filling re-reads with per-query coverage in
SUMMARY; de-duplication by product number; clean stop at the Maximum cost per run.
Support
Questions, a missing field, or a run that did something unexpected? Open an issue on the Issues tab — we reply within 24 hours. Include the run link so we can read the log and the SUMMARY.