# ALDI Australia Scraper - Prices, Special Buys & Catalog (`trev0n/aldi-au-scraper`) Actor

ALDI Australia (aldi.com.au) products and prices: keyword search, categories, Lower Prices / Limited Time Only / Super Savers, weekly Special Buys and the whole catalog. Price, unit price, pack size, images, ingredients, allergens; price monitoring with alerts.

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

## Pricing

from $1.00 / 1,000 results

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

## 🛒 ALDI Australia Scraper — Prices, Special Buys & Catalog

🎯 **Every ALDI Australia product and price in one clean spreadsheet — search, aisles, deal lists, weekly Special Buys and the whole catalog.**

Collect products from **aldi.com.au** with name, brand, shelf price, unit price (per 100 g, per kg, per litre), pack size, category, product images and the Special Buys sale date. Turn on product details for the description, ingredients, allergens and storage instructions. Turn on price monitoring and get only what changed since your last run — with the previous price next to the new one.

### 🚀 What Does It Do?

This scraper automatically reads ALDI Australia's online range and delivers **structured, ready-to-use data** — one row per product. No copying prices by hand — just type a keyword or pick an aisle and hit Start.

💡 **Two modes of operation:**

1. **🔍 Discovery Mode** — search for products ("coffee", "nappies"), pick aisles (Pantry, Freezer, Liquor…), ALDI's deal lists (Lower Prices, Limited Time Only, Super Savers), this week's or upcoming **Special Buys**, a brand, or simply the **whole catalog** (about 3,300 products).
2. **📋 Direct URL Mode** — paste links from aldi.com.au: an aisle, a search, a Special Buys week or a single product page.

### 👥 Who Is This For?

| 🏢 Use Case                            | 💬 How It Helps                                                                                 |
| -------------------------------------- | ----------------------------------------------------------------------------------------------- |
| 📊 **Price-intelligence teams**        | Compare ALDI's shelf and unit prices with Coles and Woolworths every week                       |
| 🏭 **Suppliers & FMCG brands**         | Watch how ALDI's private labels are priced against your products, aisle by aisle                |
| 🛍️ **Deal sites & Special Buys fans**  | Publish the next Special Buys the moment they are announced, with prices, photos and sale dates |
| 📈 **Economists & journalists**        | Build a grocery price index from ALDI's whole range with consistent unit prices                 |
| 🥗 **Nutrition & allergy apps**        | Feed your app with descriptions, ingredients and allergen claims for every product              |
| 🤖 **Shopping-list & budgeting tools** | Show users the cheapest ALDI option per kilo or litre and alert them when a price drops         |

### ✨ Features

- 📚 **Whole catalog in about 30 seconds** — every product ALDI Australia lists online, around 3,300 rows
- 🔍 **Keyword search** — the same results as the search box on aldi.com.au
- 🗂️ **Every aisle and sub-category** — pick from the list or type any category name ("Coffee", "Dogs & Puppy")
- 🏷️ **Deal lists** — Lower Prices, Limited Time Only and Super Savers, plus an option to tag every product that is on a deal
- 🛍️ **Special Buys** — this week's, upcoming or every announced week, each product with its "On Sale Wed 28 Oct" date
- ⚖️ **Unit prices** — price per 100 g, per kg, per litre or per item, ready for fair comparisons
- 🧾 **Product details** — description, ingredients, allergens, "may contain", dietary claims, storage and usage instructions (as far as ALDI publishes them)
- 🖼️ **All product photos** — full-size image links for every product
- 🔁 **Price monitoring** — scheduled runs output only new products, price changes and products that came back, each with the previous price and the change in dollars
- 🔔 **Alerts** — get new Special Buys and price drops in Telegram, Discord, Slack or any webhook
- 🎛️ **Smart Filters** — brand, minimum and maximum price, sort order
- ⚡ **Fast & Scalable** — no browser, thousands of products per minute
- 🧹 **Deduplication** — every product appears once, even when it matches several searches or aisles
- 📤 **Export Anywhere** — Download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM

### 🎛️ Filters & Options

