# ALDI Australia Scraper - Prices, Special Buys & Full Catalogue (`rel8ble/aldi-au-scraper`) Actor

Get ALDI Australia (aldi.com.au) grocery prices. Input: search keywords, categories, Special Buys, product URLs or "all" for the whole range (about 3,200 products). One result = one product: name, brand, size, price, unit price, category, Special Buy date, images, URL. Unofficial. $0.30 per 1,000.

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

## Pricing

$0.30 / 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 - ALDI Prices API, Special Buys & Full Catalogue

**ALDI scraper** and unofficial **ALDI Australia prices API**: scrape aldi.com.au product prices, unit prices, pack sizes, brands, categories, images and the weekly **ALDI Special Buys** with their on-sale dates. Search by keyword, scrape whole categories, pull the entire ALDI catalogue (about 3,200 products) in one run, or look up products by SKU or URL, and export Australian grocery prices to JSON, CSV or Excel.

ALDI does not sell online in Australia, but its website lists every product with the current shelf price for the store you pick. This ALDI product scraper reads the same public data the website loads, over plain HTTP with **no headless browser and no login**. In our test runs every request succeeded, and the whole catalogue (3,195 products) finished in about 30 seconds on Apify. It is an independent tool: unofficial and not affiliated with, endorsed by or connected to ALDI.

### How to use

1. Enter what to scrape: keywords (`milk`, `dark chocolate`), categories (`Dairy, Eggs & Fridge`, `Pantry > Confectionery`, or `all` for the whole catalogue), Special Buys, product SKUs, or any aldi.com.au URL. Optionally give a store ID or postcode to get that store's prices.
2. Click **Start**. The ALDI Australia scraper saves one row per product as it goes.
3. Download the results as JSON, CSV or Excel, or call the actor through the Apify API and schedule it daily or weekly.

### What you get

