E-commerce & Marketplaces

How do you get Aldi Australia prices, Special Buys and store stock as JSON?

Call ReefAPI's aldi-au search action and read products with id, title, brand, price_aud, unit_price_display, pack_size and categories back as JSON; use deals for Aldi's own ranges, promotions plus search for Special Buys, and availability for store stock. Prices are national, so no store is needed. The two things to know before you build: a product record does not say which deal range it belongs to, and store stock exists only for Special Buys.

Aldi Australia grocery shelf prices, Special Buys and product labels engineLive JSON5 steps1,000 free credits

This guide demonstrates the real Aldi Australia grocery shelf prices, Special Buys and product labels API engine with a captured response from . The example is only published because the engine passed the SEO snapshot gate.

Use case

Australian grocery price tracking, basket comparison, Special Buys monitoring and retail analytics.

Step by step

Call the live endpoint

  1. 1

    Sweep with price_asc, not relevance

    An empty search with sort price_asc and limit 60 walks the whole online range in a stable order. Relevance order changes between calls.

  2. 2

    Read deal membership from deals

    Call deals once per range. Do not infer a deal from a product record; Aldi does not put the range there.

  3. 3

    Use promotions for Special Buys

    Read the dates and themes, then search with promotionKey. Pass theme keys exactly as returned, trailing spaces included.

  4. 4

    Check stock only for Special Buys

    Pass a suburb name, a store_id or coordinates. A bare postcode returns no stores, and grocery lines answer MARKET_UNAVAILABLE.

  5. 5

    Key on the retailer SKU

    id is an 18-digit retailer SKU with leading zeros. Keep it as a string; it is not a barcode.

Code

Copy the request

These snippets use the captured request params for aldi-au/v1/search.

curl -X POST https://api.reefapi.com/aldi-au/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"milk","limit":12}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.aldi-au.search with {"query":"milk","limit":12}.
Real response

Captured output from ReefAPI

