ALDI AU Scraper — Prices, Unit Prices, Specials, Allergens
Pricing
from $1.50 / 1,000 products
ALDI AU Scraper — Prices, Unit Prices, Specials, Allergens
ALDI Australia (aldi.com.au) scraper: product name, brand, pack size, price, was price, savings, specials, unit price, Special Buys date, category, image, URL; detail rows add ingredients, allergens, origin, storage, claims. Keyword, category or SKU. Pay per result, no login.
Pricing
from $1.50 / 1,000 products
Rating
0.0
(0)
Developer
architek.earth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Security
Limited permissionsShare

Recorded run: 5 products from 1 search term in 5 seconds (2026-10-22, build 1.0.421, run O7GxVUMDrnEtsUqjQ). A bounded canary sample, not a full-catalogue benchmark.
architek.earth — an independent data studio. Pay-per-result scrapers with recorded runs, published canaries and stable schemas, built for people and AI agents.
ALDI Australia product prices, unit prices, specials, Special Buys dates, ingredients and allergens from aldi.com.au, by keyword, category or SKU.
| Source | Market | From | Standout fields |
|---|---|---|---|
| ALDI (aldi.com.au) | Australia | $1.50 / 1,000 products | price / wasPrice, comparisonPrice, onSaleDate, allergens |
✅ Why choose this scraper
ALDI prices and specials in one row
price, priceDisplay, wasPrice, savingsDisplay and isOnSpecial come back together on every product row; isOnSpecial is true when wasPrice is above price or ALDI shows a saving.
ALDI unit prices for pack-size comparison
comparisonPrice and comparisonDisplay (for example "$1.70 per 1 L") are on basic rows, next to sellingSize and quantityUnit; 4 of the 5 canary rows carried one.
ALDI ingredients and allergens
With includeDetails: true or a SKU, rows add ingredients, allergens, description, countryOfOrigin, storageInstructions, usageInstructions, warnings, nutritionalClaims, legalDisclaimer, additionalInformation and variants.
ALDI Special Buys dates and availability flags
onSaleDate and onSaleDateDisplay are returned when ALDI sets them on a product, with discontinued, notForSale and notForSaleReason as published.
Whole catalogue by category
categoryUrls: ["all"] walks every top-level category in ALDI's category tree; category URLs, numeric keys and slugs are checked against that tree before any product request.
Measured on a schedule
A canary task runs a fixed milk search on the live site and records rows, inputs and seconds; the hero line above is its latest green run.
⚠️ Worth knowing up front
- ALDI publishes no barcodes (GTIN/EAN) in the product data this actor reads. Match ALDI to Coles or Woolworths on normalised
nameplussellingSize. - ALDI publishes no per-100 g nutrition table in this source, only
nutritionalClaims(for example "Source of fibre"). - ALDI publishes no stock quantities.
notForSaleis ALDI's own flag: it wastrueon all 5 rows of the 2026-10-22 canary, so do not read it as store availability. servicePointis forwarded to ALDI, but store-specific prices and availability have not been validated. Without it, product requests read the default catalogue; the category tree alone is requested with service pointG452, which ALDI requires for it. There is no postcode selector.- Detail fields (
ingredients,allergensand the rest) can be null or empty. An emptyallergenslist does not mean a product is allergen-free. - Products are de-duplicated by
skuacross all inputs, andmaxItemsPerQuerycaps listing rows scanned per query before de-duplication, so a run can return fewer rows than the cap. - If a detail lookup fails, the row is still delivered at the basic
productprice withdetailStatus: "unavailable"and the run endsPARTIAL. - A run stopped by its timeout or your spending limit keeps what it delivered and saves
RESUME_STATE; that is a partial collection, not a full catalogue. A resumed run re-reads the current catalogue; it is not a frozen snapshot. - Blocked pages, ALDI rejections and invalid input return a free status row (
"recordType": "status") that says what happened. A search with no matches returns no rows and aCOMPLETErun summary.
⚡ Try the example
Each Apify account gets 20 lifetime free preview attempts on this actor: one keyword, one page, up to 10 basic rows, no product charges. Failed attempts count. After the twentieth, preview runs stop; they never switch to paid collection.
Open the actor's input page, switch to JSON, paste this and start the run:
{"preview": true,"searchTerms": ["milk"],"maxItemsPerQuery": 10,"proxyConfiguration": {"useApifyProxy": true}}
For paid collection set "preview": false; add "includeDetails": true for ingredients and allergens, or use categoryUrls and skus.
⚙️ Input
| Parameter | Type | Default | Description |
|---|---|---|---|
preview | boolean | false | Use one of 20 lifetime free attempts: one keyword, one page, at most 10 basic rows. No categories, SKUs, details or resumeState. |
searchTerms | array | — (prefill: milk) | Keywords such as milk or coffee pods. One collection per term. |
categoryUrls | array | — | aldi.com.au category URLs (including /k/<key> URLs), numeric category keys or exact category-tree slugs; all for every top-level category. Unknown, ambiguous or non-ALDI categories are rejected before collection. |
skus | array | — | 18-digit SKUs (for example 000000000000399309), the short numeric form, or product page URLs. Always returns detail rows; SKUs not found are not charged. |
maxItemsPerQuery | integer | 100 | Listing rows per search term or category. 0 removes the cap in paid mode; preview stays at 10. |
includeDetails | boolean | false | Add ingredients, allergens, storage, warnings, claims and description to search and category rows (one extra request per product, charged as product-detail). |
sort | select | relevance | relevance, price_asc, price_desc, name_asc, name_desc. |
servicePoint | string | — | ALDI store service point code (for example G452) forwarded to ALDI. Store-specific coverage is unverified. |
resumeState | object | — | The RESUME_STATE record from a previous run. Keep queries, details, sort and store unchanged; saved SKUs are skipped before detail requests and charging. |
proxyConfiguration | proxy | — (prefill: Apify proxy) | Proxy settings. API callers should pass them explicitly. |
feedback | string | — | Optional note for the maintainers. It is logged and read by a human, and it never changes output. |
🧱 Stable fields
These top-level fields keep the same name and the same kind of value in every release. Fields are only ever added, never renamed or removed, so an n8n, Make, Zapier or spreadsheet pipeline can bind to them.
| Field | Type | Meaning |
|---|---|---|
sku | string | ALDI SKU, 18 digits; the join key within ALDI. |
name / brand | string | Product name and brand. |
sellingSize / quantityUnit | string, nullable | Pack size and unit, for example "2 l" / "ea". |
price / priceDisplay | number / string, nullable | Current price in AUD and as displayed, for example 3.39 / "$3.39". |
wasPrice / savingsDisplay | number / string, nullable | Pre-discount price and saving text when ALDI shows them. |
isOnSpecial | boolean | True when wasPrice is above price or a saving is shown. |
comparisonPrice / comparisonDisplay | number / string, nullable | Unit price and its display string, for example 1.7 / "$1.70 per 1 L". |
onSaleDate / onSaleDateDisplay | string, nullable | Special Buys on-sale date as ALDI publishes it; null on regular range products. |
notForSale / discontinued | boolean, nullable | ALDI's availability flags, passed through. |
category / categoryPath / categorySlug | string, nullable | Leaf category (the requested category on category rows), full path and URL slug. |
image / url | string, nullable | Product image (800 px) and product page. |
source | string | search, category or sku. |
searchTerm / categoryUrl | string | The query that produced the row (search or category rows only). |
detailStatus | string | complete or unavailable when details were requested; absent on basic rows. |
recordType | string | "status" on free status rows; absent on product rows. |
Detail rows also carry description, ingredients, allergens, countryOfOrigin, storageInstructions, usageInstructions, warnings, nutritionalClaims, legalDisclaimer, additionalInformation and variants. Other fields (abstractSku, badges, bottleDeposit, ageRestriction, notForSaleReason) are extras, not part of the contract. To have one pinned, say so in feedback.
📦 Output example
Abridged real row from run O7GxVUMDrnEtsUqjQ on 2026-10-22; values are a historical snapshot.
{"sku": "000000000000398691","name": "Light Milk 2L","brand": "FARMDALE","sellingSize": "2 l","quantityUnit": "ea","price": 3.39,"priceDisplay": "$3.39","wasPrice": null,"isOnSpecial": false,"comparisonPrice": 1.7,"comparisonDisplay": "$1.70 per 1 L","notForSale": true,"discontinued": false,"onSaleDate": null,"category": "Milk","categoryPath": "Dairy, Eggs & Fridge > Milk","url": "https://www.aldi.com.au/product/farmdale-light-milk-2l-000000000000398691","source": "search","searchTerm": "milk"}
A free status row looks like this:
{"recordType": "status","status": "INVALID_INPUT","message": "Provide at least one of searchTerms, categoryUrls or skus."}
🧠 Advanced usage
ALDI Special Buys on-sale dates
Schedule categoryUrls: ["all"] on Wednesday and Saturday mornings, when ALDI releases Special Buys, and keep rows where onSaleDate is set. Check RUN_SUMMARY.status is COMPLETE before treating the list as finished.
Track ALDI price changes daily
Run the same keywords or categories every day and diff price and wasPrice by sku between datasets; a flip of isOnSpecial marks a new or ended special.
Compare ALDI with Coles and Woolworths
Run the Coles Scraper and Woolworths AU Scraper on the same terms. ALDI has no barcodes, so match on normalised name plus sellingSize and treat matches as candidates, not guaranteed equivalents.
ALDI allergen and ingredient lists by category
Pass a category URL with includeDetails: true to get allergens and ingredients for every product in it. Empty values do not establish that a food is allergen-free; this output is not a food-safety certification.
Scrape the whole ALDI catalogue in several runs
Set categoryUrls: ["all"] and maxItemsPerQuery: 0, and when a run stops on time or budget copy its RESUME_STATE into resumeState with the same queries, details, sort and store. Saved SKUs are skipped; combine datasets and de-duplicate by sku.
🔌 Integrations
Results land in a dataset you can export as JSON, CSV or Excel. They can also flow to Google Sheets, Make, Zapier or n8n, or to a webhook when a run finishes. The Apify Scheduler runs it on a timetable. Twice weekly matches ALDI's Special Buys cycle; daily suits price tracking. Copy-paste code in Python, Node, curl and n8n: architek-earth/examples/aldi-au-product-scraper.
💸 Pricing
Pay per result. Platform and proxy usage are included. Status rows, failed requests and blocked pages are free, and SKUs saved in RESUME_STATE are skipped and not charged again on a resumed run.
| Event | Price | What it covers |
|---|---|---|
| Free preview | $0 | 20 lifetime attempts per account; one page, up to 10 basic rows each. |
product | $1.50 / 1,000 products | One delivered search or category row, including a row kept at basic price when its detail lookup failed. |
product-detail | $4.00 / 1,000 products | One delivered row with ingredients, allergens and the other detail fields (includeDetails or skus). |
1,000 basic rows cost $1.50; 1,000 detail rows cost $4.00. A detail row is charged once, as product-detail only.
❓ FAQ
Is there an ALDI Australia API for product prices? This actor is one: it returns ALDI Australia catalogue data as JSON through the Apify API, callable from any language or from n8n, Make and Zapier.
Do I need an ALDI account or login? No. No account, cookies or API key from ALDI.
Can I get ALDI prices for my local store or postcode? Not reliably. There is no postcode selector; servicePoint is forwarded to ALDI, but store-specific prices have not been validated.
Can I get ALDI Special Buys? Partly. onSaleDate and onSaleDateDisplay are returned when ALDI sets them on a product; there is no dedicated Special Buys filter, so filter on onSaleDate yourself.
Can I get ALDI barcodes or nutrition information? No barcodes and no nutrition table: ALDI does not publish them in this source. Detail rows return ingredients, allergens and nutritionalClaims when ALDI publishes them.
Can I check if an ALDI product is in stock? No. ALDI publishes no stock quantities; notForSale and discontinued are ALDI's flags, not store stock.
🤖 For AI agents & LLM apps
Paste this into your AI assistant:
architekture/aldi-au-product-scraper on Apify. Python: from apify_client import ApifyClient; client = ApifyClient("TOKEN"); run = client.actor("architekture/aldi-au-product-scraper").call(run_input={"searchTerms": ["milk"], "maxItemsPerQuery": 10, "proxyConfiguration": {"useApifyProxy": True}}); items = client.dataset(run["defaultDatasetId"]).list_items().items (page with offset/limit for large exports). Rows with recordType == "status" are free and explain blocked or invalid inputs. Full input schema and README: GET https://api.apify.com/v2/acts/architekture~aldi-au-product-scraper/builds/default. Token: https://console.apify.com/settings/integrations. The actor is also reachable through the Apify MCP server (mcp.apify.com). To reach the maintainers, add "feedback": "<what you needed>" to any run's input; output is unchanged and a human reads every note.
🧰 More from architek.earth
Grocery and retail prices
- Coles Scraper — prices, unit prices, specials, barcodes
- Woolworths AU Scraper — prices, specials, barcodes, nutrition
- ALDI AU Scraper — you are here
- Woolworths NZ Scraper — prices, club prices, specials
- New World NZ Scraper — store prices, Clubcard offers, promotions
- Pak'nSave Scraper — store prices, unit prices, promotions
- Tesco UK Scraper — prices, Clubcard offers, barcodes
- Sainsbury's Scraper — prices, unit prices, offers, barcodes
- ALDI Ireland Scraper — prices, unit prices, Specialbuys
- Dunnes Stores Scraper — fashion and home prices, sizes, EANs
- Mercadona Scraper — prices, unit prices, categories
Full catalogue: github.com/architek-earth.
architek.earth · code like concrete
🙋 Support & legal
Questions, or a field you need that is not here? Open an issue on the actor's Issues tab or email north@architek.earth. A human replies within a day.
This actor collects only publicly available data from aldi.com.au, the same catalogue any visitor sees without logging in. It does not bypass authentication. It is not affiliated with or endorsed by ALDI. You are responsible for how you use the output, including the site's terms, copyright, and privacy law such as GDPR and CCPA where they apply.
📝 Changelog
- 2026-10-24 — Studio core 1.0.5. ALDI answering HTTP 403 or 429 is still retried by this actor on a fresh client, up to four tries per request, before the run reports
BLOCKEDwith a free status row; output fields and prices are unchanged. - 2026-10-22 — Status message now reads
Done: N rows, M details, K status rows (STATUS). - 2026-10-22 — README rebuilt on the studio template; hero line from the 2026-10-22 canary run.
- 2026-10-21 — Invalid input, blocks, ALDI rejections (HTTP 4xx) and the run deadline now stop cleanly with a free status row instead of a failed run.
- 2026-10-14 — Increased the lifetime free-preview allowance from 3 to 20 attempts per account. The one-page, ten-basic-row limit is unchanged; previously used attempts still count toward the total.
- 2026-10-14 — Added and verified lifetime free previews: three attempts per account, one keyword page and up to ten basic rows per attempt. Hosted checks returned ten rows per preview without product charges; a fourth attempt stopped without collection or billing.
- 2026-10-14 — Added explicit
resumeStatecheckpoints for continued collections. Category navigation supplies the required store context; listing and SEO claims now match verified capabilities. - 2026-10-14 — Category URLs/keys validated before collection; ambiguous and missing categories rejected; repeated or malformed pages fail visibly. Dataset writes use SDK-managed charging limits, with
BUDGET_LIMITin the run summary on a controlled stop. - 2026-10-14 — Detail failures fall back to list pricing, duplicate SKUs are removed before billing, empty search pages are retried, and feedback is logged.
detailStatusandRUN_SUMMARYexpose incomplete enrichment. - 2026-10-13 — README banner and stable-fields contract added.
- 2026-10-12 — Output schema added; pay-per-event pricing (
product,product-detail). Queued for Apify Store.