ALDI Australia Scraper — $0.32/1K · Products & Prices avatar

ALDI Australia Scraper — $0.32/1K · Products & Prices

Pricing

from $0.32 / 1,000 product results

Go to Apify Store
ALDI Australia Scraper — $0.32/1K · Products & Prices

ALDI Australia Scraper — $0.32/1K · Products & Prices

Scrape ALDI Australia products, prices and Special Buys. Batch search, URL/SKU details, saved price history and change-only filters with AUD, percentage and unit-price movements. $0.32/1K rows + $0.004/start; platform usage extra.

Pricing

from $0.32 / 1,000 product results

Rating

0.0

(0)

Developer

Apivault Labs

Apivault Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

ALDI Australia Scraper — Products, Prices & Special Buys

ALDI Australia Scraper collects product prices, pack sizes, unit prices, images and Special Buys from aldi.com.au. Search by keyword, browse categories or supply product URLs and SKU IDs. Export JSON, CSV or Excel, call the API, or schedule your own price watch.

$0.32 per 1,000 delivered rows + $0.004 per start event on every plan. Apify platform usage is extra. The start event is charged per GB of memory, minimum one. An empty search has no result fee but still has the start fee. Category, calendar and filter-information rows also count as delivered rows. Each changed product produces one billable row even when several fields changed; the detailed change list and history are available in the run's key-value store.

{"operation":"search","query":"milk","maxResults":25}

Use one specific word when possible. ALDI determines search relevance; a multi-word search can match either word. maxResults is a global limit across the entire run, including overlapping inputs. Products with the same SKU are saved once.

What you can do

OperationInputsResult
searchquery or queriesLive product search, optional brand and price filters
categorycategoryUrls, categoryUrl or categoryIdPaginated products from an advertised category
itemproductUrls or productIdsExact product records with description and available label fields
categoriesNo product input neededCurrent category names, IDs and URLs
search_filtersOptional queryCurrent source facets, values and sorting capabilities
special_eventsNo date requiredAdvertised Special Buys dates and themes
specialseventDate, optional themeProducts from the selected advertised event

No ALDI login, browser or third-party API key is required. Requests read public web data. The Actor stops and reports blocked or incomplete sources rather than inventing results.

Examples

Batch search with brand, price and sorting

{"operation":"search","queries":["milk","yogurt"],"brand":"FARMDALE","maxPrice":5,"sort":"price_asc","maxResults":30}

Source sorting supports relevance, name_asc, name_desc, price_asc and price_desc. Ordering applies within each input; results from several inputs follow their input order. page can start at a later source page for exploration, but monitoring requires page 1.

Collect a category

{"operation":"category","categoryUrls":["https://www.aldi.com.au/products/pantry/jams-spreads/k/1111111170"],"maxResults":100}

The summary distinguishes a complete category from a capped or partial collection. Set a sufficient limit before using category snapshots for monitoring; the maximum supported global limit is 5,000 rows, not an unlimited-catalogue promise.

Exact product details

{"operation":"item","productIds":["000000000000261610"],"maxResults":5}

Keep product IDs as strings with their leading zeros. details=true adds individual product-page reads to search/category/special results. Product records include description, images, labelImages and source-provided ingredients, allergens, origin and storage instructions where available. Missing information stays null. Label images are links, not OCR or extracted nutrition tables.

Discover Special Buys

{"operation":"special_events","maxResults":100}

Copy an advertised eventDate and optionally theme from the returned rows into the specials operation. Dates rotate; old examples are not a promise that a past event remains available. specialsOnly=true keeps records with an advertised availability label or sale date; it does not mean a verified discount from a previous price.

Monitor a category and keep your observations

{"operation":"category","categoryUrls":["https://www.aldi.com.au/products/pantry/jams-spreads/k/1111111170"],"maxResults":100,"monitor":true,"historyKey":"my-jam-watch","changesOnly":true,"deliverBaseline":true,"historyLimit":30}

Use the same input and private historyKey on later runs, and schedule the runs sequentially. The first complete run creates your baseline. Subsequent runs can return only products whose price, pack size, unit-price label, availability label or advertised sale date changed, new listings, and products no longer seen in the completely read scope. All changes for one product share one delivered row with changedFields, before and after.

deliverBaseline=false creates the first baseline without product rows. Unchanged later watches can return zero rows. Both still incur the start event and platform usage. HISTORY contains up to historyLimit successful observations (1–90); history starts with your first run, not past store prices. The watch retains the latest complete product snapshot and a bounded observation history in your Apify account.

Track meaningful price movements

