Aldi APIaldi.com.au ↗
Search the Aldi Australia product catalogue via API. Returns product name, brand, price, was-price, size, image URL, and availability for any keyword.
What is the Aldi API?
The Aldi Australia API exposes one endpoint — search_products — that queries the aldi.com.au grocery catalogue and returns up to 7 structured fields per product, including current price, discounted was-price, package size, and in-store availability. It supports keyword-based searches across all product categories stocked at Aldi Australia, with paginated results and a total count for building complete result sets.
curl -X GET 'https://api.parse.bot/scraper/a4061be8-d852-4e46-9ee1-064cedbd37d8/search_products?query=milk' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace aldi-com-au-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Aldi Australia product search — bounded, re-runnable."""
from parse_apis.aldi_com_au_api import Aldi, InputFormatInvalid
client = Aldi()
# Search for chocolate products, cap total items fetched at 5.
for product in client.products.search(query="chocolate", limit=5):
print(product.name, product.brand, product.price)
# Drill-down: find the first milk product and inspect its details.
milk_hit = client.products.search(query="milk", limit=1).first()
if milk_hit is not None:
print(f"{milk_hit.name} ({milk_hit.brand}) — {milk_hit.price}")
print(f" Size: {milk_hit.size or 'N/A'}")
print(f" Available: {milk_hit.available}")
print(f" Image: {milk_hit.image_url}")
if milk_hit.was_price is not None:
print(f" Was: {milk_hit.was_price}")
# Demonstrate error handling for malformed input.
try:
client.products.search(query="", limit=1).first()
except InputFormatInvalid as e:
print(f"Invalid input: {e.message}")
print("exercised: products.search")
Search Aldi Australia products by keyword. Returns paginated results sorted by relevance. Each result includes product name, brand, current price, was price (if discounted), package size, image URL, and in-store availability. The upstream API accepts page sizes of 12, 16, 24, 30, 32, 48, or 60; the requested limit is rounded up to the nearest valid value.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). Omitting returns the first page. |
| limit | integer | Maximum number of products per page. Rounded up to the nearest accepted value from: 12, 16, 24, 30, 32, 48, 60. |
| queryrequired | string | Search keyword (e.g. 'milk', 'chocolate', 'bread'). |
{
"type": "object",
"fields": {
"page": "current page number",
"limit": "page size used for this request",
"products": "array of product objects with name, brand, price, was_price, size, image_url, and available fields",
"total_count": "total number of matching products across all pages"
},
"sample": {
"data": {
"page": 1,
"limit": 30,
"products": [
{
"name": "Light Milk 2L",
"size": "2 L",
"brand": "FARMDALE",
"price": "$3.55",
"available": true,
"image_url": "https://dm.apac.cms.aldi.cx/is/image/aldiprodapac/product/jpg/scaleWidth/600/93645b60-eb11-4046-b28e-2b441f8585a4/farmdale-light-milk-2l",
"was_price": null
}
],
"total_count": 83
},
"status": "success"
}
}About the Aldi API
What the API Returns
The search_products endpoint accepts a query string and returns an array of product objects. Each object includes name, brand, price, was_price (populated only when the product is on promotion), size, image_url, and available. The total_count field tells you how many products matched across all pages, which lets you calculate how many pages to fetch.
Pagination and Page Sizes
Results are paginated using a 1-based page parameter. The limit parameter controls how many products appear per page; accepted values are 12, 16, 24, 30, 32, 48, and 60. If you pass a value that doesn't match one of these, it is rounded up to the nearest accepted value. Omitting page returns the first page. Combining total_count with your chosen limit gives you the exact number of pages to iterate.
Discount Detection
The was_price field is the original price before a markdown. When a product is not discounted, this field is absent or null. Comparing price to was_price lets you identify promotional items programmatically — useful for price-tracking or savings-alert applications.
Coverage
The API covers grocery products listed in the Aldi Australia online catalogue, including Aldi's own house brands and named brands where they appear. Products available only in Special Buys (Aldi's rotating non-grocery range) are not guaranteed to appear, as their catalogue presence is time-limited.
The Aldi API is a managed, monitored endpoint for aldi.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when aldi.com.au changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official aldi.com.au API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price changes on specific grocery items by comparing
priceandwas_priceover time - Build a promotional deal alert that surfaces products with a populated
was_pricefield - Compare Aldi Australia pricing against other supermarkets using
name,brand, andsize - Check
availablestatus for a keyword before recommending a product in a shopping app - Populate a grocery list assistant with live product data including
image_urlfor display - Analyse which product categories Aldi Australia carries for a given keyword query
- Aggregate
total_countresults across multiple keywords to measure catalogue breadth
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Aldi Australia have an official developer API?+
What does the `was_price` field actually represent?+
was_price is absent or null. You can filter for discounted items by checking whether was_price is present and differs from price.Does the API cover Aldi's Special Buys range?+
Can I filter results by product category or brand rather than keyword?+
query string — there is no dedicated category or brand filter parameter. You can fork this API on Parse and revise it to add category-based or brand-filtered endpoints.