# ALDI Scraper: Prices & Special Buys (AU, UK, IE) (`fabricalabs/aldi-products`) Actor

Scrape ALDI Australia, UK and Ireland by search term, category, Special Buys date or SKU. Get price, was price, unit price, Special Buys on-sale date, brand, pack size, categories and images, plus optional ingredients, allergens and nutrition. No browser; $0.50 per 1,000 products.

- **URL**: https://apify.com/fabricalabs/aldi-products.md
- **Developed by:** [Fabrica Labs](https://apify.com/fabricalabs) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 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 Scraper do?

**ALDI Scraper** collects products, prices and Special Buys from ALDI Australia ([aldi.com.au](https://www.aldi.com.au)), the United Kingdom ([aldi.co.uk](https://www.aldi.co.uk)) and Ireland ([aldi.ie](https://www.aldi.ie)): price, was price, unit price, Special Buys on-sale date, brand, pack size, categories and images, and on request the product page with description, ingredients, allergens and nutrition.

Tell it what to collect in any mix:

- **Search terms**, e.g. `milk` or `air fryer`, with each product's position in the results.
- **Special Buys**: one switch collects every Special Buy ALDI lists, on sale now and upcoming, with the day each goes on sale.
- **Category and Special Buys pages**, e.g. Milk, Price Drops, or one day's BBQ Special Buys.
- **SKUs or product links**, to track the price of a fixed list of products every day.

It costs **$0.50 per 1,000 products**, with no start fee. Searches with no results and unknown SKUs are free, and Apify's free plan ($5 of credit every month) covers about 10,000 products a month.

### Why use this ALDI scraper?

- **Special Buys made easy.** Turn on one switch and get every Special Buy ALDI lists: this week's and the coming weeks', each with its on-sale date and ALDI's own wording ("On Sale Sat 03 Oct", "While Stocks Last").
- **Three countries, one input.** Australia, the UK and Ireland share one input format. Run the same search in several countries to compare prices.
- **You only pay for products.** A search that finds nothing, a SKU ALDI doesn't list and an input that fails are recorded as free rows that explain what happened, and the run carries on.
- **No surprise bills.** `maxResults` caps the whole run (1,000 products by default, $0.50).
- **Fast and light.** It calls the same JSON API the ALDI website uses, 60 products per request, instead of opening a browser. SKUs are looked up 60 at a time.
- **Product details when you need them.** Turn on `includeDetails` for the description, ingredients, allergens, storage and (UK and Ireland) nutrition per 100 g, at the same price per product.
- **Safe restarts.** If the platform moves your run to another server, it resumes where it stopped, without duplicate products or double charges.

### What data can you get?

| Field | What it is |
|---|---|
| `source`, `country`, `searchTerm`, `category`, `position` | Where the product was found and its rank there |
| `sku` | ALDI's product code (18 digits, as text) |
| `name`, `brand`, `packageSize` | What the product is |
| `price`, `priceText`, `currency` | Current price, as a number and as shown ($3.99, £1.45, €1.49) |
| `wasPrice`, `savings`, `savingsText`, `isPriceReduced` | Price drops: the previous price and the saving (UK and Ireland) |
| `unitPrice`, `unitMeasure`, `unitPriceText` | Price per unit, e.g. `$2.38 per 100 g` or `£4.99/1 KG` |
| `isSpecialBuy`, `onSaleDate`, `onSaleText` | Special Buys and the day they go on sale |
| `isRandomWeight`, `ageRestricted`, `minimumAge`, `discontinued`, `badges` | Product flags |
| `categories`, `categoryPath` | Where the product sits on the website |
| `url`, `imageUrl`, `images` | Product page and images |
| `description`, `ingredients`, `storageInstructions`, `usageInstructions`, `countryOfOrigin` | The product page (with `includeDetails`) |
| `allergensContains`, `allergensMayContain`, `freeFrom`, `dietaryClaims` | Allergens and claims (with `includeDetails`) |
| `nutritionPer100g`, `nutritionPerServe` | The nutrition panel, e.g. `{"energyKj": 1721.5, "fatG": 22.6, "saltG": 0.76}` (UK and Ireland, with `includeDetails`) |
| `scrapedAt` | When the product was collected |

The Output tab has four ready-made tables: **Overview**, **Specials**, **Catalog** and **Details**. Download any of them as Excel, CSV or JSON.

### How to scrape ALDI

1. Click **Try for free** (you need a free Apify account; no credit card).
2. Choose the country: Australia, the United Kingdom or Ireland.
3. Add search terms, turn on Special Buys, or paste category, Special Buys or product page addresses from the ALDI website. SKUs work too.
4. Optionally sort the results, add product details, and set how many products you want.
5. Click **Start** and download the data, or connect it to Google Sheets, Make, Zapier or your own code through the Apify API.
6. To track prices or catch every new Special Buy, save the input as a task and schedule it daily or weekly.

### Input example

```json
{
  "country": "au",
  "searchTerms": ["coffee beans"],
  "specialBuys": true,
  "categoryUrls": [
    "https://www.aldi.com.au/products/dairy-eggs-fridge/milk/k/1111111160",
    "https://www.aldi.co.uk/products/price-drops/k/1588161430418388"
  ],
  "productIds": ["398689", "https://www.aldi.co.uk/product/specially-selected-all-butter-croissants-000000000000387544"],
  "sortBy": "priceLowToHigh",
  "includeDetails": false,
  "maxResults": 2000,
  "maxResultsPerTerm": 500
}
```

- `country`: `au`, `uk` or `ie`. `countries`, e.g. `["au", "uk"]`, runs the search terms, Special Buys and bare SKUs in each country.
- Page and product addresses always use the country of their address, so one run can mix countries.
- A Special Buys page address, e.g. `https://www.aldi.com.au/special-buys/2026-10-03?theme=BBQ` (copy it from the Special Buys menu), collects one day or one theme; `specialBuys: true` collects every day ALDI lists.
- `sortBy`: `relevance`, `priceLowToHigh`, `priceHighToLow`, `name` or `nameZToA`.
- `maxResults` caps the whole run; `maxResultsPerTerm` caps each search term, category or Special Buys day. 0 means no limit.

### Output example

A Special Buy from a real run (images shortened):

```json
{
  "source": "specialBuys",
  "country": "au",
  "category": "Special Buys > Available from Sat 3rd October > BBQ",
  "categoryUrl": "https://www.aldi.com.au/special-buys/2026-10-03?theme=BBQ",
  "position": 1,
  "sku": "000000000000739177",
  "name": "Kamado Ceramic BBQ",
  "brand": "COOLABAH",
  "price": 149.0,
  "priceText": "$149.00",
  "wasPrice": null,
  "currency": "AUD",
  "isSpecialBuy": true,
  "onSaleDate": "2026-10-03",
  "onSaleText": "On Sale Sat 03 Oct",
  "isRandomWeight": false,
  "ageRestricted": false,
  "url": "https://www.aldi.com.au/product/coolabah-kamado-ceramic-bbq-000000000000739177",
  "imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/800/dc81f0cf-182d-48f9-b5cc-2cce4daf21fd/coolabah-kamado-ceramic-bbq",
  "images": ["https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/800/dc81f0cf-182d-48f9-b5cc-2cce4daf21fd/coolabah-kamado-ceramic-bbq"],
  "scrapedAt": "2026-10-01T19:58:07Z"
}
```

A UK price drop looked up by its product link, with `includeDetails` (description shortened):

```json
{
  "source": "product",
  "country": "uk",
  "sku": "000000000000387544",
  "name": "All Butter Croissants",
  "brand": "SPECIALLY SELECTED",
  "packageSize": "4 Each",
  "price": 1.99,
  "priceText": "£1.99",
  "wasPrice": 2.09,
  "savings": 0.1,
  "isPriceReduced": true,
  "unitPrice": 0.5,
  "unitMeasure": "1 Each",
  "unitPriceText": "£0.50/1 Each",
  "currency": "GBP",
  "isSpecialBuy": false,
  "categories": ["Bakery", "Breakfast Pastries"],
  "categoryPath": "Bakery > Breakfast Pastries",
  "url": "https://www.aldi.co.uk/product/specially-selected-all-butter-croissants-000000000000387544",
  "description": "Best enjoyed warm with a view of the Eifel Tower...\nMade with French butter",
  "storageInstructions": "Store in a cool, dry, dark place.",
  "freeFrom": ["Nuts"],
  "nutritionPer100g": {"energyKj": 1721.5, "energyKcal": 412.0, "fatG": 22.6, "saturatesG": 15.0, "sugarsG": 8.0, "fibreG": 2.5, "proteinG": 9.7, "saltG": 0.76, "carbohydrateG": 41.2},
  "scrapedAt": "2026-10-01T19:57:38Z"
}
```

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

| What you get | Price |
|---|---|
| Each product delivered | $0.0005 ($0.50 per 1,000) |
| Product details (`includeDetails`) | No extra charge |
| Searches with no results, unknown SKUs, failed inputs | Free |

Apify adds a tiny start fee of $0.00005 per run, which also buys the run's first seconds of compute. There are no proxy or compute charges on top.

Examples: tracking 200 products every day costs about $3 a month; every Special Buy ALDI Australia listed when we checked (321 products across five on-sale days) cost about $0.16. Apify's free plan gives you $5 of credit every month, about 10,000 products.

### Use cases

- **Special Buys alerts**: catch every new Special Buy as soon as ALDI lists it, with its on-sale date, for deal sites, newsletters and social posts.
- **Price monitoring**: track the prices of a fixed list of ALDI products every day by SKU.
- **Supermarket comparison**: compare ALDI with Woolworths (our Woolworths Scraper uses the same input and field names), or compare ALDI across Australia, the UK and Ireland.
- **Unit-price analysis**: rank products by price per kilo or per litre.
- **Product and nutrition databases**: build datasets with ingredients, allergens and nutrition panels.
- **Market research**: see which brands, ranges and pack sizes ALDI sells in any category.

### Good to know

- ALDI Australia, the UK and Ireland don't sell groceries online. The prices are the ones the ALDI website shows; the website itself notes that prices and availability may differ by store.
- Special Buys are sold while stocks last. `onSaleText` keeps ALDI's wording, e.g. "On Sale Sat 03 Oct", "In Store Thu 08 Oct" or "While Stocks Last".
- Was prices: ALDI shows them for price drops in the UK and Ireland. ALDI Australia's "Lower Prices" page has no was price.
- Weighed products such as meat: `price` is for a typical pack and `unitPrice` is per kilo; `isRandomWeight` marks them.
- ALDI Australia shows nutrition panels only as pictures; they are in `images`. `nutritionPer100g` is filled where ALDI lists the panel as text, in the UK and Ireland.
- With `includeDetails`, every product needs one more request, so runs take longer: about 80 products a minute instead of thousands.
- A product on several category or Special Buys pages of one run is delivered once. Searches keep every product they find, because each ranking matters.
- SKUs have 18 digits with leading zeros. In spreadsheets, format the `sku` column as text, or the zeros disappear.

### FAQ

**Do I need an ALDI account?** No.

**How do I get this week's Special Buys?** Turn on `specialBuys`. You get every day ALDI lists, on sale now and upcoming; filter by `onSaleDate`. For one day or theme, paste its Special Buys page address into `categoryUrls`.

**Can I track a list of products every day?** Yes. Put their SKUs or product links in `productIds`, save the input as a task and schedule it. 60 SKUs take one request, so even long lists are fast and cheap.

**Where do I find a SKU?** It is the long number at the end of a product page address, e.g. `000000000000398689` in `.../product/farmdale-full-cream-milk-2l-000000000000398689`. You can leave out the leading zeros.

**Can I compare countries?** Yes. Set `countries` to `["au", "uk", "ie"]` and each search term runs in each country, with prices in AUD, GBP and EUR.

**Does it cover other ALDI countries?** Not yet: Australia, the United Kingdom and Ireland.

**Can AI agents use it?** Yes. Through the Apify MCP server, your agent can call it as a tool with search terms, pages or SKUs.

**Is it legal to collect this data?** The scraper collects public product information shown on the ALDI websites, and no personal data. It calls the product API the websites themselves use, which robots.txt does not restrict. Check the terms that apply to your use case.

**Something doesn't work or a field is missing?** Open an issue on the Issues tab and include a link to your run.

### Other Actors by Fabrica Labs

- [Woolworths Scraper](https://apify.com/fabricalabs/woolworths-au-products): the Woolworths counterpart, with prices, specials and nutrition from woolworths.com.au in the same input and field names, handy for comparing the two supermarkets.
- [Google Trends Scraper](https://apify.com/fabricalabs/google-trends-fast): interest over time, by region and city, related queries and topics for any keyword.
- [Google Trends Trending Now Scraper](https://apify.com/fabricalabs/google-trends-trending-now): what is trending right now in any country, with search volume, growth and news.
- [Google Play Scraper](https://apify.com/fabricalabs/google-play-apps): app details, keyword rankings, top charts and reviews without personal data.
- [Apple App Store Scraper](https://apify.com/fabricalabs/apple-app-store): app details, keyword rankings, top charts and reviews without personal data.

This Actor collects public product information shown on aldi.com.au, aldi.co.uk and aldi.ie. It is not affiliated with or endorsed by ALDI.

# Changelog

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

# Actor input Schema

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

Which ALDI to collect from: Australia (aldi.com.au), the United Kingdom (aldi.co.uk) or Ireland (aldi.ie). It applies to search terms, Special Buys and bare SKUs; page and product links always use the country of their address.

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

Product searches, typed as you would on the ALDI website, e.g. milk, coffee beans, air fryer. Each term is paged through separately and its products keep their position in the results.

## `specialBuys` (type: `boolean`):

Collect every Special Buy ALDI lists right now: those on sale and the upcoming ones, one input per on-sale date (ALDI adds new ones twice a week). Each product carries its onSaleDate.

## `categoryUrls` (type: `array`):

ALDI category pages, e.g. https://www.aldi.com.au/products/dairy-eggs-fridge/milk/k/1111111160, or Special Buys pages such as https://www.aldi.com.au/special-buys/2026-10-03?theme=BBQ. Open the page on the ALDI website and paste its address; the address sets the country. A product on several pages is delivered once.

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

ALDI SKUs (e.g. 398689 or 000000000000398689) or product page links, to track the price of specific products. They are looked up 60 at a time, so long lists are fast. A bare SKU is looked up in the selected country, a link in its own. SKUs ALDI doesn't list are reported as free rows.

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

Order of the products within each search term or page, as ALDI sorts them.

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

Also read each product's page: description, ingredients, allergens, storage and, in the UK and Ireland, nutrition per 100 g. The price per product stays the same, but runs take longer: one extra request per product.

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

Stop after this many products in total, across all inputs and countries. 0 means no limit. It caps what a run can cost: 1,000 products cost $0.50.

## `maxResultsPerTerm` (type: `integer`):

Stop each search term, category or Special Buys date after this many products. 0 means no limit per input (the whole-run maximum still applies).

## `countries` (type: `array`):

Optional. Country codes (au, uk, ie) to run every search term, the Special Buys switch and bare SKUs in each of these countries, e.g. to compare prices. Replaces Country when set.

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

Apify datacenter proxy is the cheapest option and works with ALDI's product API. Switch to residential only if your runs get refused.

## Actor input object example

```json
{
  "country": "au",
  "searchTerms": [
    "milk"
  ],
  "specialBuys": false,
  "categoryUrls": [
    "https://www.aldi.com.au/products/dairy-eggs-fridge/milk/k/1111111160",
    "https://www.aldi.co.uk/products/fresh-food/k/1588161416978050"
  ],
  "productIds": [
    "000000000000398689",
    "https://www.aldi.co.uk/product/specially-selected-all-butter-croissants-000000000000387544"
  ],
  "sortBy": "relevance",
  "includeDetails": false,
  "maxResults": 50,
  "maxResultsPerTerm": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per product with price, unit price and Special Buys date, plus where it was found.

## `specials` (type: `string`):

Special Buys and price drops: on-sale dates, was prices and savings.

## `catalog` (type: `string`):

SKU, brand, pack size and category path, for matching and tracking products.

## `details` (type: `string`):

Ingredients, allergens and nutrition per 100 g, filled when includeDetails is on.

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

Every field of every product: prices, Special Buys dates, categories, all images and, with includeDetails, the product page.

# 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"
    ],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabricalabs/aldi-products").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"],
    "maxResults": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabricalabs/aldi-products").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"
  ],
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabricalabs/aldi-products --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fabricalabs/aldi-products"
        }
    }
}
```

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/hmxaAAxdRt2FnMx11/builds/ILnK51NWLSJu3U0G5/openapi.json
