# ALDI Australia Scraper (`parsebird/aldi-australia-scraper`) Actor

Extract ALDI Australia product data: price, brand, pack size, unit price, availability, images, and categories. Search by keyword or paste any category, product, or search URL.

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

## Pricing

from $1.29 / 1,000 aldi australia 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

### ALDI Australia Scraper

ALDI Australia Scraper extracts **product data from aldi.com.au** — price, brand, pack size, price per unit, sale availability, images, and categories — by keyword search or by pasting category, search, or product URLs directly.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search by keyword or paste any ALDI Australia category, product, or search URL — get clean, structured product data with price, brand, pack size, unit price, and availability, ready for price monitoring or catalogue analysis.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor: Actor ID `parsebird/aldi-australia-scraper` on Apify — call it with the `apify-client` SDK, e.g. `ApifyClient(token).actor("parsebird/aldi-australia-scraper").call(run_input={"searchTerms": ["cheese"], "maxResults": 50})`; key inputs are `searchTerms` (array of single-word product keywords, one search per term), `startUrls` (array of `{url}` for ALDI Australia category, search-result, or individual product pages — filters already in the URL are applied automatically), `maxResults` (integer, applies per search term or URL, 0 = unlimited), and `sortBy` (`relevance`, `name_asc`, `name_desc`, `price_asc`, or `price_desc`); output rows have `sku`, `name`, `brand`, `price`, `onSale`, `availabilityLabel`, `pricePerUnit`, `packSize`, `currency`, `categories`, `imageUrl`, `images`, `inStock`, `discontinued`, `ageRestricted`, `productUrl`, `searchTerm`, and `sourceUrl`; full API spec is on the Apify Console API tab for this actor, and an Apify API token is required to call it programmatically.

#### What does ALDI Australia Scraper do?

