{
  "openapi": "3.0.1",
  "info": {
    "title": "ALDI Australia Scraper - Prices, Special Buys & Stores",
    "description": "Scrape ALDI Australia products by keyword, department, Special Buys date, promotion, link or SKU, or the whole catalogue: price, unit price, pack size, Special Buy date, brand, images. Per-store prices, stock, stores. UK + Ireland too. $0.72 per 1,000 products, no start fee.",
    "version": "0.1",
    "x-build-id": "5PGSuDKdilbVSnN8B"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~aldi-au-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-aldi-au-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/topapi~aldi-au-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-aldi-au-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/topapi~aldi-au-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-aldi-au-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Products to search for, one per line, e.g. \"milk\", \"coffee\", \"nappies\". ALDI matches each word on its own, so single words give the cleanest results.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "ALDI links",
            "type": "array",
            "description": "Any aldi.com.au (or aldi.co.uk / aldi.ie) link: a product page, a department (…/products/pantry/k/970000000), a search (…/results?q=cheese), a Special Buys page (…/special-buys/2026-11-04?theme=Liquor) or a brand page.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Departments",
            "type": "array",
            "description": "Department names, slugs or keys, e.g. \"Pantry\", \"dairy-eggs-fridge/cheese\", \"970000000\". Every product in the department is read (up to Max per search).",
            "items": {
              "type": "string"
            }
          },
          "productIds": {
            "title": "Product numbers (SKUs)",
            "type": "array",
            "description": "ALDI product numbers, with or without the leading zeros, e.g. \"545135\" or \"000000000538441002\" (the digits at the end of a product link).",
            "items": {
              "type": "string"
            }
          },
          "specialBuysDates": {
            "title": "Special Buys dates",
            "type": "array",
            "description": "Special Buys on-sale dates: \"latest\" (the drop on sale now), \"current\" (every drop on sale), \"upcoming\" (announced, not yet in store), \"all\", or a date like 2026-11-04.",
            "items": {
              "type": "string"
            }
          },
          "specialBuysThemes": {
            "title": "Special Buys themes",
            "type": "array",
            "description": "Only these Special Buys themes, e.g. \"Liquor\", \"Christmas Lighting\", \"Kids Toys and Books\". Works with the dates above (all dates when none are given).",
            "items": {
              "type": "string"
            }
          },
          "specialsGroups": {
            "title": "Promotions",
            "type": "array",
            "description": "Read ALDI's promotion collections. Australia: Lower Prices, Super Savers, Limited Time Only. UK: Price Drops. Ireland: Savers.",
            "items": {
              "type": "string",
              "enum": [
                "lower-prices",
                "super-savers",
                "limited-time-only",
                "price-drops",
                "savers"
              ],
              "enumTitles": [
                "Lower Prices (AU)",
                "Super Savers (AU)",
                "Limited Time Only (AU)",
                "Price Drops (UK)",
                "Savers (IE)"
              ]
            }
          },
          "allProducts": {
            "title": "Whole catalogue",
            "type": "boolean",
            "description": "Read every product ALDI lists online (about 3,300 in Australia, 4,200 in the UK, 3,400 in Ireland). Max per search does not apply; Max products in total does.",
            "default": false
          },
          "mode": {
            "title": "What a row is",
            "enum": [
              "products",
              "stores",
              "categories"
            ],
            "type": "string",
            "description": "Products (default), the ALDI store directory (one row per store; all stores, or those near your postcodes / store ids), or the department list and Special Buys dates saved to the key-value store (free).",
            "default": "products"
          },
          "country": {
            "title": "Country",
            "enum": [
              "AU",
              "UK",
              "IE"
            ],
            "type": "string",
            "description": "Which ALDI website to read. Empty = Australia, or the country of the links you give."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price_asc",
              "price_desc",
              "name_asc",
              "name_desc"
            ],
            "type": "string",
            "description": "Order of products within each search, department or Special Buys date.",
            "default": "relevance"
          },
          "storeIds": {
            "title": "Store ids",
            "type": "array",
            "description": "Prices and range for these stores, each as its own rows, e.g. \"G525\" (Darlinghurst NSW), \"G094\" (Perth). Run the Stores mode to list every id.",
            "items": {
              "type": "string"
            }
          },
          "postcodes": {
            "title": "Postcodes",
            "type": "array",
            "description": "The nearest ALDI store(s) to each postcode, e.g. \"2000\", \"6000\", \"3000\" (UK postcodes and Irish towns work too). Each store gets its own rows.",
            "items": {
              "type": "string"
            }
          },
          "storesPerPostcode": {
            "title": "Stores per postcode",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many of the nearest stores to use for each postcode. Empty = 1 for product prices, 10 in Stores mode."
          },
          "allStores": {
            "title": "Every store",
            "type": "boolean",
            "description": "Run every product source once per ALDI store (614 in Australia). Keep Max per search small: a 10-product search becomes 6,140 rows.",
            "default": false
          },
          "onlySpecials": {
            "title": "Only specials",
            "type": "boolean",
            "description": "Keep only Special Buys and products in a promotion (Lower Prices, Super Savers, Limited Time Only, Price Drops, Savers).",
            "default": false
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "number",
            "description": "Lowest shelf price in the shop's currency, e.g. 2.5."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "number",
            "description": "Highest shelf price in the shop's currency, e.g. 20."
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Keep only these brands, e.g. \"FARMDALE\", \"Choceur\". On their own (no other input) they read each brand's whole range.",
            "items": {
              "type": "string"
            }
          },
          "excludeCategories": {
            "title": "Exclude departments",
            "type": "array",
            "description": "Drop products in these departments or sub-departments, e.g. \"Liquor\", \"Pets\".",
            "items": {
              "type": "string"
            }
          },
          "excludeAllergens": {
            "title": "Exclude allergens",
            "type": "array",
            "description": "Drop products whose ingredients or \"may contain\" claims name any of these words, e.g. \"peanut\", \"milk\". Turns on Product details (charged as the details add-on).",
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Product details",
            "type": "boolean",
            "description": "Add description, ingredients, storage and usage instructions, \"may contain\" / \"free from\" claims, variants and label images. $0.36 per 1,000 products that get them.",
            "default": false
          },
          "includeStock": {
            "title": "Special Buys stock",
            "type": "boolean",
            "description": "Add ALDI's stock level (green / yellow / orange / red + its wording) at the chosen store and the nearest ones, for Special Buys (ALDI publishes none for the regular range). $0.45 per 1,000 products with stock.",
            "default": false
          },
          "stockStoresPerProduct": {
            "title": "Stock: stores per product",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many stores (the chosen one first, then the nearest) to report stock for.",
            "default": 5
          },
          "stockRadiusKm": {
            "title": "Stock: radius (km)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Only stores within this distance of the chosen store.",
            "default": 25
          },
          "tagPromotions": {
            "title": "Tag promotions",
            "type": "boolean",
            "description": "Fill `promotions` on every row with the ALDI promotion collections the product is in (Lower Prices, Super Savers, Limited Time Only…). Free.",
            "default": true
          },
          "monitorMode": {
            "title": "Only new or re-priced",
            "type": "boolean",
            "description": "Deliver only products that are new since the last run with the same inputs, or whose price changed (with previousPrice and priceChange). Unchanged products are not charged.",
            "default": false
          },
          "includeDisappeared": {
            "title": "Report disappeared products",
            "type": "boolean",
            "description": "With monitoring on, also deliver products from the last run that ALDI no longer lists (changeType \"disappeared\"). Only when the run read the whole scope.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor memory name",
            "type": "string",
            "description": "Named key-value store that remembers prices between runs. Use a different name for each separate monitor.",
            "default": "aldi-au-scraper-state"
          },
          "maxResultsPerSearch": {
            "title": "Max per search",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Most products from each search, department, promotion or Special Buys date (per store). 0 = everything it lists (a department has up to ~1,100).",
            "default": 100
          },
          "maxItems": {
            "title": "Max products in total",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Most rows the whole run delivers. 0 = no limit.",
            "default": 500
          },
          "imageWidth": {
            "title": "Image width (px)",
            "minimum": 100,
            "maximum": 1500,
            "type": "integer",
            "description": "Width of the image links ALDI's image server returns (up to 1500).",
            "default": 600
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. The actor reads ALDI directly and moves to Apify datacenter, then residential proxies by itself if ALDI refuses a route."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Requests in flight at once.",
            "default": 10
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}