ALDI Australia Products & Special Buys Scraper
Pricing
from $0.62 / 1,000 item processeds
ALDI Australia Products & Special Buys Scraper
Export ALDI Australia products and dated Special Buys with AUD prices, unit prices, pack sizes, brands, images and source URLs for recurring assortment and promotion comparisons.
Pricing
from $0.62 / 1,000 item processeds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Collect ALDI Australia products from public grocery categories and dated Special Buys listings. Export names, brands, current AUD prices, unit-price text, pack sizes, images, product IDs, source categories and displayed on-sale dates for assortment and promotion comparisons.
This is an unofficial, logged-out collection tool for aldi.com.au. It does not check live store inventory, purchase goods, search by keyword or collect other countries.
Who is this for?
Retail analysts can compare category snapshots over time. Promotion teams can track the products announced for a displayed Special Buys date. Data teams can join recurring exports by product ID, keeping the retrieval timestamp and listing URL as provenance.
Why use this scraper?
- Collect category cards without downloading product images or visiting every detail page.
- Follow listing pagination while respecting global product and page caps.
- Discover current dated Special Buys links rather than hard-coding last week's dates.
- Preserve missing values as null instead of inventing pack sizes or sale dates.
- Deduplicate by ALDI product ID across overlapping listings within each run.
Each run is a snapshot, not a built-in historical database or change-alert service. Schedule and compare snapshots downstream.
Getting started
- Open an Australian ALDI category and copy its full URL.
- Add the URL to Category or Special Buys URLs.
- Choose a maximum number of unique products and a page cap.
- Run the Actor and inspect its default dataset.
- Download JSON, CSV or Excel using Apify's dataset export controls.
A small category example:
{"startUrls": [{"url": "https://www.aldi.com.au/products/snacks-confectionery/k/1588161408332087"}],"maxItems": 100,"maxPages": 20}
Inputs
| Field | Default | Behavior |
|---|---|---|
startUrls | [] | Category or Special Buys URLs; omitted/empty discovers public top-level categories and the Special Buys hub. |
maxItems | 100 | Global unique-product cap, 1–10,000; form prefill 20; zero/unlimited is unsupported. |
maxPages | 20 | Global successful listing/hub-page cap, 1–200. Initial homepage discovery is outside this count. |
Accepted routes are /products/.../k/ID, /special-buys, and /special-buys/YYYY-MM-DD on HTTPS aldi.com.au. The non-www hostname is normalized to www. Product detail URLs, search URLs, foreign domains and unknown query parameters are rejected.
Only page and dated-listing theme URL parameters are supported. A positive page begins at that listing page; subsequent pages are followed. A theme is ALDI's own URL filter, not a free-text keyword match. There are no additional text filters.
Special Buys and navigation discovery
Use https://www.aldi.com.au/special-buys to discover currently linked dated listings. Alternatively, supply a current dated URL copied from ALDI, optionally with its theme parameter.
An empty startUrls list fetches the homepage and discovers top-level grocery category links plus the Special Buys hub. The discovered order is source-controlled and may change. A small maxItems may fill entirely from the first category: it does not ensure balanced category coverage. Supply explicit URLs for focused comparisons.
Dates in examples are illustrative; ALDI removes or changes old promotion pages. The Actor does not promise historical Special Buys retrieval.
Extracted fields
| Field | Meaning |
|---|---|
productId | Source SKU as a string, including leading zeros. |
name, brand | Product name and displayed brand. |
price, currency | Current relevant listing price in AUD dollars; currency is AUD. |
unitPrice | ALDI comparison text, such as $2.20 per 100 g; not a computed unit price. |
packSize | Source selling size or displayed selling unit. |
categories | Source product category labels; may differ from the seed's navigation category. |
saleDate, saleDateDisplay | Source on-sale date and display label, when supplied. |
imageUrl | First source image URL with a 600-pixel width. Images are not downloaded. |
url | Australian product detail link. |
sourceUrl | First listing page that supplied this product in the run. |
retrievedAt | UTC normalization timestamp. |
Missing optional values are null; absent categories are an empty array. A price is not an assurance that a product is in stock locally. No store availability field is inferred from online purchase flags.
Output example
This representative category record was observed during implementation; price and assortment can change:
{"productId": "000000000000173130","name": "Mega Roulette 45g","brand": "HARIBO","price": 0.99,"currency": "AUD","unitPrice": "$2.20 per 100 g","packSize": "45 g","categories": ["Pantry", "Confectionery"],"saleDate": null,"saleDateDisplay": null,"imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/600/f565efbc-67cf-4f99-bbcc-20145ad72315/haribo-mega-roulette-45g","url": "https://www.aldi.com.au/product/haribo-mega-roulette-45g-000000000000173130","sourceUrl": "https://www.aldi.com.au/products/snacks-confectionery/k/1588161408332087","retrievedAt": "2026-10-15T20:05:23.799Z"}
Pagination, limits and completeness
Seeds are processed in order. The Actor finishes a selected listing's pages before moving to the next seed. It stops on the first of the item cap, global page cap, source exhaustion, charge ceiling or platform runtime limit.
Products are unique by SKU within a run. The first encountered row wins, including source context. Separate runs intentionally collect the same IDs again for snapshot comparison. A capped run is a partial snapshot, not a complete catalogue. A failed run may retain partial rows; do not treat those as a complete successful collection.
How much does it cost to export ALDI Australia products?
Pricing is pay-per-event: $0.00005 per run plus each product successfully saved. There is no separate charge event for images, categories, sale dates or pagination.
| Apify plan tier | Per product | Per 1,000 products, excluding start |
|---|---|---|
| FREE | $0.001196 | $1.196 |
| BRONZE | $0.00104 | $1.04 |
| SILVER | $0.0008112 | $0.8112 |
| GOLD | $0.000624 | $0.624 |
| PLATINUM | $0.000624 | $0.624 |
| DIAMOND | $0.000624 | $0.624 |
Example BRONZE total event charges (start plus saved rows): 10 rows → $0.01045; 100 rows → $0.10405; 1,000 rows → $1.04005. These are Actor event charges, not a quote for any separate Apify account charges. A run with no saved products can still incur the start fee. Set a charge ceiling and reasonable collection limits.
Integrations
- Google Sheets: export each snapshot into a dated sheet and compare price changes by
productId. - Make or Zapier: trigger a run on your schedule, wait for completion and send bounded dataset rows to your workflow.
- Data warehouses: retain
retrievedAtandsourceUrl, then compare daily or weekly assortment snapshots. - Promotion calendars: group rows by displayed
saleDatewithout assuming every product has one.
Apify provides scheduling, webhooks and dataset exports; this Actor does not independently send alerts or retain a cross-run history.
API usage
Start a run with your own token stored securely outside code. Keep the returned run and dataset IDs, check the same run until terminal, then retrieve its dataset.
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~aldi-australia-products-special-buys/runs' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://www.aldi.com.au/special-buys"}],"maxItems":50}'
JavaScript, using the official Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/aldi-australia-products-special-buys').call({startUrls: [{ url: 'https://www.aldi.com.au/special-buys' }], maxItems: 50});if (run.status !== 'SUCCEEDED') throw new Error(`Run ${run.id}: ${run.status}`);const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 50 });
Python:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/aldi-australia-products-special-buys').call(run_input={'startUrls': [{'url': 'https://www.aldi.com.au/special-buys'}], 'maxItems': 50})if run['status'] != 'SUCCEEDED':raise RuntimeError(f"Run {run['id']}: {run['status']}")rows = client.dataset(run['defaultDatasetId']).list_items(limit=50).items
MCP use
Use the Actor-specific hosted endpoint with an authorized Apify account:
claude mcp add --transport http apify \'https://mcp.apify.com?tools=automation-lab/aldi-australia-products-special-buys'
For Claude Desktop, Cursor and VS Code, use the equivalent desktop/editor configuration (client syntax may vary):
{"mcpServers":{"aldi":{"url":"https://mcp.apify.com?tools=automation-lab/aldi-australia-products-special-buys"}}}
Example prompt: “Collect up to 25 products from ALDI Australia's current Special Buys and show name, price and sale date.” Discover actual tool names and input schemas using scoped tools/list. Actor selection also exposes run/data helpers; it is not exactly one tool. Discovery alone does not authorize a run.
For an authorized invocation, start once and keep the returned run ID. call-actor waits up to 45 seconds (waitSecs, default 30); returned IDs are metadata, not rows. If pending, check that same run using get-actor-run, with 2/4/8-second backoff capped at 10 seconds and a total 120-second deadline. Set client timeout above the selected server wait plus transport margin. Recover the known run after client timeout; do not blindly start another. At deadline, report pending and its ID. Report terminal failures honestly, with any rows labelled partial.
After success, read the returned defaultDatasetId using get-dataset-items with explicit offset, limit and fields. An example consumer context budget is pages of 20 source rows, at most 100 rows or 64 KiB of serialized UTF-8 content, whichever comes first. Enforce that byte ceiling host-side before model injection, including oversized pages; otherwise do not claim a hard byte guarantee. Track source offsets, report truncation and continuation offset, and keep full exports outside model context. These are consumer context limits, not smaller Actor collection defaults. Client caching and tool discovery do not guarantee universal token savings.
Reliability and troubleshooting
Requests are sequential and use direct public HTTP, with no paid proxy fallback. Transient network, 429 and server failures receive up to three total attempts with backoff. Deterministic HTTP errors and missing structured listing state fail explicitly rather than returning a misleading empty success.
FAQ
Why did I receive fewer rows than expected? Check the page cap, source count, duplicate IDs, item cap and charge ceiling. A dated theme can naturally contain few records.
Why did an old dated URL fail? ALDI can remove past promotions. Copy a currently linked date or use the Special Buys hub.
Can I search for a product or check store stock? No. Use category/date URLs; free-text search, personal accounts and stock-by-store queries are outside this Actor's scope.
Is the sale date the retrieval date? No. It is ALDI's source-provided on-sale date, or null. retrievedAt records collection time separately.
Legality, responsible use and diagnostics
Collect only public information you are entitled to use, respect applicable terms and laws, and avoid excessive requests. ALDI names and trademarks belong to their owners; this Actor is not affiliated with ALDI. Check source pages before using prices or promotions for purchasing decisions.
No AI model is used by the running Actor or to transform its records. Data is processed transiently; output and platform logs remain in your Apify storage under your account's retention/deletion controls. Delete run storage through Apify when no longer needed. No cross-run product cache is retained by the Actor. Contact the developer through the Actor's Issues tab for help, including a run link and non-sensitive input.
Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days. Do not submit credentials or personal information in input URLs.
Related Actors
For category-only ALDI snapshots, see ALDI Australia Grocery Category Products & Prices. For UK grocery comparisons, see ASDA Grocery Products & Prices. Each Actor has its own supported sources and input contract; this Actor adds current dated Special Buys navigation to Australian category snapshots.