{
  "openapi": "3.0.1",
  "info": {
    "title": "Coles Price Tracker - Price Drops, Specials & Stock by Category",
    "description": "Track Coles prices by category: paste coles.com.au category URLs and get every product's price, was price, special, multi-buy offer, unit price and stock. Monitor mode returns only price drops, new specials and newly listed products since the last run. Reliable reads with automatic retries.",
    "version": "0.1",
    "x-build-id": "5ePNFJLQPAPGATcnL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~coles-price-change-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-coles-price-change-monitor",
        "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/neverempty~coles-price-change-monitor/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-coles-price-change-monitor",
        "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/neverempty~coles-price-change-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-coles-price-change-monitor",
        "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": {
          "categoryUrls": {
            "title": "Coles category URLs",
            "type": "array",
            "description": "Coles category pages, one per line (up to 200 per run), copied from the browser address bar, like https://www.coles.com.au/browse/dairy-eggs-fridge/milk. A department (/browse/bakery), a category or an aisle (/browse/dairy-eggs-fridge/milk/full-cream-milk) all work, and so does just the path dairy-eggs-fridge/milk. Filters and page numbers in the URL are ignored; the whole category is read from page 1. If you leave this empty, the example aisle Full Cream Milk is read.",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerCategory": {
            "title": "Max products per category",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Most products returned for one category in a normal run (Coles shows 48 per page). Empty = every product on the pages read. Not used in monitor mode, which compares the whole category."
          },
          "maxPagesPerCategory": {
            "title": "Max pages per category",
            "minimum": 1,
            "maximum": 150,
            "type": "integer",
            "description": "How many category pages (48 products each) are read at most, 1 to 150. Empty = 25 pages (1,200 products). Most categories and aisles fit; large departments such as Pantry have more than 100 pages.",
            "default": 25
          },
          "onlyChanges": {
            "title": "Monitor mode: only price drops, new specials and new products",
            "type": "boolean",
            "description": "On: the first run records the price and special of every product in each category as the starting point (free, no product rows). Later runs with the same categories return only products whose price dropped, that went on special, or that are newly listed, with the previous price. A category where nothing changed costs one small category-checked event. Off or empty: return every product.",
            "default": false
          },
          "alertOnPriceIncrease": {
            "title": "Monitor mode: also return price increases",
            "type": "boolean",
            "description": "On: monitor mode also returns products whose price went up (changeType price-increase). Off or empty: price increases are remembered but not returned.",
            "default": false
          },
          "watchName": {
            "title": "Watch name (optional)",
            "type": "string",
            "description": "Keeps a separate memory per name, so two schedules with different category lists do not mix. Letters, digits, dot, dash and underscore, up to 40 characters. Empty means the watch called default."
          },
          "resetMonitoringState": {
            "title": "Forget what this watch remembers",
            "type": "boolean",
            "description": "Monitor mode only: forget the remembered prices of this watch name first, so this run records a new starting point. Off or empty: keep the memory.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Categories read at the same time",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many categories are read in parallel (1 to 4); the pages of one category are read one after another. Empty = 2.",
            "default": 2
          },
          "requestTimeoutSecs": {
            "title": "Seconds to wait for one page",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "How long to wait for one category page before asking again (5 to 60). Empty = 30.",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}