| Option                         | What It Does                                                                  |
| ------------------------------ | ----------------------------------------------------------------------------- |
| 🔍 **Search keywords**         | Products to look for, one search per keyword                                  |
| 🗂️ **Categories & deal lists** | Whole aisles or ALDI's Lower Prices, Limited Time Only and Super Savers lists |
| 🧭 **Sub-categories**          | Any category by name or path, e.g. "Coffee" or "Pets > Dogs & Puppy"          |
| 🛍️ **Special Buys**            | This week's, upcoming, both, or every announced Special Buys week             |
| 📚 **Whole catalog**           | Every product ALDI Australia lists online                                     |
| 🏷️ **Brands**                  | Keep only these brands — or, on its own, every product of the brand           |
| 💲 **Min price**               | Skip products cheaper than this                                               |
| 💰 **Max price**               | Skip products dearer than this                                                |
| ↕️ **Sort**                    | Relevance, price or name order                                                |
| 🧾 **Product details**         | Description, ingredients, allergens and storage for every product             |
| 🏷️ **Tag deals**               | Mark every product that currently sits in a deal list                         |
| 🗜️ **Compact output**          | Only the key columns                                                          |
| 🧹 **Drop empty fields**       | Leave out fields without a value                                              |
| 🔁 **Price monitoring**        | Output only what changed since the last run, with the previous price          |
| 🔔 **Alerts**                  | Telegram, Discord, Slack or webhook message after each run                    |
| 🔢 **Max Results**             | Control how many products to extract per run                                  |
| 🔗 **Direct URLs**             | Optionally provide specific aldi.com.au links to scrape                       |

### 📦 What You Get (Output Fields)

Every product includes:

#### 🛒 Product

| Field    | Example                                                                                                        |
| -------- | -------------------------------------------------------------------------------------------------------------- |
| sku      | `000000000000200998`                                                                                           |
| name     | `Chocolate Chip Brioche Milk Rolls 8 Pack 280g`                                                                |
| brand    | `BON APPETIT`                                                                                                  |
| packSize | `280 g`                                                                                                        |
| url      | `https://www.aldi.com.au/product/bon-appetit-chocolate-chip-brioche-milk-rolls-8-pack-280g-000000000000200998` |
| imageUrl | `https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1000/0161d36f-…`                     |
| images   | `["https://dm.apac.cms.aldi.cx/…", "https://dm.apac.cms.aldi.cx/…"]`                                           |

#### 💰 Price

| Field            | Example           |
| ---------------- | ----------------- |
| price            | `5.29`            |
| priceDisplay     | `$5.29`           |
| unitPrice        | `1.89`            |
| unitPriceUnit    | `100 g`           |
| unitPriceDisplay | `$1.89 per 100 g` |
| currency         | `AUD`             |
| isRandomWeight   | `false`           |
| bottleDeposit    | `null`            |

#### 🗂️ Category & Deals

| Field         | Example                              |
| ------------- | ------------------------------------ |
| category      | `Bakery`                             |
| subcategory   | `Speciality Breads & Rolls`          |
| categoryPath  | `Bakery > Speciality Breads & Rolls` |
| categoryIds   | `["920000000", "1111111133"]`        |
| deals         | `["Lower Prices"]`                   |
| isSpecialBuy  | `true`                               |
| onSaleDate    | `2026-10-28`                         |
| onSaleLabel   | `On Sale Wed 28 Oct`                 |
| discontinued  | `false`                              |
| ageRestricted | `false`                              |

#### 🧾 Product Details (with Product details on)

| Field               | Example                                                                   |
| ------------------- | ------------------------------------------------------------------------- |
| description         | `Delicious fresh Agnolotti pasta filled with creamy ricotta and spinach.` |
| ingredients         | `Unpasteurised`                                                           |
| allergens           | `["Gluten"]`                                                              |
| mayContain          | `["Hazelnuts, cobnuts, filberts, cashew nut"]`                            |
| dietaryClaims       | `["Free from: Gluten"]`                                                   |
| storageInstructions | `Shelf Stable (stable after opening): Store in a cool, dry place.`        |

#### 🔁 Monitoring (with Price monitoring on)

| Field         | Example                    |
| ------------- | -------------------------- |
| changeType    | `UPDATED`                  |
| previousPrice | `5.49`                     |
| priceChange   | `-0.2`                     |
| firstSeenAt   | `2026-10-18T21:00:04.112Z` |
| lastSeenAt    | `2026-10-25T21:00:03.871Z` |

