# Australian Supermarket Prices: Coles, Woolworths & ALDI (`serenido/au-supermarket-prices`) Actor

Search Coles, Woolworths and ALDI at once. Get price, was price, specials, unit price per kg or L, barcode and stock for every product, plus a free cheapest-store comparison. Reliable auto-retry.

- **URL**: https://apify.com/serenido/au-supermarket-prices.md
- **Developed by:** [Serenido](https://apify.com/serenido) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.21 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Australian Supermarket Prices do?

Search **Coles**, **Woolworths** and **ALDI Australia** at the same time and get every product as a clean row:

- **Price**, **was price**, **saving** and the **special** (1/2 price, multibuy like "Pick any 2 for $7", price drops)
- **Unit price** as each store shows it, plus a **normalized price per kg, per L or per each** so you can compare stores fairly
- **Barcode** (Woolworths), size, brand, category, stock, product link and image
- A free **cheapest-store comparison** for every search term

Use it for grocery price comparison, price monitoring, specials tracking, market research and retail analytics.

### Why this one?

- **3 supermarkets in one run.** No need to run and merge three different tools.
- **Reliable.** Each store gets the connection that works best for it, and the tool switches automatically if one gets blocked. Every request retries on its own. If one store is slow, the other two still finish.
- **Accurate.** In our tests, unit prices matched price divided by pack size on 800+ products, and prices matched each store's own product page. Products sold by weight are labelled clearly (`priceUnit`: "per kg" or "each (estimated by weight)").
- **Fair billing.** You pay only for products saved. Products with no price, unavailable products (unless you ask for them), Woolworths marketplace items and unrelated "filler" products are skipped and **not charged**.
- **Fast small runs.** Ideal for apps and AI agents that look up a few products at a time.

### How much does it cost?

You pay per product saved. Check the **Pricing** tab for the current price. The comparison is free.

### How to use it

1. Add **Search terms** (e.g. milk, bread, eggs).
2. Choose the stores (all three are on by default).
3. Set **Max products per store** and **Sort by** (relevance, price, or unit price for best value).
4. Optional filters: specials only, min and max price.
5. Click **Start**. Download as Excel, CSV, JSON or HTML, or use the API.

### Input example

```json
{
  "searchTerms": ["milk", "eggs"],
  "maxItemsPerStore": 20,
  "sortBy": "unit_price_low",
  "specialsOnly": false
}
```

### Output example

```json
{
  "store": "Woolworths",
  "searchTerm": "milk",
  "name": "Woolworths Full Cream Milk 3L",
  "brand": "Woolworths",
  "size": "3L",
  "price": 4.95,
  "priceUnit": "each",
  "wasPrice": null,
  "onSpecial": false,
  "specialLabel": null,
  "unitPriceText": "$1.65 / 1L",
  "pricePerUnit": 1.65,
  "perUnit": "L",
  "barcode": "9300633556150",
  "available": true,
  "productUrl": "https://www.woolworths.com.au/shop/productdetails/888140"
}
```

**Cheapest-store comparison** (free, in the `COMPARISON` record):

```json
{ "searchTerm": "milk", "comparedPer": "L", "cheapestStore": "ALDI",
  "stores": [ { "store": "ALDI", "pricePerUnit": 1.59, "name": "Regular Soy Milk 1L", "price": 1.59 },
              { "store": "Woolworths", "pricePerUnit": 1.65, "name": "Woolworths Full Cream Milk 3L", "price": 4.95 } ] }
```

### Good to know

- **Price sorts** show products named after your search first (a "coffee" search opens with coffee, not with the cheapest tea bags), cheapest first. For unit price, products are compared on the same unit (per L for milk, per kg for cheese).
- **ALDI** sells these products in store, not online. Prices are ALDI's listed in-store prices.
- **Prices** are the stores' standard online prices. Some products can cost a little more or less in a specific store.
- Products **sold by weight** (meat, fruit, deli): Woolworths and ALDI show the price per kg; Coles shows an estimated price per piece plus the price per kg.

### Use cases

- **Price comparison** apps and websites
- **Price monitoring**: schedule daily runs and track specials and price changes
- **Market and retail research**: compare brands, sizes and value across Australia's big supermarkets
- **AI agents**: look up current grocery prices by API

### Is it legal?

It collects only public product and price information, with no personal data. Check that your use follows each store's terms and the law where you are.

# Actor input Schema

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

Products to search for, one per line, e.g. milk, bread, eggs.

## `includeColes` (type: `boolean`):

Search Coles.

## `includeWoolworths` (type: `boolean`):

Search Woolworths.

## `includeAldi` (type: `boolean`):

Search ALDI Australia (in-store range and prices).

## `maxItemsPerStore` (type: `integer`):

How many products to collect from each store for each search term.

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

Uses each store's own sorting. ALDI has no unit-price sort, so its results are sorted here.

## `specialsOnly` (type: `boolean`):

Only products currently on special (half price, multibuy, price drop).

## `minPrice` (type: `number`):

Only products at or above this price.

## `maxPrice` (type: `number`):

Only products at or below this price.

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

Also return products that are out of stock or not sold online right now (if they still show a price).

## `includeMarketplace` (type: `boolean`):

Also return third-party Everyday Market items sold through Woolworths.

## `maxConcurrency` (type: `integer`):

How many pages to load at the same time, each with its own IP.

## `customProxy` (type: `object`):

Leave empty (recommended): the tool picks the best connection for each store automatically and switches if one gets blocked. Set only if you need your own proxy.

## Actor input object example

```json
{
  "searchTerms": [
    "milk",
    "bread"
  ],
  "includeColes": true,
  "includeWoolworths": true,
  "includeAldi": true,
  "maxItemsPerStore": 20,
  "sortBy": "relevance",
  "specialsOnly": false,
  "includeUnavailable": false,
  "includeMarketplace": false,
  "maxConcurrency": 8
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `comparison` (type: `string`):

No description

## `all` (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",
        "bread"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("serenido/au-supermarket-prices").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",
        "bread",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("serenido/au-supermarket-prices").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",
    "bread"
  ]
}' |
apify call serenido/au-supermarket-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,serenido/au-supermarket-prices"
        }
    }
}
```

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/OlbnLhxDVqn4PQhAh/builds/lL4YGj9vqpcGImCEU/openapi.json
