{
  "openapi": "3.0.1",
  "info": {
    "title": "Starbucks Scraper — Stores, Menu, Nutrition & Availability",
    "description": "Scrape every Starbucks store in Canada and the USA (address, phone, hours, drive-thru, mobile order, Wi-Fi, licensed vs company-operated) and the full menu with per-store availability, calories, caffeine, allergens and ingredients. By city, postal/ZIP, province/state or country. No login.",
    "version": "0.1",
    "x-build-id": "UaAeP4eI7NW4othri"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~starbucks-stores-menu-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-starbucks-stores-menu-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~starbucks-stores-menu-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-starbucks-stores-menu-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~starbucks-stores-menu-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-starbucks-stores-menu-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": [
              "stores",
              "menu",
              "storesAndMenu"
            ],
            "type": "string",
            "description": "Stores: one row per store. Menu: menu items — per store for the stores found by your locations (with that store's availability), or the national menu when no location is given. Stores + menu: both.",
            "default": "stores"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities (\"Toronto, ON\", \"Austin, TX\"), postal/ZIP codes (\"M5V 3L9\", \"10001\"), street addresses, coordinates (\"43.65,-79.38\"), provinces/states (\"Ontario\", \"TX\") or a whole country (\"Canada\", \"USA\"). Cities, postcodes and addresses return the stores within the radius below, nearest first; provinces, states and countries return every store in them.",
            "items": {
              "type": "string"
            }
          },
          "maxStoresPerLocation": {
            "title": "Max stores per location",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only the nearest N stores for each city/postcode/address (0 = every store within the radius).",
            "default": 0
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 1,
            "maximum": 400,
            "type": "integer",
            "description": "How far from each city/postcode/address to look. 20 km covers most of a big city; use 40–80 km for a metro area.",
            "default": 20
          },
          "fullCountry": {
            "title": "Whole country",
            "type": "boolean",
            "description": "Scrape every Starbucks store in the country selected below (Canada ≈ 1,430 stores in about a minute; USA ≈ 16,900 stores in about 8 minutes). Combine with Provinces/states to narrow it.",
            "default": false
          },
          "country": {
            "title": "Country",
            "enum": [
              "CA",
              "US",
              "both"
            ],
            "type": "string",
            "description": "Used by \"Whole country\", by the national menu (Menu mode without locations), and to break ties for ambiguous names (\"CA\", \"Springfield\"). Cities, postcodes and provinces/states are recognised automatically.",
            "default": "CA"
          },
          "regions": {
            "title": "Provinces / states filter",
            "type": "array",
            "description": "Only keep stores in these provinces or states (\"ON\", \"QC\", \"BC\", \"NY\", \"California\"…). Leave empty for all.",
            "items": {
              "type": "string"
            }
          },
          "amenities": {
            "title": "Must have",
            "type": "array",
            "description": "Only keep stores that have ALL of these.",
            "items": {
              "type": "string",
              "enum": [
                "driveThru",
                "mobileOrder",
                "wifi",
                "nitroColdBrew",
                "ovenWarmedFood",
                "cafeSeating",
                "outdoorSeating",
                "redeemRewards",
                "open24Hours"
              ],
              "enumTitles": [
                "Drive-thru",
                "Mobile Order & Pay",
                "Wi-Fi",
                "Nitro Cold Brew",
                "Oven-warmed food",
                "Café seating",
                "Outdoor seating",
                "Redeem Rewards",
                "Open 24 hours"
              ]
            }
          },
          "ownership": {
            "title": "Store type",
            "enum": [
              "any",
              "CO",
              "LS"
            ],
            "type": "string",
            "description": "Company-operated Starbucks stores, licensed stores (inside grocery stores, airports, campuses, hotels…), or both.",
            "default": "any"
          },
          "storeNumbers": {
            "title": "Store numbers (menu)",
            "type": "array",
            "description": "Fetch the menu of these stores directly, e.g. \"4455-310581\" (the storeNumber field of a store row). Prefix US stores with \"US:\" unless Country is USA. Used by the Menu modes.",
            "items": {
              "type": "string"
            }
          },
          "includeNutrition": {
            "title": "Nutrition, allergens & ingredients",
            "type": "boolean",
            "description": "Add calories, caffeine, sugar, fat, protein, carbs, sodium, serving size, allergens and ingredients for every size of every menu item, plus the description and Stars cost. Adds about 1–2 minutes per run (each product is fetched once, whatever the number of stores).",
            "default": true
          },
          "productTypes": {
            "title": "Product types",
            "type": "array",
            "description": "Only output these kinds of menu items. Leave empty for the whole menu.",
            "items": {
              "type": "string",
              "enum": [
                "Beverage",
                "Food",
                "Coffee"
              ],
              "enumTitles": [
                "Drinks",
                "Food",
                "Coffee to take home (beans, VIA)"
              ]
            }
          },
          "onlyUnavailableItems": {
            "title": "Only unavailable items",
            "type": "boolean",
            "description": "For store menus: only output items that are temporarily unavailable or not sold at that store — an out-of-stock report.",
            "default": false
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string",
            "description": "French is available for Canada (store amenities, hours, menu names and descriptions). US data is always in English.",
            "default": "en"
          },
          "thoroughScan": {
            "title": "Thorough whole-country scan",
            "type": "boolean",
            "description": "Advanced. By default a whole-country or province/state run only visits the map areas that held stores on the last full scan (much faster). Turn this on to sweep every inhabited area instead — slower, but it also finds a brand-new store in a town that never had one.",
            "default": false
          },
          "maxItems": {
            "title": "Max rows",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after saving this many rows in total (0 = no limit).",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many requests run 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 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}