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

Scrape ALDI Australia products by keyword, department, Special Buys date, promotion, link or SKU, or the whole catalogue: price, unit price, pack size, Special Buy date, brand, images. Per-store prices, stock, stores. UK + Ireland too. $0.72 per 1,000 products, no start fee.

- **URL**: https://apify.com/topapi/aldi-au-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** E-commerce, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.72 / 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 ALDI Australia Scraper do?

**ALDI Australia Scraper** reads the products on [aldi.com.au](https://www.aldi.com.au/) and returns one row per product: SKU, name, brand, shelf price, unit price (and per kg / litre / item), pack size, Special Buys date and ALDI's availability note, promotions, department path, images and link. Search by keyword, read departments, Special Buys dates and themes, promotions, product links or SKUs, or the whole catalogue in one run. Built for grocery price trackers, retail analysts, deal sites and catalogue feeds.

- 🛒 **Every way into the catalogue**: keywords, departments, Special Buys (by date, `latest`, `upcoming` or theme), Lower Prices / Super Savers / Limited Time Only, product links, SKUs, brands, or **all ~3,300 products**.
- 🏪 **Prices per store**: pick store ids, postcodes or every store; each store gets its own rows (some produce, meat and liquor prices and the range differ by store).
- 📦 **Special Buys stock**: ALDI's stock level (green / yellow / orange / red) at your store and the nearest ones.
- 🧾 **Product details add-on**: description, ingredients, storage and usage instructions, "may contain" / "free from", variants, label images.
- 🔁 **Price monitor**: on a schedule, deliver only new and re-priced products, with the previous price.
- 🗺️ **Store directory**: every ALDI store with address and coordinates.
- 🇬🇧 🇮🇪 **ALDI UK and Ireland** run on the same storefront: set `country` to `UK` or `IE`.
- 🔓 **No login, no cookies, no browser.** $0.72 per 1,000 products, no start fee.

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

| | | |
|---|---|---|
| 🆔 SKU `sku` | 🏷️ Name `name` | 🏭 Brand `brand` |
| 💲 Price `price` + `currency` | ⚖️ Unit price `pricePerUnit` | 📐 Per kg / L / item `pricePerKg` `pricePerLitre` `pricePerItem` |
| 📦 Pack size `packSize` | 📅 Special Buy date `onSaleDate` | 📝 Availability `availabilityLabel` |
| 🎯 Promotions `promotions` | 🎁 Special Buys theme `specialBuyThemes` | 🗂️ Department `categories` / `categoryPath` |
| 🖼️ Images `imageUrl` + `images` | 🥗 Nutrition label `nutritionImageUrl` | 🔞 Age restriction `ageRestricted` |
| 🏪 Store `storeId` `storeName` `storeState` | 🚦 Stock `stockStatus` + `stock` | 🧪 Ingredients `ingredients` |
| ⚠️ May contain `mayContain` | 📈 Previous price `previousPrice` | 🔗 Link `productUrl` |

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

1. [Sign up for a free Apify account](https://console.apify.com/sign-up) - it comes with free monthly credit.
2. Open **ALDI Australia Scraper** and type search terms such as `milk` or `coffee`, or paste an aldi.com.au link.
3. Optionally add departments, Special Buys dates, stores, filters or the details / stock add-ons.
4. Click **Start**. The prefilled run (two searches, 25 products each) finishes in seconds.
5. Download the rows as JSON, CSV, Excel or HTML, or read them through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `searchTerms` | array | Keywords, one per line, e.g. `milk`, `coffee`. |
| `startUrls` | array | aldi.com.au (or aldi.co.uk / aldi.ie) links: product, department (`…/k/970000000`), search (`…/results?q=cheese`), Special Buys (`…/special-buys/2026-11-04?theme=Liquor`), brand. |
| `categories` | array | Department names, slugs or keys: `Pantry`, `dairy-eggs-fridge/cheese`, `970000000`. |
| `productIds` | array | ALDI product numbers, with or without leading zeros: `545135`, `000000000538441002`. |
| `specialBuysDates` | array | `latest`, `current`, `upcoming`, `all` or a date like `2026-11-04`. |
| `specialBuysThemes` | array | Special Buys themes, e.g. `Liquor`, `Christmas Lighting`. |
| `specialsGroups` | array | `lower-prices`, `super-savers`, `limited-time-only` (AU), `price-drops` (UK), `savers` (IE). |
| `allProducts` | boolean | The whole catalogue. Default `false`. |
| `mode` | string | `products` (default), `stores` (store directory) or `categories` (department list + Special Buys dates to the key-value store, free). |
| `country` | string | `AU` (default), `UK` or `IE`. Links set it themselves. |
| `sortBy` | string | `relevance` (default), `price_asc`, `price_desc`, `name_asc`, `name_desc`. |
| `storeIds` | array | Store ids for per-store prices, e.g. `G525`, `G094`. |
| `postcodes` | array | The nearest store(s) to each postcode, e.g. `2000`, `6000`. |
| `storesPerPostcode` | integer | Nearest stores per postcode. Default 1 (10 in Stores mode). |
| `allStores` | boolean | Every product source once per store (614 stores in Australia). Default `false`. |
| `onlySpecials` | boolean | Only Special Buys and promoted products. Default `false`. |
| `minPrice`, `maxPrice` | number | Shelf price range. |
| `brands` | array | Only these brands; on their own they read each brand's range. |
| `excludeCategories` | array | Drop departments, e.g. `Liquor`. |
| `excludeAllergens` | array | Drop products whose ingredients or "may contain" name these words (uses product details). |
| `includeDetails` | boolean | Product details add-on. Default `false`. |
| `includeStock` | boolean | Special Buys stock add-on. Default `false`. |
| `stockStoresPerProduct`, `stockRadiusKm` | integer | Stores per product (default 5) and radius (default 25 km) for stock. |
| `tagPromotions` | boolean | Fill `promotions` on every row. Default `true`. |
| `monitorMode` | boolean | Only new or re-priced products since the last run. Default `false`. |
| `includeDisappeared` | boolean | With monitoring, also products ALDI stopped listing. Default `false`. |
| `monitorStoreName` | string | Named store that keeps prices between runs. Default `aldi-au-scraper-state`. |
| `maxResultsPerSearch` | integer | Most products per search, department, promotion or date (per store). Default 100, `0` = all. |
| `maxItems` | integer | Most rows in the run. Default 500, `0` = no limit. |
| `imageWidth` | integer | Image width in pixels, up to 1500. Default 600. |
| `proxyConfiguration` | object | Optional. The actor reads ALDI directly and moves to Apify datacenter, then residential proxies by itself if refused. |
| `maxConcurrency` | integer | Requests in flight. Default 10. |

None is required: an empty input runs a 10-product sample search for `milk`.

#### Input JSON

```json
{
  "searchTerms": ["milk", "coffee"],
  "categories": ["Pantry"],
  "specialBuysDates": ["latest"],
  "postcodes": ["2000", "6000"],
  "maxResultsPerSearch": 100,
  "includeStock": true
}
```

#### Search one word at a time

ALDI matches every word of a search on its own, so `frozen pizza` returns everything that matches *frozen* or *pizza*. Use the most specific single word (`pizza`), or read the department instead.

#### Choose stores only when the store matters

Without stores you get the price aldi.com.au shows before a store is chosen (the same as store G452, Glenmore Park NSW, on all 3,337 products we compared). Store prices differ on a few lines: on 2026-10-28, 66 of 3,146 shared products had a different price at Perth (G094), 29 at Melbourne (G330) and Adelaide (G037); the range differs too (3,272 products at Perth, 3,333 at Melbourne). Each store you add repeats every source, so 2 stores x 100 products = 200 rows.

#### Special Buys: dates and themes

ALDI announces Special Buys by on-sale date (Wednesday and Saturday drops). `latest` is the drop on sale now, `upcoming` the announced ones, `all` every date ALDI lists. Add `specialBuysThemes` to read only some themes; every Special Buys row carries its theme in `specialBuyThemes`. Stock levels exist only for Special Buys already on sale.

### ⬆️ Output

A real row from the prefilled run (search `milk`, 2026-10-28; `images` shortened):

```json
{
  "sku": "000000000538441002",
  "name": "Milk Mouse - Milk Chocolate 168g",
  "brand": "CHOCEUR",
  "price": 3.99,
  "currency": "AUD",
  "pricePerUnit": "$2.38 per 100 g",
  "unitPrice": 2.38,
  "unitMeasure": "100 g",
  "pricePerKg": 23.8,
  "packSize": "168 g",
  "onSale": false,
  "isSpecialBuy": false,
  "availabilityLabel": null,
  "promotions": ["Limited Time Only"],
  "categories": ["Pantry", "Confectionery"],
  "categoryId": "1111111181",
  "imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/600/d0097d9d-25d6-4cd1-b1dd-1ea5f7a154ba/choceur-milk-mouse-milk-chocolate-168g",
  "nutritionImageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/600/5331a237-663d-4f78-b427-367f698ae301/choceur-milk-mouse-milk-chocolate-168g",
  "productUrl": "https://www.aldi.com.au/product/choceur-milk-mouse-milk-chocolate-168g-000000000538441002",
  "storeId": null,
  "priceScope": "website",
  "position": 1,
  "searchTerm": "milk"
}
```

A **Special Buy** adds its date and note: `"isSpecialBuy": true, "onSaleDate": "2026-10-28", "availabilityLabel": "While Stocks Last", "specialBuyThemes": ["Pet Essentials"]`.
With **stores** a row carries `storeId`, `storeName`, `storeSuburb`, `storeState`, `storePostcode` and `"priceScope": "store"`.
With **Special Buys stock**: `"stockStatus": "green", "stockText": "Stock available"` and `stock`, one entry per store: `{"storeId": "G408", "storeName": "1 Pyramid Street", "storeSuburb": "Emu Plains", "distanceKm": 3.9, "stockStatus": "green", "stockText": "Stock available"}`.
With **product details**: `description`, `ingredients`, `storageInstructions`, `usageInstructions`, `nutritionalClaims` (`[{"label": "May contain", "value": "Macadamia"}]`), `mayContain`, `freeFrom`, `legalDisclaimer`, `variants`.
With **monitoring**: `changeType` (`new`, `price-changed`, `disappeared`), `previousPrice`, `priceChange`, `firstSeenAt`.
A **store row** (Stores mode): `{"storeId": "G671", "name": "1-13 Erica Avenue", "address": "1-13 Erica Avenue", "suburb": "Boronia", "state": "Victoria", "stateCode": "VIC", "postcode": "3155", "latitude": -37.86148, "longitude": 145.28358, "alcoholAvailability": ["Beer", "Wine"], "services": ["pickup", "walk-in"]}`.

#### Fields and how often they are filled

Measured on the whole ALDI Australia catalogue (3,337 products, 2026-10-28), 142 product details and 614 stores:

| Field | Filled | Note |
|---|---|---|
| `sku`, `name`, `price`, `currency`, `productUrl`, `imageUrl` | 100% | |
| `brand` | 93% | loose produce has none |
| `pricePerUnit`, `unitPrice`, `unitMeasure` | 82% | ALDI publishes none on liquor and some general goods |
| `pricePerKg` / `pricePerLitre` / `pricePerItem` | 65% / 10% / 6% | by the unit ALDI compares on |
| `packSize` | 81% | |
| `categories`, `categoryPath`, `department` | 86% | Special Buys often carry no department |
| `onSaleDate`, `availabilityLabel`, `isSpecialBuy` | 22% | the Special Buys share of the catalogue that day |
| `promotions` | 19% | 648 products in Lower Prices, Super Savers or Limited Time Only |
| `nutritionImageUrl` / `ingredientsImageUrl` | 63% / 26% | label photos |
| `description` (details) | 99% | |
| `ingredients` / `storageInstructions` / `usageInstructions` (details) | 21% / 25% / 11% | food lines; general goods have none |
| `mayContain` (details) | 11% | |
| `variants` (details) | 24% | Special Buys in several colours or types |
| `stockStatus` (stock) | 100% | of Special Buys on sale |
| store `address`, `postcode`, `latitude`, `longitude` | 100% | |

ALDI Australia shows no was-price on its website (0 of 3,337 products), so there is no `wasPrice` for Australia; the monitor's `previousPrice` gives you price history. ALDI UK and Ireland show one on reduced lines (`wasPrice`, `savingsDisplay`, 3-6% of products).

### Use cases

- 📊 **Grocery price tracking**: ALDI shelf and unit prices every day next to Coles and Woolworths, by store and state.
- 🎁 **Special Buys alerts**: every new drop the day ALDI announces it, with themes and stock at your store.
- 🛍️ **Deal sites and newsletters**: Lower Prices, Super Savers and Special Buys with images and links.
- 🏷️ **Private-label research**: ALDI's brands, pack sizes and price per kg across departments.
- 🗺️ **Retail network analysis**: every ALDI store with coordinates, liquor and services.
- 🥜 **Dietary apps**: ingredients, "may contain" and "free from" claims from the details add-on.

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

**$0.72 per 1,000 products**, no start fee. Add-ons: product details **$0.36 per 1,000** products that get them, Special Buys stock **$0.45 per 1,000** products with stock. Store rows (Stores mode) $0.72 per 1,000.

Measured on Apify on 2026-10-28:

| Run | Rows | Time | Price |
|---|---:|---:|---:|
| Prefilled run (`milk` + `coffee`, 25 each) | 50 | 6 s | $0.036 |
| Pantry department, every product | 1,078 | 67 s | $0.78 |
| Pantry at the Perth store (postcode 6000 → G094) | 1,076 | 79 s | $0.77 |
| Whole catalogue (`allProducts`) | 3,337 | 81 s | $2.40 |
| 20 Special Buys on sale with details + stock | 20 | 72 s | $0.031 |
| Store directory (Stores mode) | 614 | 5 s | $0.44 |
| Monitor run, nothing changed since the last one | 0 | 3 s | $0 |

Products removed by your filters, duplicates and unchanged products in monitor mode are not charged, and a run stops cleanly at the maximum charge you set (measured: a $0.01 cap delivered and charged 13 products; with details and stock, 6).

### Integrations, API, scheduling & MCP

- ⏰ **Schedules**: run the same input daily with `monitorMode` on; each run delivers only new and re-priced products.
- 🔔 **Webhooks**: get a call when a run finishes and fetch the dataset.
- 🔌 **Make, Zapier, n8n, Google Sheets, Slack**: through Apify's integrations.
- 🧑‍💻 **API**: start runs and read rows with the [Python](https://docs.apify.com/api/client/python) or [JavaScript](https://docs.apify.com/api/client/js) client, or plain HTTP.
- 🤖 **MCP**: AI agents call it through the Apify MCP server.

Run a daily price monitor through the API:

```bash
curl -X POST "https://api.apify.com/v2/acts/TopApi~aldi-au-scraper/runs?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"allProducts":true,"maxItems":0,"monitorMode":true,"includeDisappeared":true,"monitorStoreName":"aldi-daily"}'
```

### More scrapers from TopApi

- 🛒 [Woolworths Scraper](https://apify.com/TopApi/woolworths-scraper) - Woolworths Australia products and specials.
- 🏆 [Amazon Best Sellers Scraper](https://apify.com/TopApi/amazon-bestsellers-scraper) - top 100 ranking lists on 22 Amazon sites.
- 🏷️ [eBay Sold Listings Scraper](https://apify.com/TopApi/ebay-sold-listings-scraper) - sold prices on eBay.

### Limits & empty runs

- **ALDI lists about 3,300 products online in Australia** (3,337 on 2026-10-28), 4,200 in the UK and 3,400 in Ireland; the whole catalogue is one run.
- **Searches return at most what ALDI matches**; a department returns up to ~1,100 products (Pantry).
- **Stock levels exist only for Special Buys already on sale**; announced Special Buys and the regular range have none, and they are not charged for stock.
- **A run that returns nothing** says why in its status: no match, the filters removed every product, or nothing changed since the last monitor run. Nothing is charged.
- **A run ALDI refuses completely** ends FAILED with the reason and charges nothing. The actor moves to Apify datacenter and residential proxies by itself before giving up.
- The run summary (`RUN_SUMMARY` in the key-value store) lists each source with ALDI's own total, what was read, filtered and delivered, the stores used and the inputs skipped.

### ❓ FAQ

#### How much does ALDI Australia Scraper cost?

$0.72 per 1,000 products with no start fee; product details add $0.36 and Special Buys stock $0.45 per 1,000 products that get them. The whole Australian catalogue costs about $2.40.

#### How many products can ALDI Australia Scraper return?

Everything ALDI lists online: about 3,300 products in Australia, in one run with `allProducts`. With stores, each store repeats the products.

#### Does ALDI Australia Scraper get prices for my store?

Yes. Add store ids or postcodes; each store gets its own rows with the store named. Without a store you get the price aldi.com.au shows before a store is chosen.

#### Can ALDI Australia Scraper track price changes?

Yes. Switch on `monitorMode` and schedule the run: each run delivers only new and re-priced products with `previousPrice` and `priceChange`, and `includeDisappeared` adds products ALDI stopped listing.

#### Does ALDI Australia Scraper cover Special Buys?

Yes: by date (`latest`, `current`, `upcoming`, `all` or a date), by theme, with ALDI's availability note, and with stock levels at your store for Special Buys on sale.

#### Does ALDI Australia Scraper work for ALDI UK or Ireland?

Yes. Set `country` to `UK` or `IE`, or paste aldi.co.uk / aldi.ie links. Stores, Special Buys, promotions and details work the same way.

#### Do I need an ALDI account or API key for ALDI Australia Scraper?

No. It reads the public product listings like a shopper who has not signed in. No login, no cookies.

#### Can I use ALDI Australia Scraper through the Apify API or MCP?

Yes - start runs and fetch rows with the Python or JavaScript client or plain HTTP, connect it to Make, Zapier, n8n or Google Sheets, or call it from AI agents through the Apify MCP server.

#### Why did my ALDI Australia Scraper run return no products?

The status says which: the search matched nothing (try a single word), the filters removed every product, or monitor mode found nothing new. None of these is charged.

#### Your feedback

Found a bug or need a field? Open an issue on the actor's Issues tab.

# Actor input Schema

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

Products to search for, one per line, e.g. "milk", "coffee", "nappies". ALDI matches each word on its own, so single words give the cleanest results.

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

Any aldi.com.au (or aldi.co.uk / aldi.ie) link: a product page, a department (…/products/pantry/k/970000000), a search (…/results?q=cheese), a Special Buys page (…/special-buys/2026-11-04?theme=Liquor) or a brand page.

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

Department names, slugs or keys, e.g. "Pantry", "dairy-eggs-fridge/cheese", "970000000". Every product in the department is read (up to Max per search).

## `productIds` (type: `array`):

ALDI product numbers, with or without the leading zeros, e.g. "545135" or "000000000538441002" (the digits at the end of a product link).

## `specialBuysDates` (type: `array`):

Special Buys on-sale dates: "latest" (the drop on sale now), "current" (every drop on sale), "upcoming" (announced, not yet in store), "all", or a date like 2026-11-04.

## `specialBuysThemes` (type: `array`):

Only these Special Buys themes, e.g. "Liquor", "Christmas Lighting", "Kids Toys and Books". Works with the dates above (all dates when none are given).

## `specialsGroups` (type: `array`):

Read ALDI's promotion collections. Australia: Lower Prices, Super Savers, Limited Time Only. UK: Price Drops. Ireland: Savers.

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

Read every product ALDI lists online (about 3,300 in Australia, 4,200 in the UK, 3,400 in Ireland). Max per search does not apply; Max products in total does.

## `mode` (type: `string`):

Products (default), the ALDI store directory (one row per store; all stores, or those near your postcodes / store ids), or the department list and Special Buys dates saved to the key-value store (free).

## `country` (type: `string`):

Which ALDI website to read. Empty = Australia, or the country of the links you give.

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

Order of products within each search, department or Special Buys date.

## `storeIds` (type: `array`):

Prices and range for these stores, each as its own rows, e.g. "G525" (Darlinghurst NSW), "G094" (Perth). Run the Stores mode to list every id.

## `postcodes` (type: `array`):

The nearest ALDI store(s) to each postcode, e.g. "2000", "6000", "3000" (UK postcodes and Irish towns work too). Each store gets its own rows.

## `storesPerPostcode` (type: `integer`):

How many of the nearest stores to use for each postcode. Empty = 1 for product prices, 10 in Stores mode.

## `allStores` (type: `boolean`):

Run every product source once per ALDI store (614 in Australia). Keep Max per search small: a 10-product search becomes 6,140 rows.

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

Keep only Special Buys and products in a promotion (Lower Prices, Super Savers, Limited Time Only, Price Drops, Savers).

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

Lowest shelf price in the shop's currency, e.g. 2.5.

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

Highest shelf price in the shop's currency, e.g. 20.

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

Keep only these brands, e.g. "FARMDALE", "Choceur". On their own (no other input) they read each brand's whole range.

## `excludeCategories` (type: `array`):

Drop products in these departments or sub-departments, e.g. "Liquor", "Pets".

## `excludeAllergens` (type: `array`):

Drop products whose ingredients or "may contain" claims name any of these words, e.g. "peanut", "milk". Turns on Product details (charged as the details add-on).

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

Add description, ingredients, storage and usage instructions, "may contain" / "free from" claims, variants and label images. $0.36 per 1,000 products that get them.

## `includeStock` (type: `boolean`):

Add ALDI's stock level (green / yellow / orange / red + its wording) at the chosen store and the nearest ones, for Special Buys (ALDI publishes none for the regular range). $0.45 per 1,000 products with stock.

## `stockStoresPerProduct` (type: `integer`):

How many stores (the chosen one first, then the nearest) to report stock for.

## `stockRadiusKm` (type: `integer`):

Only stores within this distance of the chosen store.

## `tagPromotions` (type: `boolean`):

Fill `promotions` on every row with the ALDI promotion collections the product is in (Lower Prices, Super Savers, Limited Time Only…). Free.

## `monitorMode` (type: `boolean`):

Deliver only products that are new since the last run with the same inputs, or whose price changed (with previousPrice and priceChange). Unchanged products are not charged.

## `includeDisappeared` (type: `boolean`):

With monitoring on, also deliver products from the last run that ALDI no longer lists (changeType "disappeared"). Only when the run read the whole scope.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers prices between runs. Use a different name for each separate monitor.

## `maxResultsPerSearch` (type: `integer`):

Most products from each search, department, promotion or Special Buys date (per store). 0 = everything it lists (a department has up to ~1,100).

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

Most rows the whole run delivers. 0 = no limit.

## `imageWidth` (type: `integer`):

Width of the image links ALDI's image server returns (up to 1500).

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

Optional. The actor reads ALDI directly and moves to Apify datacenter, then residential proxies by itself if ALDI refuses a route.

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

Requests in flight at once.

## Actor input object example

```json
{
  "searchTerms": [
    "milk",
    "coffee"
  ],
  "allProducts": false,
  "mode": "products",
  "sortBy": "relevance",
  "allStores": false,
  "onlySpecials": false,
  "includeDetails": false,
  "includeStock": false,
  "stockStoresPerProduct": 5,
  "stockRadiusKm": 25,
  "tagPromotions": true,
  "monitorMode": false,
  "includeDisappeared": false,
  "monitorStoreName": "aldi-au-scraper-state",
  "maxResultsPerSearch": 25,
  "maxItems": 500,
  "imageWidth": 600,
  "maxConcurrency": 10
}
```

# Actor output Schema

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

One item per product (per store when stores are chosen): SKU, name, brand, price, unit price, pack size, Special Buy date, promotions, department, images, link; details and stock when switched on. Store rows in Stores mode.

## `summary` (type: `string`):

Sources read with ALDI's own totals, products filtered or unchanged, inputs skipped and why, stores used, transport.

# 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",
        "coffee"
    ],
    "maxResultsPerSearch": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/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": [
        "milk",
        "coffee",
    ],
    "maxResultsPerSearch": 25,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,topapi/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/T5BHRrH3eyAYYF7hR/builds/5PGSuDKdilbVSnN8B/openapi.json
