ALDI Australia Scraper - Prices, Special Buys & Full Catalogue avatar

ALDI Australia Scraper - Prices, Special Buys & Full Catalogue

Pricing

$0.30 / 1,000 results

Go to Apify Store
ALDI Australia Scraper - Prices, Special Buys & Full Catalogue

ALDI Australia Scraper - Prices, Special Buys & Full Catalogue

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.

Pricing

$0.30 / 1,000 results

Rating

0.0

(0)

Developer

Giovanni Rich

Giovanni Rich

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Security

Limited permissions

Share

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.

FieldDefaultDescription
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.
specialBuysnoneall = 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.
maxItems100Products per source. 0 = everything ALDI lists.
storeG452 (Glenmore Park NSW)A store ID like G330, or a postcode like 3000 to use the nearest store.
sortrelevancerelevance, price_asc, price_desc, name_asc or name_desc.
includeDetailsfalseAdds description, ingredients, allergen statements, storage, usage and variants. One extra request per product.
proxyConfigurationApify 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:

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

The whole ALDI catalogue in one run:

{
"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:

{
"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:

{
"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:

{ "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)

FieldFill rate
sku, name, price, priceText, soldBy, url, store, scrapedAt100%
imageUrl / images99.97% (1 product had no image)
brand93% (fresh produce and some general merchandise have no brand)
size, unitPrice, unitPriceText82% (clothing, tools and other general merchandise have no size or unit price)
department, category, categoryPath82% (most Special Buys are not filed in a grocery category)
onSaleDate, onSaleText22% (the Special Buys and limited-time products; 100% of a Special Buys run)
ageRestriction4% (liquor)
description99.9% with includeDetails
ingredients / allergenStatements / storageInstructions26% / 26% / 28% with includeDetails (ALDI publishes them for part of the food range only)
usageInstructions10% with includeDetails
variant, variantOptions, variantSkus14% 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').

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