{
  "openapi": "3.0.1",
  "info": {
    "title": "Coles, Woolworths, Aldi & IGA Prices Scraper (Australia)",
    "description": "Australian supermarket prices from Coles, Woolworths, Aldi and IGA in one table: search, categories or the full catalog, specials (half price, multibuy), watchlists, store prices, barcodes and a changed-only price watcher. No login, no browser.",
    "version": "0.1",
    "x-build-id": "7UEqZXeKhVBervwWw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/varnmill~au-supermarket-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-varnmill-au-supermarket-prices",
        "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/varnmill~au-supermarket-prices/runs": {
      "post": {
        "operationId": "runs-sync-varnmill-au-supermarket-prices",
        "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/varnmill~au-supermarket-prices/run-sync": {
      "post": {
        "operationId": "run-sync-varnmill-au-supermarket-prices",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "category",
              "specials",
              "products",
              "categories",
              "stores"
            ],
            "type": "string",
            "description": "What to collect. Every mode returns the same product fields for every retailer, so you can compare Coles, Woolworths, Aldi and IGA side by side.",
            "default": "search"
          },
          "retailers": {
            "title": "Retailers",
            "type": "array",
            "description": "Supermarkets to collect from. Empty means all four. Each retailer runs in parallel.",
            "items": {
              "type": "string",
              "enum": [
                "coles",
                "woolworths",
                "aldi",
                "iga"
              ],
              "enumTitles": [
                "Coles",
                "Woolworths",
                "Aldi",
                "IGA"
              ]
            },
            "default": [
              "coles",
              "woolworths",
              "aldi",
              "iga"
            ]
          },
          "queries": {
            "title": "Search keywords (search mode)",
            "type": "array",
            "description": "What you would type into the supermarket's search box, e.g. 'milk', 'tim tams', 'nappies size 4'. Each keyword is searched at every selected retailer.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories (category mode)",
            "type": "array",
            "description": "Category names, IDs or category page URLs, e.g. 'Dairy, Eggs & Fridge' or a coles.com.au/browse/... link. Use 'all' for the whole grocery catalog of each retailer (about 30k Coles, 22k Woolworths, 3k Aldi and 14k IGA lines). Run mode 'categories' first to see the exact names.",
            "items": {
              "type": "string"
            }
          },
          "specialsType": {
            "title": "Specials type (specials mode)",
            "enum": [
              "all",
              "halfPrice",
              "multibuy",
              "onlineOnly"
            ],
            "type": "string",
            "description": "Which specials to collect. Aldi only has 'all' (Special Buys and price drops); a type a retailer does not have returns an uncharged error row for that retailer.",
            "default": "all"
          },
          "products": {
            "title": "Products (products mode)",
            "type": "array",
            "description": "Product page URLs from any of the four sites, or IDs prefixed with the retailer, e.g. 'coles:5013085' or 'woolworths:888140'. Bare IDs work when exactly one retailer is selected. Use the 'productId' field from an earlier run.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Postcode or suburb (stores mode)",
            "type": "string",
            "description": "Find stores near this postcode or suburb, e.g. '2000' or 'Fitzroy'. Use the returned 'storeId' as the Coles or IGA store below to get that store's prices."
          },
          "colesStoreId": {
            "title": "Coles store ID",
            "type": "string",
            "description": "Optional. Coles prices and ranges differ by store. Leave empty for Coles's default online store, or enter a 'storeId' from stores mode to get that store's prices."
          },
          "igaStoreId": {
            "title": "IGA store ID",
            "type": "string",
            "description": "Optional. IGA stores are independently owned and set their own prices. Leave empty for the default store named in each row, or enter a 'storeId' from stores mode."
          },
          "maxItemsPerQuery": {
            "title": "Max products per keyword, category or specials list",
            "minimum": 0,
            "type": "integer",
            "description": "Stop each keyword, category or specials list at this many products per retailer. 0 = no limit (all pages).",
            "default": 100
          },
          "maxItems": {
            "title": "Max results in total",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on billable rows for the whole run across all retailers. 0 = no cap (your maximum charge per run still applies).",
            "default": 0
          },
          "includeDetails": {
            "title": "Include product details (barcode, ingredients, nutrition)",
            "type": "boolean",
            "description": "Adds a 'details' object to each product: barcode (GTIN), description, ingredients, allergens, nutrition panel, country of origin and health star rating, where the retailer publishes them. Charged as an extra 'product-details' event. Coles needs one extra request per product, so this is slower.",
            "default": false
          },
          "onlyChanged": {
            "title": "Only changed prices (price watcher)",
            "type": "boolean",
            "description": "Remember every product's price between runs and output only products that are new, changed price, started or ended a special, or changed stock. You are charged only for rows that are output. Schedule the same input daily for a price-change feed.",
            "default": false
          },
          "watcherName": {
            "title": "Watcher name",
            "type": "string",
            "description": "With 'Only changed prices': name of the remembered price list. Use a different name for each schedule so they do not overwrite each other.",
            "default": "default"
          },
          "includeMarketplace": {
            "title": "Include Woolworths Everyday Market",
            "type": "boolean",
            "description": "Woolworths also lists over a million third-party marketplace items (Everyday Market). They are left out by default so results show supermarket lines only.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max parallel requests per retailer",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Requests in flight per retailer. Keep it low; supermarkets throttle aggressive clients.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "The Apify datacenter proxy (default) is needed for Coles, which blocks most direct cloud connections. Woolworths, Aldi and IGA also work through it.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}