Aldi Australia Price Scraper & Tracker: Special Buys
Pricing
from $0.90 / 1,000 products
Aldi Australia Price Scraper & Tracker: Special Buys
Aldi Australia shelf prices by keyword, category or product page, Special Buys drops, and a watch mode that returns only added or changed prices. Coles and Woolworths are not available at the moment.
Pricing
from $0.90 / 1,000 products
Rating
0.0
(0)
Developer
Russell Yapp
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
3
Monthly active users
a day ago
Last modified
Categories
Features
Share
Shelf prices from Aldi Australia in one row shape, read during the run (scrapedAt on every row): search by keyword, read a category or product page, or list Aldi's Special Buys drops. Each row is one product with price, unitPrice, wasPrice, promotionText, storeId and a matchKey join key, plus ean where the shop publishes one. Australia only, charged per product returned plus a $0.005 start fee.
Independent tool. Not affiliated with, endorsed by or sponsored by Coles, Woolworths or Aldi. Their names and marks belong to their owners and are used only to say where the data comes from.
Change in 0.1.15 (note dated 23 Oct 2026). From version 0.1.15, Coles and Woolworths are not available at the moment; runs read Aldi Australia only. See "Coles and Woolworths" below.
How this Actor bills. You pay per product row returned plus the start fee. A run that returns nothing costs only the start fee. If a shop blocks the run, that shop stops and you pay only for the rows already returned.
First run. The Console form is pre-filled with a search for "milk" and maxItems 15: up to 15 rows, at a cost of up to $0.028 on the Free plan (15 × $0.0015 + $0.005). Without maxItems, a run returns up to 60 rows (up to $0.095):
{ "mode": "search", "retailers": ["aldi_au"], "queries": ["milk"], "maxItems": 15 }
Related Actors by the same publisher: UK Grocery Prices: Tesco, Sainsbury's, Asda, Aldi | Hotel Prices from Google Hotels: Vendor Rates, History | Rightmove & OnTheMarket UK Property Listings + Sold Prices | UK Contracts Finder and Find a Tender Scraper: Gov Contracts | LEI Lookup: Legal Entity Identifier Search by Name or Status | UK Importers and Exporters: HMRC Trade Data.
Weekly overview, free. A separate free index (CC BY 4.0) publishes weekly shelf-price index numbers and matched-product counts for Coles, Woolworths and Aldi Australia, from our own weekly Wednesday snapshots: https://data.yappman.com/au-shelf-price-index/. This Actor returns Aldi Australia's live product rows (price, unit price, was-price and promotion text) when you need the rows themselves.
Cost. On the Free plan: $0.005 per run plus $0.0015 per product. The default run (a search for "milk", up to 60 rows) costs up to $0.095 ($0.059 on Gold). A run that returns nothing costs only the start fee, and if a shop blocks the run, that shop stops and you pay only for the rows already returned (plus the start fee). Nothing else is charged on a search, category, product or Special Buys run.
Run it with the pre-filled input: click Start.
| Mode | Use it to | Input | Example question |
|---|---|---|---|
search | Find products by keyword | queries, retailers | "What does full cream milk cost at Aldi?" |
category | Read the products on a shop's category page | categoryUrls | "What do the products in this Aldi dairy category cost?" (up to maxItems rows) |
product | Read named product pages | productUrls | "What is the unit price of this Aldi product?" |
specialBuys | Read Aldi's dated Special Buys drops | specialBuysDrops (optional) | "Which Aldi Special Buys are coming up, and what do they cost?" |
Sample questions an agent can answer with one run: "What does full cream milk cost at Aldi?", "Which Aldi Special Buys are coming up?" and "What is the unit price of this Aldi product?"
Retailer content (images, descriptions, ingredients) is not ours.
An Aldi sample row. The Actor produced every field from a captured Aldi product page (24 Sep 2026, product 398691), except imageUrl, which is shortened, and scrapedAt, which is illustrative. isMarkedDown, markdownAmount and markdownPercent are the Actor's own calculation from price and wasPrice:
{"retailer": "aldi_au","retailerProductId": "000000000000398691","ean": [],"name": "Light Milk 2L","brand": "FARMDALE","packSize": "2L","price": 3.39,"wasPrice": null,"unitPrice": { "value": 1.7, "measure": "l" },"loyaltyPrice": null,"promotionText": null,"promotionEndsAt": null,"inStock": null,"categoryPath": ["Dairy, Eggs & Fridge", "Milk"],"url": "https://www.aldi.com.au/product/farmdale-light-milk-2l-000000000000398691","imageUrl": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/1500/...","rating": null,"scrapedAt": "2026-09-24T10:15:00Z","matchKey": "farmdale light milk 2l 2000ml","currency": "AUD","market": "au","storeId": "G452","onSaleDate": null,"isMarkedDown": false,"markdownAmount": null,"markdownPercent": null}
Sample output row
The Aldi row above shows the row shape. Every row of an ordinary run has these fields, in this shape; watch runs add the four watch fields (see "Output field reference").
What you get: the Australian supermarket prices dataset
| Retailer | Modes | Barcode (EAN) coverage | Promotion fields | Stock |
|---|---|---|---|---|
| Aldi | search, category, product, Special Buys | None — Aldi publishes no barcode in its listing API, product API or product pages, so rows carry an empty ean and join on matchKey | wasPrice when Aldi shows a was price; promotionText only on Special Buys rows (the on-sale line, e.g. On Sale Wed 07 Oct) | Not reported online (inStock is null) |
Every row also carries matchKey, a normalised brand + name + pack size, which is the join key where ean is empty.
Runs read Aldi Australia only, and the default retailer list is Aldi Australia. Rows have one shape, with a matchKey to join the same product across data sets. ean holds a check-digit-validated GTIN-13 where the retailer publishes one; Aldi publishes none, so Aldi rows have an empty ean. Specials come through as wasPrice and promotionText, and specialBuys mode returns Aldi's dated Special Buys drops with each drop's date in onSaleDate. If half or more of a retailer's products in a run cannot be read into rows, which usually means the site has changed, the run summary marks that retailer degraded instead of ok and the run's status message says so. Stores are fixed, not chosen: Aldi is priced as shown to a visitor with no store selected (service point G452). Every row records its store in storeId. The Actor has no store or postcode input, so it cannot return prices for a store you pick.
Aldi Australia: what the retailer exposes
For Coles and Woolworths, see "Coles and Woolworths" below.
Aldi Australia prices. This Aldi Australia price scraper returns Aldi's online shelf prices, as shown to a visitor with no store selected (service point G452), as published on the site. Aldi exposes no barcode anywhere — its listing API, product API and product pages all carry none — so rows carry an empty ean array and a matchKey (normalised name and pack size) instead, and storeId is G452. Aldi reports no stock online, so inStock is null.
Aldi Special Buys. Special Buys mode (mode: "specialBuys") returns the products of Aldi Australia's Special Buys drops: the dated non-grocery and seasonal releases Aldi puts in store on Wednesdays and Saturdays, which sit outside its normal categories. It reads the drops Aldi's Special Buys page lists (usually one to two weeks ahead): by default every drop dated today or later (Sydney date), including drops not yet on sale, or the dates you give in specialBuysDrops. Rows have the same shape as every other row: onSaleDate is the drop date, promotionText the on-sale line (e.g. On Sale Wed 07 Oct), and inStock and promotionEndsAt are null (Aldi sells Special Buys while stocks last and publishes no end date). A drop is typically 20 to 100 products, so set maxItems to cover the drops you want. Rows are charged like any other product row.
Coles and Woolworths
Coles and Woolworths are not available at the moment (since version 0.1.15). The Actor reads Aldi Australia only, and the default retailers list is Aldi Australia.
- A request for Coles or Woolworths is skipped, shown as
skippedin the run summary, and no rows are charged for it. - A run that names only Coles and/or Woolworths ends as succeeded with
statusrefusedin the run summary and a message saying so. It reads nothing and no product is charged; only the start fee applies. - As read on 20 Oct 2026, Woolworths' website terms restrict automated access, and Coles' terms limit use to personal purposes. We make no claim that any retailer permits this use.
Australian grocery price tracking and other use cases
- Price-comparison apps and deal-tracking channels
- Competitor and retail-analytics price monitoring
- Inflation trackers and basket-of-goods research
- Tracking Aldi's Special Buys drops and their prices
- AI agents doing Australian grocery price or basket lookups
Example inputs
One input per mode. Each field and value is the one the input schema documents.
Search Aldi for a keyword:
{ "mode": "search", "retailers": ["aldi_au"], "queries": ["full cream milk"], "maxItems": 40 }
Read one category page (the retailer comes from the URL):
{ "mode": "category", "categoryUrls": ["https://www.aldi.com.au/products/dairy-eggs-fridge/k/960000000"], "maxItems": 60 }
Read Aldi's whole online range, department by department (leave categoryUrls empty). Departments are read in a fixed order starting with fruit and vegetables, so set maxItems high enough for the spread you want:
{ "mode": "category", "fullRange": true, "maxItems": 500 }
On the Free plan, 500 products cost about $0.76 (500 × $0.0015 + $0.005). The whole range was about 2,600 products when we last counted it, about $4 for one run on the Free plan; set maxItems to 3000 to cover the range (the count varies; 3000 products cost at most about $4.51 on the Free plan: 3000 × $0.0015 + $0.005). With the default maxItems (60), the products come mostly or entirely from the first department or two.
Read one product page:
{ "mode": "product", "productUrls": ["https://www.aldi.com.au/product/farmdale-full-cream-milk-2l-000000000000398689"] }
Read Aldi's Special Buys drops, today's and later (leave specialBuysDrops out):
{ "mode": "specialBuys", "maxItems": 100 }
Watch: only what changed since the last run
Give a run a watchId and it becomes a watch. The first run with that id returns every Aldi Australia product it reads (up to maxItems), each with watchEvent baseline, charged per product like a search. Each later run with the same id and the same search terms, category, product or Special Buys input returns only what changed since then: added products and changed prices (with oldPrice, oldWasPrice and movePct), charged per product row. Products that did not change return no row and cost nothing beyond the start fee.
{ "mode": "search", "retailers": ["aldi_au"], "queries": ["full cream milk"], "maxItems": 60, "watchId": "milk-weekly" }
watchEventschooses what is reported (defaultaddedandchanged). Withremoved, products that left the scope are listed by name in the run summary (watch.removedNames), free, never as rows.minMovePctignores smaller price moves; small moves add up and are reported once they reach it.addedmeans a product this watch has not reported to you before: new to the scope, back in it after leaving, or left over from an earlier run. The watch remembers only what it has reported to you, so a product that leaves the scope and comes back later is returned again asadded, and charged.- Watches read Aldi Australia only. A scope of more than 3,000 products, a read that comes back much smaller than last time, or a read that fails part-way is not compared and nothing is charged beyond the start fee; the run summary says why.
- Changes that do not fit under
maxItemsor your run's spend limit are returned by the next run. This includes the first run: if the scope holds more products thanmaxItems(or than your spend limit pays for), the rest are returned by later runs asadded,maxItemsat a time, each charged. For example, a 2,600-product category withmaxItems60 is charged in full over about 43 runs. Ifaddedis not inwatchEvents, they are never returned. - A second run on the same
watchIdwhile one is still running stops at once (start fee only). A run that crashes or fails part-way can miss some changes for good: it never reports, or charges, a change twice. - The watch's memory is a key-value store named
grocery-watch-<watchId>in your own Apify account. Delete it to start the watch again: the next run is then a first run again, charged per product. A different search on the samewatchIdis refused (the same terms or URLs in another order also count as different), so use a new id for a new scope. If you abort a watch run, up to one batch of 50 rows can be left in that store without being charged. - A watch can use
fullRange(the whole range was about 2,600 products when we last counted it, under the 3,000-product watch limit; if the range grows past 3,000, the watch is refused as described above). The department list is part of the watch's scope: if a later version of this Actor changes the list (Aldi renames, adds or removes a department), the next run of that watch is refused as a different scope (see above), and you start it again with a newwatchId.
When to use this Actor
- You want current shelf prices for named products or categories at Aldi Australia in one schema, with
unitPrice,wasPriceandpromotionTextwhere the shop shows them. - You want Aldi's Special Buys drops and their prices.
- You want a small, cheap read on a schedule (see Recipes) and are happy to compare runs yourself.
When not to use this Actor
- You need prices at a store you choose: there is no store-selection input (Aldi is as shown to a visitor with no store selected; see Reference location).
- You need New Zealand or any other country's shops: Australia only.
- You need Coles or Woolworths prices: they are not available at the moment (see "Coles and Woolworths").
- You need loyalty or member prices:
loyaltyPriceis alwaysnull. - You need stock levels for Aldi: Aldi reports none online (
inStockisnull). - You need price history or only what changed since a date: every run reads the shelf as it is now (see Limitations).
- You need a basket total: the basket endpoint is not available.
- You need account, order, basket or delivery data (delivery slots, fees or availability): the Actor does not log in, so it has none of that.
Input reference
| Field | Type | Notes |
|---|---|---|
retailers | array of coles (Coles) / woolworths (Woolworths) / aldi_au (Aldi Australia) | Which retailers to search; default Aldi Australia only. coles and woolworths: not available at the moment; a request for them is skipped and shown as skipped in the run summary (see "Coles and Woolworths"). Each runs as its own adapter with its own circuit breaker, so one retailer's bad night doesn't fail the run. Ignored in category and product mode, where the retailer is inferred from each URL, and in specialBuys mode, which always reads Aldi |
mode | search / category / product / specialBuys | One mode per run; default search. specialBuys returns the products of Aldi's Special Buys drops |
queries | array of strings | Search mode; each query runs against every selected retailer; default ["milk"] |
categoryUrls | array of URLs | Category mode; the retailer is inferred from each URL's hostname. Leave empty unless you were given a URL |
fullRange | boolean | Category mode: true reads Aldi Australia's 14 departments in a fixed order (fruit and vegetables first) instead of categoryUrls, which must be empty. maxItems still caps what is returned and charged. Default false |
productUrls | array of URLs | Product mode; retailer inferred from each URL's hostname. Leave empty unless you were given a URL |
maxItems | integer | Hard cap on rows pushed across all retailers, 1 or more; default 60 |
excludeMarketplace | boolean | Woolworths only; Woolworths is not available at the moment. Leaves out Everyday Market (third-party marketplace) products from search and category results; default off |
colesProductDetails | boolean | Coles only; Coles is not available at the moment. Looks up each product's barcode (ean) in search and category mode; default off. Product URLs always include it |
watchId | string | Turns the run into a watch (see "Watch: only what changed since the last run"); 1 to 40 lowercase letters, digits and hyphens. Empty: an ordinary run |
watchEvents | array of added / changed / removed | Watch runs: what to report; default added and changed. added is a product the watch has not reported before (new to the scope, back in it, or left over from an earlier run) |
minMovePct | number, 0 to 1000 | Watch runs: ignore price moves smaller than this percentage; default 0 |
specialBuysDrops | array of dates, YYYY-MM-DD | Special Buys mode: which drops to read, as dates Aldi's Special Buys page lists; up to 20. Empty (the default) reads every drop dated today or later (Sydney date). A date Aldi's Special Buys page does not list is skipped and named in RUN_SUMMARY under perRetailer.aldi_au.specialBuys |
Reference location. Prices are online prices at a fixed store, recorded in storeId on every row (Aldi G452). There is no store-selection input in v0.1. Prices in other stores, regions and formats (for example convenience or remote stores) may differ; these are not national or average prices. Prices exclude loyalty-card prices, delivery fees and in-store markdowns.
Robots.txt and website terms
Special Buys mode reads only Aldi's /special-buys pages. The Actor does not log in, and it does not read robots.txt at run time. robots.txt is not permission and it is not a site's terms. As read on 20 Oct 2026, Aldi Australia's website terms restrict automated access. We make no claim that any retailer permits this use. This is not legal advice. You are responsible for your own use of the data under those terms.
Repeated category or product URLs in one run are fetched once (counted under perRetailer.<retailer>.duplicateUrls). A category or search listing is read up to 50 pages; if the retailer has more, the listing is named under perRetailer.<retailer>.truncatedListings, so you can split it into smaller categories.
Output field reference
One row per product per retailer, same shape for every retailer.
| Field | Type | Notes |
|---|---|---|
retailer | string | coles / woolworths / aldi_au |
retailerProductId | string | The retailer's own id (Coles product id, Woolworths Stockcode, Aldi SKU) |
ean | array of strings | Check-digit-validated GTIN-13 strings; empty where the retailer exposes none (Aldi), and on Coles search and category rows unless colesProductDetails is on |
matchKey | string | Normalised brand + name + pack size. The join key when ean is empty, and the recommended way to match the same product across retailers |
name | string | Product name as shown on site |
brand | string or null | Own-label rows carry the retailer's name |
packSize | string or null | e.g. 2L, 1L |
price | number | AUD (Australian dollars), current shelf price, two decimals |
wasPrice | number or null | AUD, the previous price when a reduction is shown |
unitPrice | object or null | { "value": 2.98, "measure": "l" }: value is AUD per measure, where measure is the quantity the shop prices by (for example l, kg, 100g, each; as the shop publishes it) |
loyaltyPrice | number or null | Always null for Coles and Woolworths in v0.1 (no public loyalty price). A loyalty price is kept apart from wasPrice and would never set isMarkedDown |
promotionText | string or null | e.g. Pick any 2 for $5, 25% Off, 1/2 Price; on Aldi Special Buys rows, the on-sale line, e.g. On Sale Wed 07 Oct or While Stocks Last |
promotionEndsAt | date or null | Always null in v0.1: none of the three retailers publishes an end date in the data the Actor reads |
inStock | boolean or null | null where the retailer does not report stock online |
categoryPath | array of strings | e.g. ["Dairy, Eggs & Fridge", "Milk"] |
url | string | Product page |
imageUrl | string or null | Largest image available: a link to the retailer's own image. Images are the retailers' content, not ours: check the retailer's terms before using them |
rating | object or null | { "value": 4.6, "count": 212 }; always null for Coles in v0.1 |
currency | string | AUD |
market | string | au |
storeId | string or null | Aldi: G452 (as shown to a visitor with no store selected). Coles and Woolworths are not available at the moment |
onSaleDate | date or null | YYYY-MM-DD, the date the product goes (or went) on sale where Aldi gives one: on Special Buys rows, the drop date; a few other Aldi rows carry one too. null otherwise, and always null for Coles and Woolworths |
scrapedAt | string | ISO 8601, UTC (the time the row was read) |
isMarkedDown | boolean | true when the page shows a higher reference price (wasPrice) than price, and price is above zero; false otherwise. It describes how the shop presents the price. It is not a finding on whether the saving is real or whether the reference price was charged |
markdownAmount | number or null | AUD, the displayed reference price (wasPrice) minus price; null unless the row is marked down. Arithmetic on two fields of this row only |
markdownPercent | number or null | The markdown as a percentage of wasPrice (0 to 100, one decimal); null unless the row is marked down. It can show 0.0 for a very small markdown while isMarkedDown is true |
watchEvent | string | Watch runs only: baseline, added or changed. Absent on ordinary runs |
oldPrice | number or null | Watch runs only: the last reported price; null for baseline and added rows |
oldWasPrice | number or null | Watch runs only: the last reported was-price; null for baseline and added rows |
movePct | number or null | Watch runs only: the move from oldPrice to price, signed percent, two decimals; null for baseline and added rows |
Run summary and errors
Every run saves a RUN_SUMMARY record in its key-value store (open it from the run's Storage tab). Problems are reported there, not as rows: the dataset holds only products, and a blocked or failed shop adds no error row. Read the summary to see why a shop returned few or no rows.
| Field | What it holds |
|---|---|
startedAt, finishedAt | Run start and end, ISO 8601 UTC |
mode, retailers, maxItems | The mode, the shops and the row cap the run used |
fullRange | Present only as true, on a run that used fullRange |
chargeLimitReached | true if your maximum-charge setting stopped the run before it finished |
status | Present only as refused: the run asked only for shops that it could not read (Coles or Woolworths, or a shop that is paused). Nothing was requested and no products were charged; only the start fee applies |
unrecognisedUrls | Input URLs the Actor did not recognise as one of the three shops |
datasetName | The name given to the run's dataset, or null |
resumedRows | Rows an earlier container of the same run had already stored (after a platform migration); 0 normally |
totals | rawSeen, pushed, duplicates, normaliseFailures, requests, requestFailures, summed over the shops |
perRetailer.<shop> | status (ok, degraded, failed or skipped), reason, rawSeen, pushed, duplicates, normaliseFailures, unpriced, requests, requestFailures, blocked, itemFailures, circuitOpen, egress and egressRows (requests and rows per route) |
perRetailer.<shop> when set | storeId, refusedUrls, warnings, duplicateUrls, truncatedListings, and for Aldi Special Buys specialBuys (the drop dates read and skipped) |
status skipped means the shop was not read at all (for example, Coles or Woolworths, or a shop that is paused, with reason paused by the operator): nothing was requested or charged for it. status failed means that shop stopped (for example a block or a limit); degraded means half or more of what it listed could not be turned into rows, so the site may have changed. A shop that stops leaves the others running, and the run itself still finishes as succeeded, unless every shop is blocked or fails and nothing is returned: then the run fails and no rows are charged (the start fee still applies).
Pricing
Pay per event; platform usage is included in that price, so this is everything you pay:
- $0.005 start fee per run at the default 512 MB of memory (Apify charges it per GB, so a run given 2 GB pays it twice)
- $1.50 per 1,000 products returned ($0.0015 each) on the Free plan. Per product: Bronze $0.00135, Silver $0.0012, Gold, Platinum and Diamond $0.0009
Worked example. A run searching 5 terms that returns 300 products costs 300 × $0.0015 + $0.005 = $0.455 on the Free plan.
Cap spend with Apify's maximum-charge setting on the run, and/or with the maxItems input.
What your free $5 buys. If your Free plan includes $5 of monthly platform credit, then at the prices above:
- The default run (up to 60 products) costs up to 60 × $0.0015 + $0.005 = $0.095, so $5 covers at least 52 of them.
- One larger run, with no other runs that month, can return up to (5 - 0.005) / 0.0015 = 3,330 products (set
maxItemsto match). - A weekly run of up to 60 products costs up to $0.095 a week, at most roughly $0.41 a month.
This Actor has no basket endpoint yet. If the pricing table on this page shows basket events (basket-line, basket-line-live), they are not in use: no run (search, category, product or Special Buys) charges them.
Recipes
Use the Apify platform's own features around this Actor. In every case, set maxItems, so a schedule cannot spend more than you planned.
-
Run on a schedule. In the Apify Console, open Schedules, create a schedule with a cron expression (for example
0 21 * * 0for weekly), and add this Actor with the input you want. A new schedule starts disabled, so enable it. Pick a time that suits you; shop prices can change during the day, so use the same time each week to compare like with like. -
Get the result sent somewhere. Add a webhook on the Actor for the event "run succeeded" (
ACTOR.RUN.SUCCEEDED). Apify calls your URL with a payload that hasuserId,createdAt,eventType,eventDataandresource; the run's dataset id isresource.defaultDatasetId, and your service can then read the rows. Add the "run failed" event (ACTOR.RUN.FAILED) as well so you hear about runs that stop. A run that returns no rows because Aldi Australia could not be read (blocked, or its pages changed) ends Failed, with the reason in its status message and only the start fee charged, so a webhook on a failed run (ACTOR.RUN.FAILED) catches it; a run with no match, or a product or category page that is no longer there, still ends Succeeded. -
Track price changes every week (watch). Run this once to set the baseline, then schedule the same input weekly (for example
0 21 * * 0). Keep the samewatchIdand the same search terms:{ "mode": "search", "retailers": ["aldi_au"], "queries": ["full cream milk"], "maxItems": 60, "watchId": "milk-weekly" }The first run returns up to 60 products as
baselinerows (up to $0.095 on the Free plan). Each later run returns onlyaddedandchangedproducts, so a quiet week costs the $0.005 start fee and a few rows (if the search holds no more than 60 products; a larger scope is returned 60 at a time asadded, each charged, see "Watch"). UseminMovePctto ignore small moves. To be told when a price changed, add the webhook above and read the rows withwatchEventchanged. -
Run weekly and diff. Keep each run's dataset. To see changes, match this week's rows to last week's by
retailerProductId(ormatchKey) and compareprice,wasPriceandpromotionText. Compare only rows with the samestoreId, and treat a product that is missing from one run as "not returned that time", not as "no longer sold". -
Keep the cost predictable. A weekly run of up to 60 products costs up to $0.095 on the Free plan (see Pricing). Searching more terms raises the product count, and the price with it.
Limitations
- Coles and Woolworths are not available at the moment; runs read Aldi Australia only (see "Coles and Woolworths").
- Aldi publishes no barcode for any product and no online stock; Aldi rows join on
matchKeyinstead ofean. - Store selection is not offered in v0.1; Aldi prices are as shown to a visitor with no store selected (service point
G452). Products not ranged or priced at the store this Actor uses are skipped rather than returned as $0 rows. - Special Buys mode reads the drops Aldi's Special Buys page lists at the time of the run, usually one to two weeks ahead; an earlier drop that page no longer lists cannot be read. Special Buys are sold while stocks last: rows have no end date and no stock level.
fullRangereads the 14 departments of Aldi's online range as we last checked them. A department Aldi has renamed usually returns no rows: the run summary counts it inperRetailer.aldi_au.itemFailureswith the reason, and the other departments are still read. The count of products in the range changes from week to week; the figures above are a recent count, not a promise of completeness.- Without a
watchId, each run reads the shelf as it is now. To get only what changed since your last run, use a watch (see "Watch: only what changed since the last run"); to compare runs yourself, match two runs byretailerProductIdormatchKeyandscrapedAt. - The Actor does not log in: no account, basket or order data.
- Prices can change during the day; treat
scrapedAtas the price's timestamp. - If a retailer's site blocks a run, that retailer's run stops for the rest of the run; the rows already returned stay.
FAQ
Does it include Coles or Woolworths? Not at the moment: runs read Aldi Australia only; see "Coles and Woolworths".
Does it include Aldi Australia prices?
Yes, in search, category and product mode, exactly as Aldi publishes them online, as shown to a visitor with no store selected (service point G452): no barcode, so join on matchKey instead of ean.
Can I get only the prices that changed?
Yes: add a watchId (see "Watch: only what changed since the last run"). The first run with that id returns the products it reads as baseline rows; each later run with the same id and the same input returns only added and changed products, with oldPrice and movePct. Aldi Australia only.
Does it include Aldi Special Buys?
Yes: Special Buys mode (mode: "specialBuys") returns the products of the Special Buys drops Aldi lists, by default every drop dated today or later, with each drop's date in onSaleDate.
Why do Aldi rows have no EAN?
Aldi does not publish a barcode anywhere in its listing API, product API or product pages. Aldi rows carry an empty ean array and a matchKey (normalised name and pack size) instead.
Which store's prices does this use?
Aldi: as shown to a visitor with no store selected (service point G452). It is not user-selectable in v0.1.
How do I limit what I spend?
Set Apify's maximum-charge cap on the run, and/or set maxItems to cap the number of rows returned.
How fresh is the data?
Every row is read during the run and carries scrapedAt. Prices can move during the day, so treat each row as a snapshot.
Does this log in to a retailer account? No. The Actor does not log in and uses no retailer account.
How reliable is this? If a retailer's site blocks a run, that retailer stops for the rest of the run and the rows already returned stay, and the run summary says which retailer stopped and why.
Ratings and reviews
Ratings and reviews on the Store page help other buyers judge whether this Actor fits their use, whatever your experience.
Changelog
See the Changelog tab on this Actor's page for version history.
About Yappman Data
From Yappman Data, a trading name of Abley-Yapp Consulting Limited. Contact: info@yappman.com.