### 📊 Example Output

```json
{
    "sku": "000000000000200998",
    "name": "Chocolate Chip Brioche Milk Rolls 8 Pack 280g",
    "brand": "BON APPETIT",
    "url": "https://www.aldi.com.au/product/bon-appetit-chocolate-chip-brioche-milk-rolls-8-pack-280g-000000000000200998",
    "price": 5.29,
    "priceDisplay": "$5.29",
    "unitPrice": 1.89,
    "unitPriceUnit": "100 g",
    "unitPriceDisplay": "$1.89 per 100 g",
    "currency": "AUD",
    "packSize": "280 g",
    "isRandomWeight": false,
    "bottleDeposit": null,
    "category": "Bakery",
    "subcategory": "Speciality Breads & Rolls",
    "categoryPath": "Bakery > Speciality Breads & Rolls",
    "categoryIds": ["920000000", "1111111133"],
    "deals": ["Lower Prices"],
    "isSpecialBuy": false,
    "onSaleDate": null,
    "onSaleLabel": null,
    "discontinued": false,
    "discontinuedNote": null,
    "ageRestricted": false,
    "imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1000/0161d36f-99af-45b8-aaed-481d5259c685/bon-appetit-chocolate-chip-brioche-milk-rolls-8-pack-280g",
    "images": [
        "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1000/0161d36f-99af-45b8-aaed-481d5259c685/bon-appetit-chocolate-chip-brioche-milk-rolls-8-pack-280g"
    ],
    "description": "An easy-to-share pack of 8 mini brioche rolls with chocolate chips. Yum.",
    "ingredients": null,
    "allergens": ["Peanuts"],
    "mayContain": [],
    "dietaryClaims": [],
    "countryOfOrigin": null,
    "storageInstructions": "Shelf Stable (stable after opening): Store in a cool, dry place.",
    "usageInstructions": null,
    "warnings": null,
    "additionalInfo": [],
    "source": "search",
    "searchTerm": "brioche",
    "listCategory": null,
    "position": 3,
    "scrapedAt": "2026-10-25T21:00:03.871Z"
}
```

### 📋 Dataset Views

The Apify Console gives you **4 ready-made table views** to quickly browse your results:

| View                        | What It Shows                                                                  |
| --------------------------- | ------------------------------------------------------------------------------ |
| 📊 **Overview**             | Photo, name, brand, price, unit price, pack size, category, deals, Special Buy |
| 💰 **Prices & unit prices** | Shelf price, unit price, pack size and — when monitoring — the price change    |
| 🧾 **Product details**      | Description, ingredients, allergens and storage                                |
| 📋 **Full Details**         | Every single field — the complete dataset                                      |

### ❓ FAQ

**🤔 What are Special Buys and how do I get next week's?**
Special Buys are ALDI's limited weekly specials that go on sale on Wednesdays and Saturdays. Choose "Upcoming" to get every announced week before it hits the stores — each product carries its sale date.

**🤔 How do I track price changes?**
Turn on Price monitoring and schedule the run (for example daily). The first run remembers everything; later runs output only new products, price or pack changes and products that are back, with the previous price and the change in dollars.

**🤔 Are prices the same in every state?**
ALDI Australia shows one national price online, and that is what you get.

**🤔 Why do some products have no unit price?**
ALDI only shows a unit price where it makes sense — groceries have one, a pool cover or a capsule machine does not.

**🤔 Can I get the whole range in one go?**
Yes — switch on "Whole catalog" and set Max items to 0. You get every product ALDI Australia lists online, around 3,300 rows, in under a minute.

**🤔 Can I export the data?**
Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook/API endpoint.

**🤔 How often should I run this?**
For fresh data, run daily or weekly. You can schedule automatic runs on Apify with just a few clicks.

**🤔 Does it work with proxies?**
It does not need one — aldi.com.au answers directly. If you ever see blocked requests, switch on Apify Proxy in the Advanced section.

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (only products with a unit price under $1 per 100 g, only new Special Buys in Gardening or Kids, only allergen-free products)
- 📊 Extra data fields or custom output formats
- 🔄 Integration with your CRM, Google Sheets, or database
- ⏰ Scheduled scraping with automatic deduplication
- 🌐 Scraping from other supermarkets (Coles, Woolworths, IGA) alongside ALDI Australia

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** from aldi.com.au. It does not log in, place orders or access any customer account. Please use the data responsibly and in compliance with applicable laws and platform terms of service.

