{
  "openapi": "3.0.1",
  "info": {
    "title": "LCBO Scraper — Products, Prices, Sales Ranks & Store Stock",
    "description": "Scrape the full LCBO (Ontario) catalogue: prices, sales and promos, Aeroplan offers, monthly and yearly sales ranks, UPC, ABV, taste profile, ratings, online stock, and quantity on hand at any LCBO store. Search, category, whole-store and per-product store availability modes. No login.",
    "version": "0.1",
    "x-build-id": "7lYmJCoegG2HETBBF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~lcbo-products-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-lcbo-products-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/yugenox~lcbo-products-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-lcbo-products-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/yugenox~lcbo-products-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-lcbo-products-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "products",
              "storeInventory",
              "productAvailability"
            ],
            "type": "string",
            "description": "Products: one row per product (search terms, categories, SKUs, or the whole catalogue when all are empty). Store inventory: one row per product per store, with the quantity on hand at each store in \"Store IDs\". Product availability: for each SKU, every LCBO store that has it, with address, phone and quantity.",
            "default": "products"
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords, searched the same way as the lcbo.com search box, each as its own search. Leave empty (with no SKUs) to scrape everything that matches your categories and filters, or the entire catalogue.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Limit to categories, e.g. \"Wine\", \"Red Wine\", \"Spirits > Whisky\", \"Beer\", \"Ready to Drink\", or collections like \"Vintages\" and \"Promotions > Clearance\". Several categories are combined (any of them). Unknown names are reported with suggestions.",
            "items": {
              "type": "string"
            }
          },
          "skus": {
            "title": "SKUs (LCBO item numbers)",
            "type": "array",
            "description": "LCBO item numbers (e.g. 521963) or product page URLs. Products mode: returns these products. Store inventory mode: only these products at your stores. Product availability mode: required — one row per store carrying each SKU.",
            "items": {
              "type": "string"
            }
          },
          "storeIds": {
            "title": "Store IDs",
            "type": "array",
            "description": "Required for Store inventory mode. The LCBO store number (e.g. 388) or the store page URL (https://www.lcbo.com/en/stores/robertson-stafford-388). Each store is scraped separately.",
            "items": {
              "type": "string"
            }
          },
          "inStockOnly": {
            "title": "Only products in stock at the store",
            "type": "boolean",
            "description": "Store inventory mode: only return products with at least one unit on hand. Turn off to also get products the store carries but has sold out of (quantity 0).",
            "default": true
          },
          "minPrice": {
            "title": "Min price ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Only products at or above this price (current price, in dollars)."
          },
          "maxPrice": {
            "title": "Max price ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Only products at or below this price (current price, in dollars)."
          },
          "onSaleOnly": {
            "title": "Only products on sale",
            "type": "boolean",
            "description": "Only products with a reduced price right now (sales and clearance).",
            "default": false
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Only products made in these countries, e.g. \"France\", \"Italy\", \"Canada\".",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "auto",
              "bestSelling",
              "bestSellingYear",
              "mostViewed",
              "priceAsc",
              "priceDesc",
              "newest",
              "topRated",
              "mostReviewed",
              "relevance"
            ],
            "type": "string",
            "description": "Order of results. Auto = most relevant for search terms, best-selling otherwise. Up to 5,000 results per search follow this order; beyond that, results continue in price order.",
            "default": "auto"
          },
          "maxItems": {
            "title": "Max results (total)",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum rows for the whole run. Leave empty for no limit (the full catalogue is about 21,000 products)."
          },
          "maxItemsPerSearch": {
            "title": "Max results per search / store",
            "minimum": 1,
            "type": "integer",
            "description": "Cap for each search term, category crawl or store. Leave empty for no limit."
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string",
            "description": "Language of names, descriptions and categories (English or French). With French, write categories in French too (e.g. \"Vin rouge\").",
            "default": "en"
          },
          "includeDescription": {
            "title": "Include descriptions",
            "type": "boolean",
            "description": "Add the tasting note / product description and its keywords to each product.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Parallel requests. The default is fast (the full catalogue takes about 1–2 minutes); raising it rarely helps.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is required. Datacenter proxies are used by default; residential (Canada) is used automatically where needed.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}