Captured on UTC. The response below is the committed snapshot, including the API envelope and metadata.

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/aldi-au/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "milk",
    "limit": 12
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "aldi-au",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1081,
    "record_count": 12,
    "bytes": 32231,
    "cache_hit": false,
    "warnings": [
      "Unknown parameters ignored: include_pii"
    ],
    "upstream_requests": 1,
    "charged_credits": 3,
    "version": "1.0.0",
    "request_id": "4ccecfc625b345fd",
    "queue_ms": 2.2,
    "fetched_at": "2026-10-13T10:56:26.518Z"
  },
  "data": {
    "products": [
      {
        "id": "000000000538441002",
        "title": "Milk Mouse - Milk Chocolate 168g",
        "brand": "CHOCEUR",
        "url": "https://www.aldi.com.au/product/choceur-milk-mouse-milk-chocolate-168g-000000000538441002",
        "price_aud": 3.99,
        "price_display": "$3.99",
        "currency": "AUD",
        "regular_price_aud": 3.99,
        "price_basis": "published_pack",
        "price_mismatch": false,
        "unit_price_aud": 2.38,
        "unit_price_display": "$2.38 per 100 g",
        "pack_size": "168 g",
        "bottle_deposit_aud": null,
        "age_restriction": null,
        "alcohol": null,
        "is_special_buy": false,
        "promotion": null,
        "categories": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "urlSlugText": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "urlSlugText": "[trimmed-depth]"
          }
        ],
        "images": [
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          }
        ],
        "weight_type": "0",
        "availability": {
          "store_stock": "unknown",
          "source_not_for_sale": true,
          "source_discontinued": false
        }
      },
      {
        "id": "000000000000545135",
        "title": "Milk Frother",
        "brand": "EXPRESSI",
        "url": "https://www.aldi.com.au/product/expressi-milk-frother-000000000000545135",
        "price_aud": 31.99,
        "price_display": "$31.99",
        "currency": "AUD",
        "regular_price_aud": 31.99,
        "price_basis": "published_pack",
        "price_mismatch": false,
        "unit_price_aud": null,
        "unit_price_display": null,
        "pack_size": null,
        "bottle_deposit_aud": null,
        "age_restriction": null,
        "alcohol": null,
        "is_special_buy": false,
        "promotion": null,
        "categories": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "urlSlugText": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "urlSlugText": "[trimmed-depth]"
          }
        ],
        "images": [
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          }
        ],
        "weight_type": "0",
        "availability": {
          "store_stock": "unknown",
          "source_not_for_sale": true,
          "source_discontinued": false
        }
      },
      {
        "id": "000000000000398691",
        "title": "Light Milk 2L",
        "brand": "FARMDALE",
        "url": "https://www.aldi.com.au/product/farmdale-light-milk-2l-000000000000398691",
        "price_aud": 3.39,
        "price_display": "$3.39",
        "currency": "AUD",
        "regular_price_aud": 3.39,
        "price_basis": "published_pack",
        "price_mismatch": false,
        "unit_price_aud": 1.7,
        "unit_price_display": "$1.70 per 1 L",
        "pack_size": "2 l",
        "bottle_deposit_aud": null,
        "age_restriction": null,
        "alcohol": null,
        "is_special_buy": false,
        "promotion": null,
        "categories": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "urlSlugText": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "urlSlugText": "[trimmed-depth]"
          }
        ],
        "images": [
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          },
          {
            "url": "[trimmed-depth]",
            "asset_type": "[trimmed-depth]",
            "mime_type": "[trimmed-depth]",
            "alt": "[trimmed-depth]"
          }
        ],
        "weight_type": "0",
        "availability": {
          "store_stock": "unknown",
          "source_not_for_sale": true,
          "source_discontinued": false
        }
      }
    ],
    "total": 89,
    "offset": 0,
    "limit": 12,
    "page": 1,
    "last_page": 8,
    "has_more": true,
    "facets": [
      {
        "name": "category-tree",
        "localizedName": "Category",
        "docCount": 91,
        "activeValue": [],
        "config": {
          "parameterName": "categoryTree",
          "type": "value",
          "isMultiValue": true,
          "componentName": "category-tree",
          "component": {
            "name": "[trimmed-depth]",
            "valueActive": "[trimmed-depth]",
            "valueInactive": "[trimmed-depth]"
          }
        },
        "stats": null,
        "values": [
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          },
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          },
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          }
        ]
      },
      {
        "name": "theme",
        "localizedName": "Theme",
        "docCount": 91,
        "activeValue": [],
        "config": {
          "parameterName": "theme",
          "type": "value",
          "isMultiValue": true,
          "componentName": "multi-select",
          "component": {
            "name": "[trimmed-depth]",
            "valueActive": "[trimmed-depth]",
            "valueInactive": "[trimmed-depth]"
          }
        },
        "stats": null,
        "values": [
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          },
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          },
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          }
        ]
      },
      {
        "name": "brand-name",
        "localizedName": "Brand Name",
        "docCount": 91,
        "activeValue": [],
        "config": {
          "parameterName": "brandName",
          "type": "value",
          "isMultiValue": true,
          "componentName": "multi-select",
          "component": {
            "name": "[trimmed-depth]",
            "valueActive": "[trimmed-depth]",
            "valueInactive": "[trimmed-depth]"
          }
        },
        "stats": null,
        "values": [
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          },
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          },
          {
            "key": "[trimmed-depth]",
            "docCount": "[trimmed-depth]",
            "label": "[trimmed-depth]",
            "isSelected": "[trimmed-depth]",
            "thumbnail": "[trimmed-depth]",
            "children": "[trimmed-depth]"
          }
        ]
      }
    ],
    "spelling_suggestion": null,
    "keyword_redirect": null,
    "coverage": "Public online-listed assortment with national shelf prices; Special Buys carry an on-sale date."
  }
}
Manual way

Why this is hard manually

