Aldi Australia Price Scraper & Tracker: Special Buys avatar

Aldi Australia Price Scraper & Tracker: Special Buys

Pricing

from $0.90 / 1,000 products

Go to Apify Store
Aldi Australia Price Scraper & Tracker: Special Buys

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

Russell Yapp

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

3

Monthly active users

a day ago

Last modified

Categories

Features

Limited permissions

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.

ModeUse it toInputExample question
searchFind products by keywordqueries, retailers"What does full cream milk cost at Aldi?"
categoryRead the products on a shop's category pagecategoryUrls"What do the products in this Aldi dairy category cost?" (up to maxItems rows)
productRead named product pagesproductUrls"What is the unit price of this Aldi product?"
specialBuysRead Aldi's dated Special Buys dropsspecialBuysDrops (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

RetailerModesBarcode (EAN) coveragePromotion fieldsStock
Aldisearch, category, product, Special BuysNone — Aldi publishes no barcode in its listing API, product API or product pages, so rows carry an empty ean and join on matchKeywasPrice 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 skipped in the run summary, and no rows are charged for it.
  • A run that names only Coles and/or Woolworths ends as succeeded with status refused in 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" }
  • watchEvents chooses what is reported (default added and changed). With removed, products that left the scope are listed by name in the run summary (watch.removedNames), free, never as rows.
  • minMovePct ignores smaller price moves; small moves add up and are reported once they reach it.
  • added means 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 as added, 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 maxItems or your run's spend limit are returned by the next run. This includes the first run: if the scope holds more products than maxItems (or than your spend limit pays for), the rest are returned by later runs as added, maxItems at a time, each charged. For example, a 2,600-product category with maxItems 60 is charged in full over about 43 runs. If added is not in watchEvents, they are never returned.
  • A second run on the same watchId while 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 same watchId is 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 new watchId.

When to use this Actor

  • You want current shelf prices for named products or categories at Aldi Australia in one schema, with unitPrice, wasPrice and promotionText where 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: loyaltyPrice is always null.
  • You need stock levels for Aldi: Aldi reports none online (inStock is null).
  • 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

FieldTypeNotes
retailersarray 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
modesearch / category / product / specialBuysOne mode per run; default search. specialBuys returns the products of Aldi's Special Buys drops
queriesarray of stringsSearch mode; each query runs against every selected retailer; default ["milk"]
categoryUrlsarray of URLsCategory mode; the retailer is inferred from each URL's hostname. Leave empty unless you were given a URL
fullRangebooleanCategory 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
productUrlsarray of URLsProduct mode; retailer inferred from each URL's hostname. Leave empty unless you were given a URL
maxItemsintegerHard cap on rows pushed across all retailers, 1 or more; default 60
excludeMarketplacebooleanWoolworths only; Woolworths is not available at the moment. Leaves out Everyday Market (third-party marketplace) products from search and category results; default off
colesProductDetailsbooleanColes 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
watchIdstringTurns 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
watchEventsarray of added / changed / removedWatch 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)
minMovePctnumber, 0 to 1000Watch runs: ignore price moves smaller than this percentage; default 0
specialBuysDropsarray of dates, YYYY-MM-DDSpecial 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.

FieldTypeNotes
retailerstringcoles / woolworths / aldi_au
retailerProductIdstringThe retailer's own id (Coles product id, Woolworths Stockcode, Aldi SKU)
eanarray of stringsCheck-digit-validated GTIN-13 strings; empty where the retailer exposes none (Aldi), and on Coles search and category rows unless colesProductDetails is on
matchKeystringNormalised brand + name + pack size. The join key when ean is empty, and the recommended way to match the same product across retailers
namestringProduct name as shown on site
brandstring or nullOwn-label rows carry the retailer's name
packSizestring or nulle.g. 2L, 1L
pricenumberAUD (Australian dollars), current shelf price, two decimals
wasPricenumber or nullAUD, the previous price when a reduction is shown
unitPriceobject 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)
loyaltyPricenumber or nullAlways 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
promotionTextstring or nulle.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
promotionEndsAtdate or nullAlways null in v0.1: none of the three retailers publishes an end date in the data the Actor reads
inStockboolean or nullnull where the retailer does not report stock online
categoryPatharray of stringse.g. ["Dairy, Eggs & Fridge", "Milk"]
urlstringProduct page
imageUrlstring or nullLargest 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
ratingobject or null{ "value": 4.6, "count": 212 }; always null for Coles in v0.1
currencystringAUD
marketstringau
storeIdstring or nullAldi: G452 (as shown to a visitor with no store selected). Coles and Woolworths are not available at the moment
onSaleDatedate or nullYYYY-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
scrapedAtstringISO 8601, UTC (the time the row was read)
isMarkedDownbooleantrue 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
markdownAmountnumber or nullAUD, the displayed reference price (wasPrice) minus price; null unless the row is marked down. Arithmetic on two fields of this row only
markdownPercentnumber or nullThe 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
watchEventstringWatch runs only: baseline, added or changed. Absent on ordinary runs
oldPricenumber or nullWatch runs only: the last reported price; null for baseline and added rows
oldWasPricenumber or nullWatch runs only: the last reported was-price; null for baseline and added rows
movePctnumber or nullWatch 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.

FieldWhat it holds
startedAt, finishedAtRun start and end, ISO 8601 UTC
mode, retailers, maxItemsThe mode, the shops and the row cap the run used
fullRangePresent only as true, on a run that used fullRange
chargeLimitReachedtrue if your maximum-charge setting stopped the run before it finished
statusPresent 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
unrecognisedUrlsInput URLs the Actor did not recognise as one of the three shops
datasetNameThe name given to the run's dataset, or null
resumedRowsRows an earlier container of the same run had already stored (after a platform migration); 0 normally
totalsrawSeen, 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 setstoreId, 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 maxItems to 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 * * 0 for 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 has userId, createdAt, eventType, eventData and resource; the run's dataset id is resource.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 same watchId and 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 baseline rows (up to $0.095 on the Free plan). Each later run returns only added and changed products, 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 as added, each charged, see "Watch"). Use minMovePct to ignore small moves. To be told when a price changed, add the webhook above and read the rows with watchEvent changed.

  • Run weekly and diff. Keep each run's dataset. To see changes, match this week's rows to last week's by retailerProductId (or matchKey) and compare price, wasPrice and promotionText. Compare only rows with the same storeId, 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 matchKey instead of ean.
  • 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.
  • fullRange reads 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 in perRetailer.aldi_au.itemFailures with 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 by retailerProductId or matchKey and scrapedAt.
  • The Actor does not log in: no account, basket or order data.
  • Prices can change during the day; treat scrapedAt as 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.