# Coles Product Scraper - Australian Supermarket Prices & Deals (`tenfoldfleet/coles-product-scraper`) Actor

Get Coles Australia supermarket prices by keyword, aisle link, the weekly specials list or a product link. Each row has shelf and was price, unit price, half-price or multibuy deal, stock flag, brand and aisle; product links add the GTIN. $1.30 per 1,000 products; ads, empty searches, errors free.

- **URL**: https://apify.com/tenfoldfleet/coles-product-scraper.md
- **Developed by:** [Tenfold Fleet](https://apify.com/tenfoldfleet) (community)
- **Categories:** E-commerce, Agents, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Coles Product Scraper do?

**Coles Product Scraper** pulls **product and price data from Coles Supermarkets Australia** (coles.com.au) for any **keyword, category or aisle page, specials page or product link**. Every row carries the **shelf price, was price, saving, unit price**, the **half-price or multibuy deal** ("Pick any 2 for $4"), availability, brand, pack size, department, category and aisle, plus a product image and link. Product links and product ids also return the **GTIN barcode, ingredients, allergens and country of origin**.

Think of it as a **Coles prices API** you can call from a schedule, a spreadsheet or an AI agent: it reads the same public JSON that the Coles website loads in the browser, over plain HTTP, with no browser and no login. **$1.30 per 1,000 products**, no start fee and no per-search fee.

Not affiliated with, endorsed or sponsored by Coles Group or Coles Supermarkets Australia.

**Comparing Australian supermarkets?** Run it next to our [Woolworths Product Scraper](https://apify.com/tenfoldfleet/woolworths-product-scraper) and [ALDI Australia Scraper](https://apify.com/tenfoldfleet/aldi-australia-scraper): the three give you Coles, Woolworths and ALDI shelf and unit prices for the same basket.

### Why use it?

- **Grocery price tracking**: watch the price and unit price of a basket of products every day or week and build your own price history by product `id`.
- **Weekly specials**: paste `https://www.coles.com.au/on-special` for the full specials list (about 8,000 products), or add `?filter_Special=halfprice` or `?filter_Special=multibuy` for one kind of deal.
- **Category and range reviews**: list a whole aisle such as `/browse/dairy-eggs-fridge/milk` and compare brands, pack sizes and price per litre or per kg.
- **Competitor pricing for suppliers and brands**: see where your products sit on price and promotion against everything else in the aisle.
- **Price comparison apps and research**: feed Coles prices into an app, a dashboard or an inflation study, side by side with Woolworths and ALDI.
- **Catalogue enrichment**: add GTIN barcodes, ingredients and images to your own product list from Coles product links.

What sets it apart:

- **Sponsored tiles removed.** Coles mixes paid placements and banner tiles into each results page; they are dropped and never charged, and every product is saved once per search.
- **Specials made easy to filter**: `isOnSpecial`, `isHalfPrice`, `specialType`, `promoText`, and parsed `multibuyQuantity` / `multibuyPrice` for multibuy deals.
- **Keywords, categories, specials and product links in one list**, with optional sort by price or unit price.
- **Works from the cloud**: requests go through Apify datacenter proxy, and any page Coles blocks is retried automatically through Australian residential IPs. You pay the same per-product price either way.
- **Free failures**: empty searches, unknown category links and blocked requests cost nothing.

### What data can it extract?

| Field | Example |
|---|---|
| `id`, `productUrl` | `8150288`, link to the Coles product page |
| `name`, `brand`, `size`, `fullName` | `Full Cream Milk`, `Coles`, `3L`, `Coles Full Cream Milk 3L` |
| `price`, `wasPrice`, `savingsAmount`, `savingsPercent` | `2.5`, `5`, `2.5`, `50` (AUD) |
| `unitPrice`, `unitMeasure`, `unitPriceText` | `1.23`, `100g`, `$1.23/ 100g` |
| `isOnSpecial`, `isHalfPrice`, `specialType`, `promoText` | `true`, `true`, `PERCENT_OFF`, `1/2 Price \| save $2.50` |
| `multibuyQuantity`, `multibuyPrice` | `2`, `4` for "Pick any 2 for $4" |
| `isAvailable`, `availabilityType`, `retailLimit` | `true`, `InStoreAndOnline`, `20` |
| `department`, `category`, `aisle` | `Dairy, Eggs & Fridge`, `Milk`, `Full Cream Milk` |
| `imageUrl` | product photo on the Coles image CDN |
| `gtin`, `ingredients`, `allergens`, `countryOfOrigin` | product links only: `9300601186945`, ... |
| `searchTerm`, `position`, `totalResults`, `scrapedAt` | your input, rank on the page, results Coles found, timestamp |

### How to scrape Coles prices

1. Click **Try for free**.
2. Add one or more **Search terms or Coles URLs**, one per line: keywords such as `milk`, category links copied from the Coles menu, the specials page, or product links.
3. Set **Max products per search** (default 200; use 10000 for a full list).
4. Optionally choose **Sort by**, turn on **Only specials**, or turn off **Include unavailable products**.
5. Click **Start** and download the results as **JSON, CSV, Excel or HTML**, or fetch them through the Apify API.

### How much does it cost?

**$0.0013 per product saved, or $1.30 per 1,000 products.** Apart from Apify's $0.00005 Actor start event there is no start fee and no fee per search. **Sponsored tiles, duplicates, products removed by your filters, unavailable products that Coles shows without a price, searches with no results, unknown links and blocked requests are free**: failures appear as rows with an `error` field and are not charged. The whole specials list (about 8,000 products) costs about $10.40. On the Apify free plan, the $5 monthly credit covers about 3,800 products. Set a **maximum cost per run** and the Actor stops when it is reached.

### Input

```json
{
    "searchTerms": [
        "milk",
        "tim tam",
        "https://www.coles.com.au/on-special?filter_Special=halfprice",
        "https://www.coles.com.au/browse/dairy-eggs-fridge/milk",
        "https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288"
    ],
    "maxProductsPerSearch": 200,
    "sortBy": "relevance",
    "onlySpecials": false,
    "includeUnavailable": true
}
```

`sortBy` is one of `relevance`, `priceAscending`, `priceDescending` or `unitPriceAscending`.

### Output

```json
{
    "id": "6538290",
    "name": "Mini Original Cookies Multipack 10 Pack",
    "brand": "Oreo",
    "size": "204g",
    "fullName": "Oreo Mini Original Cookies Multipack 10 Pack 204g",
    "price": 2.5,
    "wasPrice": 5,
    "savingsAmount": 2.5,
    "savingsPercent": 50,
    "unitPrice": 1.23,
    "unitMeasure": "100g",
    "unitPriceText": "$1.23/ 100g",
    "isOnSpecial": true,
    "specialType": "PERCENT_OFF",
    "isHalfPrice": true,
    "promoText": "1/2 Price | save $2.50",
    "multibuyQuantity": null,
    "multibuyPrice": null,
    "isOnlineOnlySpecial": false,
    "isAvailable": true,
    "availabilityType": "InStoreAndOnline",
    "retailLimit": 20,
    "isWeighted": false,
    "department": "Chips, Chocolates & Snacks",
    "category": "Biscuits & Cookies",
    "aisle": "Multipack Biscuits",
    "merchandiseCategory": "BISCUITS & COOKIES",
    "description": "OREO MULTIPACK ORIGINAL MINI COOKIES:.:204 GRAM",
    "imageUrl": "https://cdn.productimages.coles.com.au/productimages/6/6538290.jpg",
    "productUrl": "https://www.coles.com.au/product/oreo-mini-original-cookies-multipack-10-pack-204g-6538290",
    "searchTerm": "https://www.coles.com.au/on-special?filter_Special=halfprice",
    "position": 1,
    "totalResults": 1809,
    "scrapedAt": "2026-10-30T00:39:41.512Z"
}
```

Download the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.

### Tips

- **Tracking a fixed basket?** Put the product links (or just the Coles product ids, the number at the end of each link) in the input. Each one is a single request and also returns the GTIN barcode.
- **Only want deals?** Turn on **Only specials**, or use the specials page link with `filter_Special=halfprice`, `multibuy` or `onlineonly`.
- **Schedule it**: save your input as a task and run it daily or weekly from the **Schedules** tab.
- Prices are the online prices coles.com.au shows without a chosen store. Flybuys member prices and reviews are not collected.

### Use it with AI agents (MCP)

Give Claude, ChatGPT, Cursor or any MCP client this Actor as a tool through Apify's MCP server: add `https://mcp.apify.com?tools=tenfoldfleet/coles-product-scraper` as a remote MCP server and sign in with your Apify account. The agent fills in the input, runs the Actor and reads the products itself, at the same per-product price.

### FAQ

#### Can I look up a Coles product by barcode?

Not directly: Coles search does not match barcodes, so a barcode returns a free error row. Use the product link or the Coles product id instead; that row includes the `gtin` barcode.

#### Why do I get fewer rows than the results count?

Sponsored tiles and duplicates are removed, **Max products per search** caps each input, and the **Only specials** and **Include unavailable products** filters skip products (skipped products are free).

#### Can I get every product on special?

Yes. Add `https://www.coles.com.au/on-special` and set **Max products per search** to 10000.

#### Do I need a proxy?

No setup is needed. The default Apify Proxy setting is used for the first try, and blocked pages are retried through Australian residential IPs automatically.

#### Does it cover Woolworths or ALDI?

No, this Actor covers Coles only. Use [Woolworths Product Scraper](https://apify.com/tenfoldfleet/woolworths-product-scraper) and [ALDI Australia Scraper](https://apify.com/tenfoldfleet/aldi-australia-scraper) for the other two.

#### Support

Found a problem or need another field? Open an issue in the **Issues** tab.

This Actor reads only publicly available product data from coles.com.au. It does not log in, use an account or collect personal data. Coles is a trademark of its owner; use the data in line with the site's terms and applicable laws.

# Actor input Schema

## `searchTerms` (type: `array`):

One per line. A keyword ("milk", "tim tam") returns the products Coles lists for that search. A category link (https://www.coles.com.au/browse/dairy-eggs-fridge/milk) returns that aisle or department. The specials link (https://www.coles.com.au/on-special, optionally with ?filter_Special=halfprice or multibuy) returns the current specials. A product link (https://www.coles.com.au/product/...-8150288) or a bare Coles product id (8150288) returns that one product with its GTIN barcode, ingredients and country of origin. Coles search does not match barcodes.

## `maxProductsPerSearch` (type: `integer`):

How many products to save for each keyword, category or specials link. Coles shows 48 per page; set a large number (e.g. 10000) to get the full list. Product links always return one product. On the Apify free plan, the $5 monthly credit covers about 3,800 products.

## `sortBy` (type: `string`):

Order of the results, as in the sort menu on coles.com.au.

## `onlySpecials` (type: `boolean`):

Save only products on special (price cuts, half price, multibuy deals such as "2 for $4"). Other products are skipped and not charged.

## `includeUnavailable` (type: `boolean`):

Turn off to skip products Coles marks as unavailable (skipped products are not charged).

## `proxyConfiguration` (type: `object`):

Requests go through Apify datacenter proxy first; any page Coles blocks is retried automatically through Australian residential IPs, at no extra charge to you.

## Actor input object example

```json
{
  "searchTerms": [
    "milk",
    "tim tam",
    "https://www.coles.com.au/on-special?filter_Special=halfprice",
    "https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288"
  ],
  "maxProductsPerSearch": 50,
  "sortBy": "relevance",
  "onlySpecials": false,
  "includeUnavailable": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "milk",
        "tim tam",
        "https://www.coles.com.au/on-special?filter_Special=halfprice",
        "https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288"
    ],
    "maxProductsPerSearch": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/coles-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": [
        "milk",
        "tim tam",
        "https://www.coles.com.au/on-special?filter_Special=halfprice",
        "https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288",
    ],
    "maxProductsPerSearch": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/coles-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "milk",
    "tim tam",
    "https://www.coles.com.au/on-special?filter_Special=halfprice",
    "https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288"
  ],
  "maxProductsPerSearch": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call tenfoldfleet/coles-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tenfoldfleet/coles-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FJgnUQTROmQIZTRRQ/builds/iRhNDTOBjtZgIwkZa/openapi.json