- **Product**: `sku` (ALDI's 18-digit product number), `name`, `brand`, `size` (`2 l`, `200 g`, `approx. 1.9 kg per package`), product `url`, main `imageUrl` and all `images`.
- **Price**: `price` in AUD as a number, `priceText` (`$3.39`), `unitPrice` with its `unitPriceBasis` (`1 L`, `100 g`, `1 kg`) and `unitPriceText` (`$1.70 per 1 L`), and `soldBy` (`each`, `packaged-by-weight`, `loose-by-weight`) so meat and loose produce are easy to handle.
- **Category**: `department`, `category`, `categoryPath` (`Dairy, Eggs & Fridge > Milk`) and `categoryId`.
- **Special Buys**: `isSpecialBuy`, `onSaleDate` (`2026-10-14`) and `onSaleText` (`On Sale Wed 14 Oct`, `While Stocks Last`).
- **Store**: `storeId`, `storeSuburb` and `storeState` of the store the prices belong to. ALDI prices and range differ a little between stores and states.
- **Product details** (with `includeDetails`, or for products given by SKU or URL): `description`, `ingredients`, `allergenStatements` (`Contains: Eggs`, `May contain: Hazelnuts`), `storageInstructions`, `usageInstructions`, and the variant group (`variant`, `variantOptions`, `variantSkus`) for products that come in several flavours or types.
- **Bookkeeping**: `source`, `sourceQuery`, `position` in the list, `ageRestriction` (18 for liquor) and `scrapedAt`.

### Use cases

- Grocery price monitoring and price-history databases (schedule the whole catalogue daily for about $0.96 a run)
- ALDI Special Buys trackers and alerts: know what goes on sale next Wednesday and Saturday
- Supermarket price comparison: ALDI next to Coles and Woolworths, matched on unit price
- Price differences between states: run the same search for a Sydney, Melbourne, Brisbane and Perth postcode
- Market research for FMCG brands: private-label range, pack sizes and price per unit by category
- Feeding live ALDI prices to AI agents and shopping assistants via the Apify MCP server

### Input example

Use any mix of the five ways in. Each keyword, category, Special Buys date or URL is scraped separately, up to `maxItems` products each.

| Field | Default | Description |
|---|---|---|
| `searchQueries` | - | Keywords as typed into the ALDI search box: `"milk"`, `"dark chocolate"`. |
| `categories` | - | Category names, paths, slugs, keys or URLs: `"Dairy, Eggs & Fridge"`, `"Pantry > Confectionery"`, `"pantry/confectionery"`, `"960000000"`. Use `"all"` for the whole catalogue. |
| `specialBuys` | `none` | `all` = every Special Buys date ALDI currently lists (usually 200 to 400 products). |
| `products` | - | SKUs (`"000000000538441002"`, leading zeros optional) or product page URLs. Always returned with details. |
| `startUrls` | - | Any aldi.com.au search, category, Special Buys or product URL. |
| `maxItems` | 100 | Products per source. `0` = everything ALDI lists. |
| `store` | G452 (Glenmore Park NSW) | A store ID like `G330`, or a postcode like `3000` to use the nearest store. |
| `sort` | `relevance` | `relevance`, `price_asc`, `price_desc`, `name_asc` or `name_desc`. |
| `includeDetails` | false | Adds description, ingredients, allergen statements, storage, usage and variants. One extra request per product. |
| `proxyConfiguration` | Apify Proxy (datacenter) | Leave as is unless you have a reason to change it. |

Example: the upcoming Special Buys, the dairy department and two keyword searches, priced for a Melbourne store:

```json
{
    "specialBuys": "all",
    "categories": ["Dairy, Eggs & Fridge"],
    "searchQueries": ["chocolate", "nappies"],
    "maxItems": 0,
    "store": "3000"
}
```

The whole ALDI catalogue in one run:

```json
{
    "categories": ["all"],
    "maxItems": 0
}
```

### Output example

One dataset item per product. This one is from a real cloud run on 12 Oct 2026, search "milk" with the default store:

```json
{
    "sku": "000000000000398691",
    "name": "Light Milk 2L",
    "brand": "FARMDALE",
    "size": "2 l",
    "price": 3.39,
    "priceText": "$3.39",
    "unitPrice": 1.7,
    "unitPriceBasis": "1 L",
    "unitPriceText": "$1.70 per 1 L",
    "currency": "AUD",
    "soldBy": "each",
    "department": "Dairy, Eggs & Fridge",
    "category": "Milk",
    "categoryPath": "Dairy, Eggs & Fridge > Milk",
    "categoryId": "1111111160",
    "isSpecialBuy": false,
    "onSaleDate": null,
    "onSaleText": null,
    "ageRestriction": null,
    "imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1000/93645b60-eb11-4046-b28e-2b441f8585a4/farmdale-light-milk-2l",
    "images": [
        "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1000/93645b60-eb11-4046-b28e-2b441f8585a4/farmdale-light-milk-2l",
        "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1000/3179b931-650a-453c-a82b-3ac344442f53/farmdale-light-milk-2l",
        "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1000/ccc9b1b9-6113-409c-a97e-ca1d6517d57e/farmdale-light-milk-2l"
    ],
    "url": "https://www.aldi.com.au/product/farmdale-light-milk-2l-000000000000398691",
    "storeId": "G452",
    "storeSuburb": "Glenmore Park",
    "storeState": "NSW",
    "source": "search",
    "sourceQuery": "milk",
    "position": 3,
    "scrapedAt": "2026-10-12T17:27:32.116Z"
}
```

A Special Buy from the same day's cloud run with `includeDetails: true` and `store: "4000"` (Brisbane), shortened to the fields that differ:

```json
{
    "sku": "000000000400165001",
    "name": "Pool Chemical Buffer 2kg",
    "brand": "POWER FORCE",
    "size": "2 kg",
    "price": 9.99,
    "unitPriceText": "$5.00 per 1 kg",
    "department": null,
    "categoryPath": null,
    "isSpecialBuy": true,
    "onSaleDate": "2026-10-24",
    "onSaleText": "On Sale Sat 24 Oct",
    "url": "https://www.aldi.com.au/product/power-force-pool-chemical-buffer-2kg-000000000400165001",
    "storeId": "G215",
    "storeSuburb": "West End",
    "storeState": "QLD",
    "source": "specialBuys",
    "sourceQuery": "2026-10-24",
    "description": "Raises alkalinity in pool water and helps control fluctuating pH levels so overall chlorine efficiency is improved. Safe to use with all pool linings.",
    "ingredients": null,
    "allergenStatements": [],
    "variant": "Buffer 2kg",
    "variantOptions": ["Buffer 2kg", "Stabiliser 1.5kg"],
    "variantSkus": ["000000000400165001", "000000000400165002"]
}
```

Meat sold by weight has the pack price in `price` and the per-kg price in `unitPrice`:

```json
{ "sku": "000000000000781474", "name": "Gochujang Style Glaze Pork Belly Rashers", "brand": "BRUEMAR", "size": "approx. 0.55 kg per package", "price": 14.84, "unitPrice": 26.99, "unitPriceText": "$26.99 per 1 kg", "soldBy": "packaged-by-weight", "isSpecialBuy": true, "onSaleDate": "2026-10-21" }
```

The dataset comes with three ready-made views: **Overview**, **Special Buys** and **Ingredients & details**. A `RUN_SUMMARY` record in the key-value store lists the store used and, for each source, how many products were saved, how many ALDI reports in total, and why scraping stopped.

#### Field fill rates (real run: the whole catalogue, 3,195 products, 12 Oct 2026)

| Field | Fill rate |
|---|---|
| sku, name, price, priceText, soldBy, url, store, scrapedAt | 100% |
| imageUrl / images | 99.97% (1 product had no image) |
| brand | 93% (fresh produce and some general merchandise have no brand) |
| size, unitPrice, unitPriceText | 82% (clothing, tools and other general merchandise have no size or unit price) |
| department, category, categoryPath | 82% (most Special Buys are not filed in a grocery category) |
| onSaleDate, onSaleText | 22% (the Special Buys and limited-time products; 100% of a Special Buys run) |
| ageRestriction | 4% (liquor) |
| description | 99.9% with `includeDetails` |
| ingredients / allergenStatements / storageInstructions | 26% / 26% / 28% with `includeDetails` (ALDI publishes them for part of the food range only) |
| usageInstructions | 10% with `includeDetails` |
| variant, variantOptions, variantSkus | 14% with `includeDetails` (only products that come in several flavours or types) |

Test runs on Apify (12 Oct 2026, default 1,024 MB): the whole catalogue, 3,195 products, in 29 seconds with 54 requests and 0 failed. 373 products with full details in 121 seconds, 383 requests, 0 failed. The prefilled example input (40 products) in 4 seconds.

### Pricing

**Pay per result: $0.30 per 1,000 results.** One result is one product saved to the dataset. Product details (description, ingredients, allergen statements) are included at no extra charge. There is **no start fee**.

- 20 products = $0.006
- 1,000 products = $0.30
- The whole ALDI catalogue (about 3,200 products) = about $0.96

**Failed requests are free.** You are never charged for failed or blocked requests, retries, duplicates, or products that do not exist. If you set a maximum cost per run, the scraper stops cleanly when it reaches it. Apify's free plan includes $5 of monthly platform credit, enough for about 16,000 products. Platform usage is small: the cloud run of the whole catalogue (3,195 products) used about $0.02 of compute, storage and datacenter proxy.

### Integrations

- **API**: start runs and read datasets over the Apify REST API, for example `POST https://api.apify.com/v2/acts/rel8ble~aldi-au-scraper/run-sync-get-dataset-items?token=<TOKEN>` with the input as the JSON body.
- **Python and JavaScript clients**: `client.actor("rel8ble/aldi-au-scraper").call(run_input={...})` with `apify-client`, then read the dataset.
- **MCP / AI agents**: call it from Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server (https://mcp.apify.com). Every input field is described in plain words so an agent can fill it in on its own.
- **No-code**: Make, n8n and Zapier have Apify apps that run the actor and pass the products on. Google Sheets, Airtable, Slack and webhooks work too.
- **Schedules**: run it every Wednesday and Saturday morning (AEST) to catch new Special Buys, or daily for price history.

### Limits

- **No stock levels.** ALDI Australia does not sell online, so its website has no in-stock flag or quantity. A product being listed means it is in the range for that store.
- **No was-price or discount fields.** In our tests ALDI's data had no was-price for any product in any of the 6 stores we checked (NSW, VIC, QLD, SA, WA, ACT), so the actor does not output one. Track price drops by scheduling runs and comparing prices yourself.
- **Prices are per store.** Without `store` you get ALDI's default store (G452, Glenmore Park NSW). Between that store and one in Melbourne, Perth, Brisbane or Adelaide we saw 38 to 66 different prices (mostly fruit, vegetables and meat) and roughly 200 to 370 products that only one of the two stores ranges.
- **ALDI's own totals run a little high.** ALDI reported 3,214 products and returned 3,195 distinct ones. Products that come in several variants are sometimes listed once; turn on `includeDetails` to get the `variantSkus` of the others.
- **Ingredients and allergen statements are published for only about a quarter of products**, and ALDI's text is occasionally cut short at the source.
- **No barcodes, nutrition panels or customer reviews.** ALDI's website does not publish them.
- **`brand` is "BRANDED"** for some third-party products where ALDI does not name the brand in its data; the real brand is then often mentioned in the description.
- **No stores in Tasmania or the Northern Territory**, so postcodes there return an error.

### FAQ

**Is this an official ALDI API?**
No. ALDI has no public API. This actor is unofficial and is not affiliated with, endorsed by or connected to ALDI. It reads the public product data the aldi.com.au website loads for any visitor.

**Does it need an ALDI account or a browser?**
No. No login, no cookies to supply, no headless browser. It makes plain HTTPS requests.

**How do I scrape the whole ALDI catalogue?**
Set `categories` to `["all"]` and `maxItems` to `0`. That is about 3,200 products, takes about 30 seconds and costs about $0.96.

**How do I get this week's ALDI Special Buys?**
Set `specialBuys` to `all`. You get every sale date ALDI currently lists (this week and the next few Wednesdays and Saturdays), with `onSaleDate` on every product. For one date or theme, paste its page URL into `startUrls`, for example `https://www.aldi.com.au/special-buys/2026-10-14?theme=Gardening`.

**How do I get prices for my state or store?**
Put a postcode in `store` (`3000` for Melbourne, `4000` for Brisbane, `6000` for Perth) and the actor uses the nearest ALDI store ALDI's own store finder returns. Or give a store ID such as `G330`. Every result carries `storeId`, `storeSuburb` and `storeState`, and the run summary names the store.

**Why does a two-word search return so many products?**
ALDI's search matches any of the words, so `cat food` returns cat products and food products. Results are sorted by relevance, so keep `maxItems` small, or use a category instead.

**What does `soldBy` mean?**
`each` is a normal fixed-price item. `packaged-by-weight` is meat and similar: `price` is the price of a typical pack and `unitPrice` is the per-kg price. `loose-by-weight` is loose produce priced per kg.

**How does it avoid blocks?**
ALDI's API sits behind Akamai. The actor sends browser-like requests through Apify Proxy, keeps a pool of sessions with their own cookies, and when a request comes back as an Akamai "Access Denied" page, an HTTP 429 or anything that is not JSON, it retires that session and retries on a new one with a new IP (up to 8 retries by default). In our cloud tests on the default datacenter proxy no request was blocked. If you ever see repeated blocks, switch the proxy group to RESIDENTIAL with country AU.

**How long do runs with details take?**
`includeDetails` needs one extra request per product. In our cloud test 373 detailed products took 121 seconds, about 3 products per second. Without details the whole catalogue of 3,195 products took 29 seconds. Leave details off when you only need prices.

**Is it legal to scrape ALDI?**
This actor collects only publicly available product and price information, not personal data. You are responsible for using the data in line with ALDI's terms of use and the laws that apply to you. This is not legal advice; if you are unsure, check with a lawyer.

**What happens with an empty input?**
It runs a demo search for "milk" and saves up to 20 products, so a first test run always returns data.

### How it works (for developers)

aldi.com.au is a Nuxt app backed by a JSON API on `api.aldi.com.au`. The actor calls it directly:

- `GET /v3/product-search` with `q`, `categoryKey` or `promotionKey` (+ `theme`), `sort`, `limit`, `offset` and `servicePoint` (the store). Page sizes are fixed to 12, 16, 24, 30, 32, 48 or 60; the actor picks the smallest that covers `maxItems` and fetches all pages of a source in parallel.
- `GET /v2/products/<sku>` for product details.
- `GET /v2/product-category-tree` to turn category names and slugs into keys, `GET /v2/promotion-tree` for the Special Buys dates, and `GET /v2/service-points` to resolve a store ID or postcode.

It is a Crawlee `HttpCrawler` with session rotation; each product is saved with `Actor.pushData(item, 'result')`.

```bash
npm install
npm test                                   # 19 parser tests on saved real responses
CRAWLEE_STORAGE_DIR=./storage node src/main.js   # input in storage/key_value_stores/default/INPUT.json
```

# Actor input Schema

## `searchQueries` (type: `array`):

Optional. Keywords as typed into the search box on aldi.com.au, one per line: "milk", "dark chocolate", "nappies". Use this when you want products matching a word. Each keyword returns up to maxItems products (a typical keyword has 20-200). An 18-digit SKU also works as a keyword. Give at least one of searchQueries, categories, specialBuys, products or startUrls.

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

Optional. ALDI categories, one per line, in any of these forms: a name ("Dairy, Eggs & Fridge", "Pantry", "Liquor"), a sub-category path ("Pantry > Confectionery" or slug "pantry/confectionery"), a category key ("960000000") or a category URL ("https://www.aldi.com.au/products/bakery/k/920000000"). Use "all" for the whole ALDI catalogue in one go: about 3,200 products, about 20 seconds, about $0.96 with maxItems 0. Top-level categories: Fruits & Vegetables, Meat & Seafood, Deli & Chilled Meats, Dairy, Eggs & Fridge, Pantry, Bakery, Freezer, Drinks, Health & Beauty, Baby, Cleaning & Household, Pets, Liquor, Snacks & Confectionery, Lower Prices, Super Savers, Limited Time Only. One top-level category has 20-1,000 products.

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

Optional. "none" (default) = skip. "all" = every Special Buys date ALDI currently lists (this week and the next few Wednesday / Saturday sale dates), usually 200-400 products in total, each with its onSaleDate. Use this to track the weekly Special Buys catalogue. For one date or one theme only, put its page URL in startUrls instead.

## `products` (type: `array`):

Optional. Specific products to look up, one per line: an ALDI SKU ("000000000538441002", leading zeros optional) or a product page URL ("https://www.aldi.com.au/product/choceur-milk-mouse-milk-chocolate-168g-000000000538441002"). Use this to re-check the price of known products. These results always include the detail fields (description, ingredients, allergen statements). A product that does not exist is listed in the run summary and is not charged.

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

Optional. Any aldi.com.au page URLs, one per line: a search page ("https://www.aldi.com.au/results?q=milk"), a category page ("https://www.aldi.com.au/products/pantry/k/970000000"), a Special Buys page ("https://www.aldi.com.au/special-buys/2026-10-14" or with "?theme=Gardening") or a product page. Use this when you already have links copied from the website. Other pages (recipes, store locator) are skipped with a warning.

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

Optional. Maximum products saved per keyword, category, Special Buys date or URL, integer >= 0. Default 100; 0 = everything ALDI lists. Two keywords with 100 = up to 200 results. You pay per product saved ($0.0003 each), so 100 products = $0.03. Use 10-20 for a quick answer.

## `store` (type: `string`):

Optional. ALDI prices and range differ a little between stores and states (fresh produce and meat most of all). Give an ALDI store ID ("G452", "G330") or a 4-digit postcode ("3000" = nearest store to Melbourne CBD, "6000" = Perth) to get that store's prices. Empty = ALDI's default store G452 (Glenmore Park, NSW), the same prices the website shows before you pick a store. ALDI has no stores in Tasmania or the Northern Territory. Every result says which store it came from (storeId, storeSuburb, storeState).

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

Optional. Order ALDI returns products in: "relevance" (default), "price_asc" (cheapest first), "price_desc", "name_asc" or "name_desc". Combine "price_asc" with a small maxItems to get the cheapest products for a keyword.

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

Optional boolean. false (default) = prices and listing data only, about 60 products per request. true = also open each product to add description, ingredients, allergen statements ("Contains: Eggs"), storage and usage instructions and the variant group (flavour or type, with the SKUs of the other variants) where ALDI publishes them. One extra request per product, so runs take longer; the price per result is the same.

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

Optional, advanced. Number of parallel requests, integer 1-20. Default 10. Leave unset.

## `maxRequestRetries` (type: `integer`):

Optional, advanced. Retries per failed or blocked request, integer 0-20; each retry uses a new session and IP. Default 8. Leave unset.

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

Optional, advanced. Apify Proxy settings object. Default {"useApifyProxy": true}. Leave unset.

## Actor input object example

```json
{
  "searchQueries": [
    "milk",
    "coffee"
  ],
  "specialBuys": "none",
  "maxItems": 20,
  "sort": "relevance",
  "includeDetails": false,
  "maxConcurrency": 10,
  "maxRequestRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All products found: SKU, name, brand, size, price, unit price, category path, Special Buy date, images, product URL and the store the prices belong to (plus description, ingredients and allergen statements when details are on).

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

Store used, per-source counts, ALDI's own totals, stop reasons and the list of anything that failed.

# 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 = {
    "searchQueries": [
        "milk",
        "coffee"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/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 = {
    "searchQueries": [
        "milk",
        "coffee",
    ],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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