{
  "openapi": "3.0.1",
  "info": {
    "title": "Coles Australia Scraper - Prices, Specials, Stock & History",
    "description": "Coles AU prices, specials and stock for any of ~878 stores (by id, postcode or all), ~27k products, with price history nobody else keeps: previous price, 30-day low, 90-day average and a real-discount check. Barcodes, nutrition, allergens, store directory. Nightly cache, so runs don't fail.",
    "version": "0.0",
    "x-build-id": "xF8OlNKfbnq0DQEfl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawlplant~coles-au/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawlplant-coles-au",
        "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/crawlplant~coles-au/runs": {
      "post": {
        "operationId": "runs-sync-crawlplant-coles-au",
        "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/crawlplant~coles-au/run-sync": {
      "post": {
        "operationId": "run-sync-crawlplant-coles-au",
        "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",
              "urls",
              "barcodes",
              "categories",
              "catalog",
              "stores"
            ],
            "type": "string",
            "description": "What to fetch: keyword search, a category listing, current specials, products by id, any Coles links, the list of departments and categories, the full catalogue from our nightly snapshot (fast; set Max items high, filters apply), or the store directory (address, coordinates, opening hours).",
            "default": "search"
          },
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "Used in 'search' mode. Each query is searched separately.",
            "default": [
              "milk"
            ],
            "items": {
              "type": "string"
            }
          },
          "categoryUrls": {
            "title": "Category URLs",
            "type": "array",
            "description": "Used in 'category' mode, e.g. https://www.coles.com.au/browse/dairy-eggs-fridge/milk (or just dairy-eggs-fridge/milk). Tip: run mode 'List categories' to get every category URL.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "productIds": {
            "title": "Product ids",
            "type": "array",
            "description": "Used in 'products' mode: the number at the end of a product URL, e.g. 8150288.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "barcodes": {
            "title": "Barcodes",
            "type": "array",
            "description": "Used in 'barcodes' mode: EAN / GTIN codes, e.g. 9300601186945. Looked up in our Coles database (~91% of products have a barcode); leading zeros don't matter.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Coles links",
            "type": "array",
            "description": "Used in 'urls' mode: paste any product, search, category or specials link (or a bare product id). Sort order and the specials filter in a link are kept.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "specialsGroups": {
            "title": "Specials types",
            "type": "array",
            "description": "Used in 'specials' mode. Empty = all specials. Values: halfprice, multibuy, onlineonly.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum products per query / category / link, per store (after filters). For specials, products and the full catalogue: per run and store (the catalogue has ~27k products). Store directory: number of stores.",
            "default": 100
          },
          "storeIds": {
            "title": "Store ids",
            "type": "array",
            "description": "Prices and stock of these Coles stores, each store as its own rows. The id is the number at the end of a store page link, e.g. 313 in coles.com.au/find-stores/coles/wa/karratha-313. Empty = Coles' default online store (the one with price history). Store prices come from our nightly read of every store; a store not read since this week's specials change is fetched live.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postcodes": {
            "title": "Postcodes",
            "type": "array",
            "description": "Australian postcodes (up to 500): every Coles store in each postcode, each as its own rows. A postcode without a Coles gives no rows; the run warnings name its nearest store and distance, so you can add it to Store ids. Store prices come from our nightly read of every store (fetched live when it's older than this week's specials change).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "allStores": {
            "title": "All Coles stores",
            "type": "boolean",
            "description": "Run the searches / categories / specials in every Coles store (~878). Combine with a small Max items: it applies per store.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price_asc",
              "price_desc",
              "unit_price_asc",
              "best_sellers",
              "discount_desc"
            ],
            "type": "string",
            "description": "Result order. Relevance, price, unit price and best sellers are applied by Coles before paging; biggest discount re-sorts the collected results by % off (use with specialsOnly and a high Max items). Price sorts skip products that are unavailable (no price).",
            "default": "relevance"
          },
          "specialsOnly": {
            "title": "Specials only",
            "type": "boolean",
            "description": "Keep only products currently on special (filtered by Coles, so no pages are wasted).",
            "default": false
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Skip products currently unavailable at the store.",
            "default": false
          },
          "minPrice": {
            "title": "Min price (AUD)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only products priced at or above this amount."
          },
          "maxPrice": {
            "title": "Max price (AUD)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only products priced at or below this amount."
          },
          "excludeCategories": {
            "title": "Exclude departments",
            "type": "array",
            "description": "Departments to leave out, by name or URL slug, e.g. 'liquorland' or 'Pet'. Tobacco is excluded by default (age-restricted); remove it from the list to include it.",
            "default": [
              "tobacco"
            ],
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Keep only these brands (exact brand name, any case), e.g. 'Coles', 'Arnott's'.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minDiscountPercent": {
            "title": "Min discount (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "Keep only products at least this much below their was-price, e.g. 50 for half price and better. Multi-buy offers have no was-price and never match."
          },
          "dietary": {
            "title": "Dietary",
            "type": "array",
            "description": "Keep only products whose dietary statement includes ALL of these, e.g. Gluten Free, Vegan, Source of Calcium. Needs product details (see Fetch full details).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeAllergens": {
            "title": "Exclude allergens",
            "type": "array",
            "description": "Skip products that contain or may contain any of these, e.g. Peanut, Milk, Gluten. Products without allergen data are skipped too. Needs product details.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxSugarPer100g": {
            "title": "Max sugar per 100 g/mL",
            "minimum": 0,
            "type": "number",
            "description": "Keep only products with at most this much sugar per 100 g/mL. Needs product details."
          },
          "minProteinPer100g": {
            "title": "Min protein per 100 g/mL",
            "minimum": 0,
            "type": "number",
            "description": "Keep only products with at least this much protein per 100 g/mL. Needs product details."
          },
          "changedSince": {
            "title": "Price changed since",
            "type": "string",
            "description": "Return only products whose price changed since this date/time (e.g. 2026-09-01), or 'last-run' for changes since your previous run with the same input. Default online store only."
          },
          "includeDisappeared": {
            "title": "Include disappeared products",
            "type": "boolean",
            "description": "With 'Price changed since' = last-run: also list products your previous run returned that are gone now (delisted or no longer matching), as rows with type 'disappeared'.",
            "default": false
          },
          "priceHistoryDays": {
            "title": "Price history (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Add each product's price changes from the last N days (0 = off). Every result always includes previous price, 30-day low, 90-day average and a genuine-discount check.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only new products",
            "type": "boolean",
            "description": "Only products that appeared at Coles in the last 7 days.",
            "default": false
          },
          "onlyNewSpecials": {
            "title": "Only new specials",
            "type": "boolean",
            "description": "Only products that went on special in the last 7 days (specials change every Wednesday).",
            "default": false
          },
          "fetchFullDetails": {
            "title": "Fetch full details",
            "type": "boolean",
            "description": "Adds barcode (GTIN), ingredients, allergens, dietary statement, nutrition panel, country of origin and storage from each product page (1 extra request and a small charge per product). Many products already have them from our database at no extra cost.",
            "default": false
          },
          "maxAgeHours": {
            "title": "Max cache age (hours)",
            "minimum": 0,
            "type": "integer",
            "description": "We refresh every product nightly (Sydney time). Data older than this, or read before this week's specials change (Wednesday), is fetched live instead. 0 = always fetch live.",
            "default": 36
          },
          "includeRaw": {
            "title": "Include raw payload",
            "type": "boolean",
            "description": "Add the original Coles payload to each record (every field, including ones we do not map).",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}