{
  "openapi": "3.0.1",
  "info": {
    "title": "Australia Grocery Prices Scraper: Coles, Woolworths & ALDI",
    "description": "Coles, Woolworths and ALDI prices by search term or category/specials page: price, was-price, specials, multibuys, unit price per kg/L, size, brand, barcode, stock, image. Compare mode finds the same product at each chain and marks the cheapest. Price-change monitoring.",
    "version": "0.3",
    "x-build-id": "3meuqabtlQ9heNwbx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/amitaviv~australia-grocery-prices-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-amitaviv-australia-grocery-prices-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/amitaviv~australia-grocery-prices-scraper/runs": {
      "post": {
        "operationId": "runs-sync-amitaviv-australia-grocery-prices-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/amitaviv~australia-grocery-prices-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-amitaviv-australia-grocery-prices-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, in English, e.g. milk, vegemite, coca cola 1.25L. Each term is searched at every retailer selected below. Duplicates are ignored. Give search terms, category URLs, or both: at least one entry in either is required.",
            "items": {
              "type": "string"
            }
          },
          "retailers": {
            "title": "Retailers",
            "type": "array",
            "description": "Which supermarkets to search: coles, woolworths, aldi (default: all three). Category URLs always go to their own retailer. Compare mode needs at least two.",
            "items": {
              "type": "string",
              "enum": [
                "coles",
                "woolworths",
                "aldi"
              ],
              "enumTitles": [
                "Coles",
                "Woolworths",
                "ALDI"
              ]
            },
            "default": [
              "coles",
              "woolworths",
              "aldi"
            ]
          },
          "categoryUrls": {
            "title": "Category or specials URLs (optional)",
            "type": "array",
            "description": "Optional listing pages copied from the sites, e.g. https://www.coles.com.au/on-special. Accepted: Coles /browse/<aisle>/... or /on-special, Woolworths /shop/browse/... (the main specials page /shop/browse/specials is read as its sub-pages: half price, lower shelf price, buy more save more and the others), ALDI /products/.../k/<number>. Search-result URLs of the three sites are read as search terms. Empty by default.",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerQuery": {
            "title": "Max products per search term per retailer",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of products for each search term at each retailer, and for each category URL, 1 to 5,000 (default 100; e.g. 3 search terms × 3 retailers × 100 = up to 900 products). The Woolworths main specials page counts as one URL across its sub-pages. You pay only for delivered products. Coles shows at most 100 pages (about 4,800 products) of one listing. For price monitoring, set it above the size of the listing, so that every product is watched from the first run.",
            "default": 100
          },
          "includeMarketplace": {
            "title": "Woolworths: include Everyday Market items",
            "type": "boolean",
            "description": "Woolworths also lists goods sold by third-party sellers (\"Everyday Market\"), and fills searches that match no grocery with them. Off by default: only Woolworths's own range. On: those items too, with the seller's business name in marketplaceSeller.",
            "default": false
          },
          "compare": {
            "title": "Compare mode: same product across retailers",
            "type": "boolean",
            "description": "For each search term, match the same product (same brand, or the brand that opens the other shop's product name; same pack size; similar name) at the selected retailers (at least two) and mark the cheapest: matchGroup, cheapestRetailer (null when several share the lowest price), cheapestRetailers, cheapestPrice, isCheapest, priceAboveCheapest. Only matched products are delivered unless you tick the next box. Works with search terms, not category URLs.",
            "default": false
          },
          "compareIncludeUnmatched": {
            "title": "Compare mode: also deliver products found at only one retailer",
            "type": "boolean",
            "description": "Only with compare mode. Off (default): you get (and pay for) matched products only. On: products found at only one retailer are delivered too, with matchGroup null.",
            "default": false
          },
          "onlyChanges": {
            "title": "Only new or re-priced products (price monitoring)",
            "type": "boolean",
            "description": "Price monitoring. Deliver only products that are new to this monitor, or whose price or multibuy deal changed since the last run, with previousPrice, priceChange and changeType. The first run delivers everything as \"new\". Every product read and found unchanged is charged as a small \"product checked\" event (see Pricing), not as a product. The memory is a key-value store named australia-grocery-prices-scraper-monitor in your account; delete it to start over. Cannot be combined with compare mode.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Only with price monitoring. A free-text name (e.g. milk-daily). Runs with the same search and the same monitor name share one memory; give two schedules different names to keep them apart. Empty by default."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: Apify residential proxy in Australia, which Coles and Woolworths accept. Coles is read through it from the first request (Coles refuses most requests from cloud servers). Woolworths and ALDI are asked directly first and move to the proxy only if that shop refuses a request. With the proxy off, every request goes out directly and refused ones are only retried directly, so Coles often fails.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AU"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}