{"operation":"category","categoryUrls":["https://www.aldi.com.au/products/pantry/jams-spreads/k/1111111170"],"maxResults":100,"monitor":true,"historyKey":"jam-price-drops","changesOnly":true,"deliverBaseline":false,"changeFilter":"price_drop","minChangePercent":5}

Changed products include previousPrice, signed priceChange in AUD, priceChangePercent, priceDirection, unitPriceChange, unitPriceChangePercent, unitPriceChangeUnit and packSizeChanged. Percentages compare with the previous complete observation: (current-previous)/previous*100. They are observed movements, not ALDI advertised discounts. Percentages are null when the previous price is zero. Unit-price comparisons require the same published currency and normalized unit; incompatible or missing units stay null. A changed pack label is not proof of shrinkflation.

With changesOnly=true, choose changeFilter: all, price_drop, price_rise, unit_price_increase or pack_size_change. Optional minChangePercent keeps movements whose absolute percentage meets the threshold (inclusive); it uses unit price for unit_price_increase and product price otherwise. With a positive threshold, missing/zero-denominator percentages are excluded. New/missing listings pass only all with threshold zero. The initial baseline follows deliverBaseline independently of these filters; use false for silent setup.

Filtered-out movements are not Dataset rows and incur no result events. A complete observation still advances the baseline, so small movements do not accumulate across runs into a later threshold alert. Switching change filters does not reset the watch's collection scope. CHANGES retains all observed events, and SUMMARY reports observedChanges, matchedChanges and suppressedChanges; these diagnostic records have no result events. Start fees and platform usage still apply to empty checks. This prepares filtered output for your own integrations; the Actor does not send email or messages.

An incomplete, blocked, capped or undelivered snapshot never advances the baseline or creates disappearance events. Change-only watches fail clearly when the source scope is incomplete. Change the limit or narrow the scope before trying again. Changing inputs, filters or sort under an existing key is refused: use a new key. Overlapping runs with the same watch key are refused using an exclusive server-side lease; schedule each watch sequentially. A crash after output delivery but before state persistence may cause changes to be delivered again on the next run; deduplicate using SKU, observed time and change fields if needed.

Output

The default Dataset contains useful product, category, event or filter rows. Product fields include:

GroupFields
Identitysku, name, brand, url, recordType, country
Pricingprice, currency, priceDisplay, packSize, unitPriceDisplay, unitPriceNormalized
Product contextcategories, categoryIds, imageUrl, images, description, detailStatus
Availability contextavailabilityLabel, specialBuyDate, onSpecial, ageRestricted, storeStock, priceScope
Audit trailsourceUrl, collectedAt; monitoring adds changeType, changedFields, before, after

unitPriceNormalized is calculated from ALDI's published comparison label and converts supported weights to AUD/kg and volumes to AUD/litre. It is not an inferred unit price when the source label is missing.

The run also exposes SUMMARY (rows, completeness, per-input coverage, limits, watch status), ERRORS, CHANGES, HISTORY for a successful watch, and OUTPUT links. Diagnostics are stored outside the billable Dataset. Partial useful results can be delivered and charged; check SUMMARY.complete before treating them as a complete category.

API and AI agents

Use Actor ID faehi28wKzR4XDhPJ. Supply the same JSON input through Apify Console, the API, Python/JavaScript clients, integrations or Apify MCP. Read the default Dataset and SUMMARY after the run. JSON, CSV and Excel are standard Apify exports; Google Sheets or other destinations require your own integration configuration.

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("faehi28wKzR4XDhPJ").call(
run_input={"operation": "search", "query": "coffee", "maxResults": 10}
)
rows = client.dataset(run["defaultDatasetId"]).list_items().items
summary = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("SUMMARY")

Scope and limitations

  • Australia only, aldi.com.au. This independent Actor is not affiliated with or endorsed by ALDI.
  • Prices are public web observations without a selected store. Local prices and ranges can differ. storeStock=null is intentional: a public listing or Schema.org InStock is not proof of shelf availability at a store.
  • missing_from_complete_scope means the product was not seen in that successfully read input scope. It does not prove out-of-stock or discontinuation.
  • Exact price history before your first watch, member prices, checkout, store-specific stock, OCR nutrition and automatic cross-chain identity matching are not provided.
  • Search and catalogue contents can change during collection. Changed totals, repeated pages, incomplete pages and denied requests are reported; a stable source total is a coverage check, not proof of nationwide inventory.
  • No unsupported availability or discount promises: Special Buys labels can refer to future dates or limited stock rather than reduced prices.

Keep requests bounded and use the data in accordance with applicable source terms and your requirements. Start with a small result limit and inspect the summary before scheduling recurring collection.