# Actor input Schema

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

Products to look for, e.g. "coffee", "olive oil", "nappies". One search per keyword, same results as the search box on aldi.com.au.

## `categories` (type: `array`):

Whole aisles (Pantry, Freezer, Liquor…) or ALDI's always-on deal lists (Lower Prices, Limited Time Only, Super Savers).

## `customCategories` (type: `array`):

Any category by name or path, e.g. "Coffee", "Drinks > Tea, Coffee & Hot Chocolate", "Dogs & Puppy".

## `specialBuys` (type: `string`):

ALDI's weekly limited Special Buys (on sale Wednesdays and Saturdays). Pick which weeks to collect.

## `allProducts` (type: `boolean`):

Collect every product ALDI Australia lists online (about 3,300).

## `startUrls` (type: `array`):

Optional aldi.com.au links: a category (/products/pantry/k/970000000), a search (/products?q=coffee), a Special Buys week (/special-buys/2026-10-28) or a product page (/product/…).

## `brands` (type: `array`):

Keep only these brands, e.g. "BARISTA'S CHOICE", "MAMIA". Alone: every product of the brand.

## `minPrice` (type: `integer`):

Skip products cheaper than this (0 = no limit).

## `maxPrice` (type: `integer`):

Skip products dearer than this (0 = no limit).

## `sort` (type: `string`):

Order in which products are collected (matters when Max items cuts the list).

## `includeDetails` (type: `boolean`):

Also open every product page for the description, ingredients, allergens and storage instructions (one extra page per product).

## `markDeals` (type: `boolean`):

Mark every product that is currently in Lower Prices, Limited Time Only or Super Savers (about 20 extra pages per run).

## `maxItems` (type: `integer`):

Maximum products per run (0 = unlimited).

## `compact` (type: `boolean`):

Only the key fields: name, brand, price, unit price, pack size, category, deals, link.

## `excludeEmptyFields` (type: `boolean`):

Leave out fields without a value.

## `incrementalMode` (type: `boolean`):

Remember what earlier runs returned and output only new products, price or pack changes, and products that are back. Every change carries the previous price. Ideal for scheduled runs.

## `stateKey` (type: `string`):

Name of the monitoring memory. Leave empty to derive it from the search settings.

## `emitUnchanged` (type: `boolean`):

In monitoring mode, also output products that did not change.

## `emitExpired` (type: `boolean`):

In monitoring mode, also output a record for every product no longer listed.

## `webhookUrl` (type: `string`):

POST a JSON summary of the changes here after each run.

## `telegramBotToken` (type: `string`):

Send changes to Telegram (together with chat ID).

## `telegramChatId` (type: `string`):

Chat that receives the Telegram message.

## `discordWebhookUrl` (type: `string`):

Send changes to a Discord channel.

## `slackWebhookUrl` (type: `string`):

Send changes to a Slack channel.

## `notifyOnlyChanges` (type: `boolean`):

Skip the message when the run found nothing new.

## `notificationLimit` (type: `integer`):

How many products to list in one message.

## `includeRunSummary` (type: `boolean`):

Add the run's counters to the webhook payload.

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

Pages loaded at the same time.

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

Not needed — aldi.com.au answers without a proxy. Turn on Apify Proxy only if you see blocked requests.

## Actor input object example

```json
{
  "searchTerms": [
    "coffee"
  ],
  "specialBuys": "none",
  "allProducts": false,
  "minPrice": 0,
  "maxPrice": 0,
  "sort": "relevance",
  "includeDetails": false,
  "markDeals": false,
  "maxItems": 30,
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "notifyOnlyChanges": true,
  "notificationLimit": 10,
  "includeRunSummary": true,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `prices` (type: `string`):

No description

## `runSummary` (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": [
        "coffee"
    ],
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("trev0n/aldi-au-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": ["coffee"],
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("trev0n/aldi-au-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": [
    "coffee"
  ],
  "maxItems": 30
}' |
apify call trev0n/aldi-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trev0n/aldi-au-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/a9E11SI176swTzss9/builds/gJaCb9h8Q7fph4uPk/openapi.json
