{
  "openapi": "3.0.1",
  "info": {
    "title": "Wolt Restaurant Menu Scraper",
    "description": "Scrape Wolt restaurants, grocery stores and full menus with prices across 961 cities in 30 countries. Search by keyword, list a whole city, or pull menus from venue URLs. Every item carries its venue, category, dietary labels and VAT. Clean JSON, no browser.",
    "version": "0.0",
    "x-build-id": "deTuKosGjQ75X6enl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/teodor_banea~wolt-restaurant-menu-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-teodor_banea-wolt-restaurant-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/teodor_banea~wolt-restaurant-menu-scraper/runs": {
      "post": {
        "operationId": "runs-sync-teodor_banea-wolt-restaurant-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/teodor_banea~wolt-restaurant-menu-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-teodor_banea-wolt-restaurant-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "search",
              "discovery",
              "venueUrls"
            ],
            "type": "string",
            "description": "Choose how to find venues: search Wolt by keyword, browse a city's discovery page, or extract full menus from specific venue URLs.",
            "default": "search"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Enter one or more search terms (e.g. \"pizza\", \"sushi\", \"burger\"). Each query returns up to 100 venues — Wolt's search has no pagination, so use several queries to cover more of a city.",
            "items": {
              "type": "string"
            }
          },
          "venueUrls": {
            "title": "Venue URLs",
            "type": "array",
            "description": "Enter Wolt venue page URLs (e.g. https://wolt.com/en/fin/helsinki/restaurant/makikupla). The full menu with prices is extracted for each venue. Only used in \"Venue URLs → full menus\" mode.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Enter the city to scrape (e.g. \"Helsinki\", \"Berlin\", \"Budapest\"). Wolt operates in ~960 cities across 30 countries; the name is matched ignoring case and accents."
          },
          "latitude": {
            "title": "Latitude",
            "pattern": "^-?\\d{1,2}(\\.\\d+)?$",
            "type": "string",
            "description": "Advanced: exact latitude to search from, e.g. \"60.1699\". Overrides City when set together with Longitude."
          },
          "longitude": {
            "title": "Longitude",
            "pattern": "^-?\\d{1,3}(\\.\\d+)?$",
            "type": "string",
            "description": "Advanced: exact longitude to search from, e.g. \"24.9384\". Overrides City when set together with Latitude."
          },
          "includeMenus": {
            "title": "Include full menus",
            "type": "boolean",
            "description": "Also scrape the full menu (all items with prices) of every venue found by search/discovery. A typical venue has 150–300 menu items, so this multiplies the number of results — lower \"Maximum venues\" to control cost.",
            "default": false
          },
          "expandCatalogs": {
            "title": "Expand large store catalogs",
            "type": "boolean",
            "description": "Wolt Market and other large grocery venues keep their catalog behind category pages, so a normal menu request returns nothing for them. Turn this on to walk those categories (up to 60 extra requests per store). Restaurants never need it, and it can multiply your result count.",
            "default": false
          },
          "language": {
            "title": "Menu language",
            "type": "string",
            "description": "Two-letter language code for menu texts (e.g. \"en\", \"fi\", \"de\"). Wolt auto-translates menus; the output marks translated items with isAutotranslated.",
            "default": "en"
          },
          "maxMenuItemsPerVenue": {
            "title": "Maximum menu items per venue",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Optional cap on menu items per venue. Leave at 0 to get every venue's full menu.",
            "default": 0
          },
          "maxVenues": {
            "title": "Maximum venues",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Optional cap on how many venues are scraped (and how many menus are fetched when menus are on). Leave at 0 to take every venue Wolt returns.",
            "default": 0
          },
          "maxItemsTotal": {
            "title": "Maximum results",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional hard ceiling on billed results (venues, or menu items when menus are on). Leave at 0 for no limit. This is the most reliable way to bound what a run can cost.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many requests run in parallel. The default is safe; lower it if you see rate-limit errors.",
            "default": 10
          },
          "maxRequestsPerMinute": {
            "title": "Maximum requests per minute",
            "minimum": 10,
            "maximum": 600,
            "type": "integer",
            "description": "Throttle the overall request rate.",
            "default": 120
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}