ALDI Australia Scraper reads the same public product pages any shopper on [aldi.com.au](https://www.aldi.com.au) can see — no login, no cart, no app. It supports three ways to collect data:

- 🔍 **Keyword search** — search for a product by name (e.g. `cheese`, `coffee`, `chocolate`) and get every matching result, cheapest-first if you want.
- 🔗 **Category, search, or product URLs** — paste any ALDI Australia category page, search-result URL, or individual product page and scrape it directly. Filters already baked into the URL (sort order, brand, theme) carry over automatically.
- 📄 **Whole-category capture** — set Max results to `0` on a category URL to pull every product in it, not just the first page.

Other things it does:

- Sorts results by relevance, name, or price directly from ALDI's own catalogue ordering — no client-side re-sorting.
- Deduplicates products automatically: if the same item matches two search terms or appears in an overlapping URL, it's only saved once, credited to whichever term or URL found it first.
- Runs on Apify's infrastructure with **scheduling**, **REST API access**, and native **JSON, CSV, Excel, HTML, and XML export**.
- Uses no browser and no proxy — ALDI Australia's category and product pages are plain server-rendered HTML, so runs are fast and cheap.

#### What data can you extract from ALDI Australia?

| Field | Description |
|-------|-------------|
| `sku` | ALDI product identifier |
| `name` / `brand` | Product name and brand (ALDI private label or supplier) |
| `price` | Current price in AUD |
| `onSale` / `availabilityLabel` | Whether ALDI has attached a limited-run note (e.g. "While Stocks Last") and the note's text |
| `pricePerUnit` | Normalized unit price for comparison (e.g. "$14.98 per 1 kg") |
| `packSize` | Selling size or pack quantity |
| `categories` | Category path the product belongs to |
| `imageUrl` / `images` | Primary and all product photo URLs |
| `inStock` / `discontinued` | Current listing and delisting status |
| `ageRestricted` | True for alcohol and other age-restricted items |
| `productUrl` | Canonical ALDI Australia product page URL |

#### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchTerms` | string\[] | No | `["cheese"]` | Products to search for, one word per term for best matching |
| `startUrls` | string\[] | No | `[]` | ALDI Australia category, product, or search-result URLs |
| `maxResults` | integer | No | 100 | Max products per search term or URL; `0` = unlimited |
| `sortBy` | select | No | `relevance` | `relevance`, `name_asc`, `name_desc`, `price_asc`, or `price_desc` |

At least one of `searchTerms` or `startUrls` should be set — if both are left empty, the Actor falls back to `searchTerms: ["cheese"]`.

#### Output example

```json
{
  "sku": "000000000000283609",
  "name": "Smoked Cheese 200g",
  "brand": "EMPORIUM SELECTION",
  "price": 4.99,
  "onSale": false,
  "pricePerUnit": "$24.95 per 1 kg",
  "packSize": "0.2 kg",
  "currency": "AUD",
  "categories": ["Dairy, Eggs & Fridge", "Cheese"],
  "imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/600/5273d675-32cb-4890-92b7-30517d641c3e/emporium-selection-smoked-cheese-200g",
  "images": ["https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/600/5273d675-32cb-4890-92b7-30517d641c3e/emporium-selection-smoked-cheese-200g"],
  "inStock": true,
  "discontinued": false,
  "ageRestricted": false,
  "productUrl": "https://www.aldi.com.au/product/emporium-selection-smoked-cheese-200g-000000000000283609",
  "searchTerm": "cheese"
}
```

Fields that are empty for a given product (e.g. `brand` for loose produce, or `pricePerUnit` and `packSize` for alcohol) are left out of that row entirely, so a row is only as wide as the data ALDI publishes for it. Download results as JSON, HTML, CSV, or Excel from the **Storage** tab, or fetch them via the [dataset API endpoint](https://docs.apify.com/api/v2#/reference/datasets).

##### Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/aldi-australia-scraper").call(run_input={
    "searchTerms": ["cheese", "milk", "coffee"],
    "sortBy": "price_asc",
    "maxResults": 50,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["price"], item.get("pricePerUnit"))
```

##### JavaScript example

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/aldi-australia-scraper').call({
    startUrls: [{ url: 'https://www.aldi.com.au/products/pantry/' }],
    maxResults: 0,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].name, items[0].price);
```

#### Use cases

- **Price monitoring** — track ALDI Australia prices for your own basket of products over time by scheduling recurring runs.
- **Catalogue analysis** — pull a whole category (`maxResults: 0`) to see everything ALDI stocks in Pantry, Drinks, or any other department, with brand and pack-size breakdowns.
- **Competitor benchmarking** — compare ALDI's private-label pricing against Woolworths, Coles, or other retailers using per-unit prices.
- **Deal discovery** — filter results where `onSale` is true to surface limited-run and special-buy items.

#### How to scrape ALDI Australia with ALDI Australia Scraper

1. Click **Try for free** (or **Run**) on this Actor's page.
2. Enter one or more search terms, or paste ALDI Australia category, search, or product URLs into Start URLs.
3. Optionally set Max results (0 for a full category) and a sort order.
4. Click **Start** and watch results land in the dataset in real time.
5. Export results as JSON, CSV, or Excel, or pull them programmatically via the [Apify API](https://docs.apify.com/api/v2).

#### How much does it cost to scrape ALDI Australia?

This Actor uses **pay-per-event pricing** — you pay only for results, not for compute time.

| Event | Price per event | Price per 1,000 |
|-------|-----------------|------------------|
| `product-scraped` | from $0.00129 | **$1.29 – $1.99** |

A `product-scraped` event fires once for every unique product saved, whether it came from a keyword search or a pasted URL. Price per 1,000 products depends on your Apify plan tier (Free $1.99, Bronze $1.79, Silver $1.59, Gold $1.29). Scraping 1,000 products on a Free plan costs about $1.99. Apify's monthly platform usage credits apply to this Actor like any other.

#### Is it legal to scrape ALDI Australia?

ALDI Australia Scraper only collects data that ALDI already publishes on public product pages without requiring a login. Scraping publicly available data is generally legal, but you're responsible for how you use the data — check [ALDI Australia's Terms of Use](https://www.aldi.com.au/legal-notice) and read Apify's [guide on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) before running large or commercial scrapes.

#### Other grocery and retail scrapers

- [Woolworths AU Scraper](https://apify.com/parsebird/woolworths-au-scraper) — Woolworths Australia product and pricing data
- [Walmart Product Scraper](https://apify.com/parsebird/walmart-product-scraper) — Walmart product listings and pricing
- [Target Product Scraper](https://apify.com/parsebird/target-product-scraper) — Target product listings and pricing

#### FAQ

**Do I need an ALDI account to use this Actor?**
No. It only reads public product pages that ALDI serves to logged-out visitors — no login or cart required.

**Why did a two-word search term return unrelated products?**
ALDI's own search matches each word in a term independently, so a term like "chicken soup" returns everything matching "chicken" *or* "soup", not just soup made with chicken. Use one word per search term for the tightest match, or use a category/search URL with ALDI's own filters instead.

**How do I get every product in a category, not just the first page?**
Set `maxResults` to `0` on that category's `startUrls` entry. The Actor pages through the full category automatically.

**Why are `pricePerUnit` and `packSize` missing for some products?**
ALDI doesn't publish a normalized unit price or pack size for alcohol. Those two fields are simply left off those rows.

**Can I schedule this to run automatically?**
Yes. Use Apify's built-in [Task Scheduler](https://docs.apify.com/platform/schedules) to run it daily, weekly, or at any interval, and connect it to Zapier, Make, or a webhook for downstream integrations.

**Something looks wrong or missing — how do I report it?**
Open an issue on the Actor's **Issues** tab in Apify Console, or use the **API** tab to inspect the exact request/response for your run.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/aldi-australia-scraper/changelog.md

# Actor input Schema

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

Products to search for on ALDI Australia, one per line (e.g. "cheese", "milk", "coffee"). Each term runs as its own search. Use one word per term - ALDI matches each word on its own, so a two-word term returns everything matching either word.

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

Paste ALDI Australia category, product, or search-result URLs (e.g. https://www.aldi.com.au/products/pantry/). Any filters already in the URL are applied automatically. Leave empty if you only use Search terms.

## `maxResults` (type: `integer`):

Maximum number of products to collect for each search term or URL, not for the whole run. The cap applies to each one separately, so five terms at 100 can return 500 results. Set to 0 for no limit. Tip: start with 20-50 to test, then increase.

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

How to order products within each search or category.

## Actor input object example

```json
{
  "searchTerms": [
    "cheese"
  ],
  "startUrls": [],
  "maxResults": 20,
  "sortBy": "relevance"
}
```

# Actor output Schema

## `dataset` (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": [
        "cheese"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/aldi-australia-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": ["cheese"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/aldi-australia-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": [
    "cheese"
  ],
  "maxResults": 20
}' |
apify call parsebird/aldi-australia-scraper --silent --output-dataset

```

## MCP server setup

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