{
  "openapi": "3.0.1",
  "info": {
    "title": "Tim Hortons, Burger King, Popeyes & Firehouse Subs Scraper",
    "description": "Store locations and store-level menu prices for Tim Hortons, Burger King, Popeyes and Firehouse Subs: address, hours, franchisee, amenities; every item, size and combo with pickup + delivery price, calories, EN/FR names and price changes. Canada, USA + 18 countries. No login.",
    "version": "0.1",
    "x-build-id": "ezdCPbaw5RzfAv551"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~rbi-restaurants-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-rbi-restaurants-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~rbi-restaurants-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-rbi-restaurants-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~rbi-restaurants-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-rbi-restaurants-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": {
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Which restaurant chains to scrape. Store data is available for all four brands. Store-level menu prices are available for Tim Hortons (Canada + USA), Burger King (USA + Canada) and Firehouse Subs (USA + Canada). Popeyes is store data only.",
            "items": {
              "type": "string",
              "enum": [
                "timhortons",
                "burgerking",
                "popeyes",
                "firehousesubs"
              ],
              "enumTitles": [
                "Tim Hortons",
                "Burger King",
                "Popeyes (store data only)",
                "Firehouse Subs"
              ]
            },
            "default": [
              "timhortons"
            ]
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Countries to include. Canada and the USA have store data + menu prices. The other countries are store data only (Burger King and Popeyes international locations).",
            "items": {
              "type": "string",
              "enum": [
                "CA",
                "US",
                "GB",
                "DE",
                "ES",
                "PT",
                "NL",
                "CH",
                "PL",
                "CZ",
                "IE",
                "RO",
                "FR",
                "IT",
                "NZ",
                "ZA",
                "SA",
                "MX",
                "BR",
                "KR"
              ],
              "enumTitles": [
                "Canada",
                "United States",
                "United Kingdom (Burger King)",
                "Germany (Burger King)",
                "Spain (Burger King, Popeyes)",
                "Portugal (Burger King)",
                "Netherlands (Burger King)",
                "Switzerland (Burger King, Popeyes)",
                "Poland (Burger King, Popeyes)",
                "Czechia (Burger King, Popeyes)",
                "Ireland (Burger King)",
                "Romania (Burger King, Popeyes)",
                "France (Popeyes)",
                "Italy (Popeyes)",
                "New Zealand (Burger King, Popeyes)",
                "South Africa (Burger King)",
                "Saudi Arabia (Burger King)",
                "Mexico (Burger King)",
                "Brazil (Burger King)",
                "South Korea (Popeyes)"
              ]
            },
            "default": [
              "CA",
              "US"
            ]
          },
          "outputs": {
            "title": "What to output",
            "type": "array",
            "description": "Row types to save. Stores: address, phone, hours per channel, amenities, franchisee. Menu items & prices: every priced item, size and combo at each store, with that store's price. Price changes: what changed since your previous run with price changes turned on (the first run saves a baseline).",
            "items": {
              "type": "string",
              "enum": [
                "stores",
                "menuItems",
                "priceChanges"
              ],
              "enumTitles": [
                "Stores",
                "Menu items & prices",
                "Price changes since last run"
              ]
            },
            "default": [
              "stores",
              "menuItems"
            ]
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Only stores in these cities, as written in the store address (\"Toronto\", \"North York\", \"Montréal\", \"New York\"). Accents and case don't matter. Add a province or state to disambiguate: \"London, ON\". Leave all location filters empty to get every store of the selected brands and countries.",
            "items": {
              "type": "string"
            }
          },
          "provinces": {
            "title": "Provinces / states",
            "type": "array",
            "description": "Only stores in these provinces or states, as 2-letter codes (\"ON\", \"QC\", \"NY\", \"TX\") or full names.",
            "items": {
              "type": "string"
            }
          },
          "postalCodes": {
            "title": "Postal / ZIP code prefixes",
            "type": "array",
            "description": "Only stores whose postal or ZIP code starts with one of these (\"M5V\", \"H2\", \"100\").",
            "items": {
              "type": "string"
            }
          },
          "nearLocation": {
            "title": "Near a point (latitude, longitude)",
            "type": "string",
            "description": "Only stores within the radius below of this point, nearest first. Example: \"43.6532, -79.3832\" (downtown Toronto)."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Search radius around the point above.",
            "default": 10
          },
          "storeIds": {
            "title": "Store IDs",
            "type": "array",
            "description": "Specific store numbers (the storeId field, e.g. \"102601\"). Prefix with the brand when you scrape several brands: \"burgerking:12871\", \"timhortons:102601\". These stores are added on top of the location filters and are always included (Max stores does not cut them).",
            "items": {
              "type": "string"
            }
          },
          "includeDeliveryPrices": {
            "title": "Delivery prices (Tim Hortons, Firehouse Subs)",
            "type": "boolean",
            "description": "Also fetch the in-app delivery price of every item. Burger King always includes pickup and delivery prices. Costs one extra request per store.",
            "default": false
          },
          "includeNutrition": {
            "title": "Nutrition & allergens",
            "type": "boolean",
            "description": "Add full nutrition facts (fat, sodium, sugar, protein…) and allergens (contains / may contain / shared equipment) to menu items.",
            "default": false
          },
          "itemKeywords": {
            "title": "Only items containing",
            "type": "array",
            "description": "Only output menu items whose name (English or French) contains one of these words, e.g. \"iced capp\", \"whopper\", \"coffee\". Handy for tracking a few prices across many stores. Price history still covers the whole menu.",
            "items": {
              "type": "string"
            }
          },
          "includeUnavailable": {
            "title": "Include items that are unavailable right now",
            "type": "boolean",
            "description": "By default, items the store currently marks as unavailable (sold out, ended promotions) are skipped.",
            "default": false
          },
          "includeClosedStores": {
            "title": "Include closed and upcoming stores",
            "type": "boolean",
            "description": "Also output stores marked closed, temporarily closed or coming soon (store rows only; they have no menu).",
            "default": false
          },
          "priceHistoryName": {
            "title": "Price history name",
            "type": "string",
            "description": "Price changes are compared with the last run that used the same name. Use different names to keep separate trackers (e.g. \"weekly-ontario\").",
            "default": "default"
          },
          "maxStores": {
            "title": "Max stores",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many stores (0 = every matching store). A store menu is roughly 400–800 rows, so the default is 10; for store lists only, set 0 to get every store. With several cities or brands, stores are taken from each in turn. When menus are requested, stores with online ordering come first.",
            "default": 10
          },
          "maxItems": {
            "title": "Max rows",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after saving this many rows in total (0 = no limit). A store's menu is roughly 400–800 rows.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel stores",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many stores to scrape at once.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is required. The default datacenter proxy works; the actor switches to residential proxies automatically if it gets blocked.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}