The deal range is not on the product. Aldi files Lower Prices, Super Savers and Limited Time Only as category ranges, and a product page lists only its merchandise path, Meat & Seafood then Pork. Scrape the product and every row looks like it is on no deal at all, which is a false negative on every discounted item.

Relevance order moves under you. Two identical relevance searches a moment apart shared none of their first-page rows, so a scraper that pages through relevance results to build a complete list misses some products and counts others twice, with nothing on the page to say so.

Special Buys are dated campaigns rather than discounts. Each one has an on-sale date and themes, and some theme keys carry a trailing space: send the trimmed key and the theme returns nothing, send it exactly as published and it returns its products.

Stock is the part most likely to be misread. The store checker does not accept a bare postcode, grocery lines carry no stock data at all, and a Special Buy whose on-sale date has not come yet lists every store with no indicator. None of those is a sold-out product.

Some things Aldi simply does not publish: no barcode or GTIN on any product, no struck-through was-price, no member price. Label fields such as ingredients are often empty at the source, and some carry an "N/A" placeholder that is text, not data.

ReefAPI way

Why ReefAPI solves it

Six actions: search, deals, promotions, product/detail, categories and availability. search takes a keyword, a category, a Special Buys date or an aldi.com.au listing URL; with no input at all it returns the whole online range, which with sort price_asc and the largest page size is a complete, stable sweep.

Deal membership is stated where it is true. deals resolves Lower Prices, Super Savers or Limited Time Only by name from Aldi's live category tree and lists those products, with the range named on the response. A plain search row makes no deal claim either way, so an empty field is never read as "not on special".

Prices are national, and that was measured rather than assumed: the full bread result set priced identically with no store and with two different stores. price_aud is AUD, price_display is Aldi's own string, and unit_price_display is checked against pack price over pack size, 10 of 10 in our audit. 14 of 14 sampled products matched their own product page.

promotions returns each current and upcoming Special Buys date with its themes and their exact keys; pass the date to search as promotionKey and a theme key unchanged. Every Special Buy row is flagged is_special_buy.

availability gives nearby stores for one Special Buy by suburb, store or coordinates, with stock_status in Aldi's own order, available, limited, selling_out, low_or_no_stock, plus unknown when Aldi shows no indicator. site_label carries the words Aldi's own stock checker shows. A grocery line returns MARKET_UNAVAILABLE, a stated answer rather than an empty list. There are no quantities.

Nothing is invented to fill a gap. barcode_status says not_published_by_source, "N/A" placeholders are dropped, and a label field Aldi left empty is absent rather than an empty string. No Aldi account or login is involved anywhere.

FAQ

Questions developers ask

Do I need an Aldi account?

No. Everything the engine reads is public and logged-out. You send a ReefAPI key; there is no Aldi login or token.

Are prices different by store or state?

No. We priced the same full result set with no store and with two different stores and got identical prices, so the engine offers no store parameter for prices. Stock is the only per-store value.

How do I know if a product is on a deal?

List the range with deals. Aldi records a product's merchandise category but not its deal range, so a search row makes no deal claim. The deals response names the range it listed.

Can I get the was-price?

No. Aldi Australia expresses deals as ranges rather than markdowns and does not publish a struck-through price. price_aud and regular_price_aud are what Aldi shows.

Is there a barcode?

No. Aldi publishes only its own 18-digit SKU. barcode_status says not_published_by_source rather than leaving the field ambiguous.

What does the stock status mean?

It is Aldi's own indicator, store by store, in Aldi's order: available, limited, selling_out, low_or_no_stock. low_or_no_stock can mean none at all. unknown means Aldi shows no indicator, which is what every store shows before a Special Buy's on-sale date. There are no quantities.

Why does availability fail for milk?

Grocery lines carry no stock data at Aldi, so the engine returns MARKET_UNAVAILABLE instead of a list of stores with nothing in it. Stock exists for Special Buys.

How do I get every product?

Call search with no query, sort price_asc and limit 60, and page until has_more is false. Pass a listing URL from aldi.com.au if you want exactly what one page of the site shows.