{
  "openapi": "3.0.1",
  "info": {
    "title": "Uber Eats Scraper - Stores, Menus, Reviews & Prices",
    "description": "Scrape Uber Eats stores by address, city, search term or link: name, phone, address, hours, rating, delivery time and fee, the full menu with prices, reviews and the EU trader block. Any country, no login. $0.90 per 1,000 listing rows, $1.80 per 1,000 full stores.",
    "version": "0.1",
    "x-build-id": "T0wnp6R8lesqlkzXc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~uber-eats-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-uber-eats-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/topapi~uber-eats-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-uber-eats-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/topapi~uber-eats-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-uber-eats-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": {
          "locations": {
            "title": "📍 Delivery addresses or cities",
            "type": "array",
            "description": "Where Uber Eats should deliver: a street address, a postcode or a city, e.g. \"Times Square, New York\", \"10 Downing Street, London\", \"75008 Paris\". Each one lists the stores Uber Eats shows for that address (about 300 for one point; use City-wide coverage below for a whole city).",
            "items": {
              "type": "string"
            }
          },
          "coordinates": {
            "title": "🧭 Coordinates",
            "type": "array",
            "description": "Delivery points as \"latitude,longitude\", e.g. \"40.7580,-73.9855\". Works in every country without an address look-up.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "🔎 Search terms",
            "type": "array",
            "description": "What you would type in Uber Eats' search box, e.g. \"pizza\", \"sushi\", \"pharmacy\", \"McDonald's\". Each term runs at each address. Empty = every store Uber Eats lists at the address.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Uber Eats links",
            "type": "array",
            "description": "Store links (any country, e.g. https://www.ubereats.com/gb/store/...), store ids, or listing links: /search?q=…&pl=…, /feed?pl=…, /city/<city>, /category/<city>/<dish>. A /brand/ or /near-me/ link needs an address in \"Delivery addresses\". Store links are always read in full.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sitemapCountries": {
            "title": "🗺️ Every store in a country (sitemap)",
            "type": "array",
            "description": "Two-letter country codes, e.g. \"GB\", \"JP\". The actor lists store links from Uber Eats' own store sitemaps (no address needed) and reads up to \"Max stores in total\". Uber Eats lists about 11,000 US and 2,500 GB stores per sitemap file.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Address country",
            "type": "string",
            "description": "Two-letter code of the country your addresses are in, e.g. \"GB\". Uber Eats' address search prefers places in the caller's own country, so set this for addresses outside the US; the actor then keeps only places in that country."
          },
          "includeDetails": {
            "title": "Store details (paid add-on)",
            "type": "boolean",
            "description": "On: each store row carries its store page - phone, full address, opening hours, the full menu with prices, reviews, chain, price level and the EU trader block ($0.0009 store + $0.0009 details). Off: the listing row only - name, link, rating, review count, delivery time and fee, offers, coordinates, photo ($0.0009). Filters on phone, cuisine, price level, open status, email, chain or onboarding date need the store page, so they turn details on.",
            "default": true
          },
          "includeMenu": {
            "title": "Full menu",
            "type": "boolean",
            "description": "Nest every menu section and item (price, description, photo, sold out, calories, like %, offers) in the store row. Included in the details price.",
            "default": true
          },
          "includeReviews": {
            "title": "Reviews",
            "type": "boolean",
            "description": "Nest the reviews Uber Eats shows on the store (up to ~100 per store: text, first name, date). Included in the details price.",
            "default": true
          },
          "maxReviewsPerStore": {
            "title": "Max reviews per store",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "0 = every review Uber Eats shows on the store.",
            "default": 0
          },
          "reviewsSince": {
            "title": "Reviews since",
            "type": "string",
            "description": "Only reviews posted on or after this date (YYYY-MM-DD)."
          },
          "includeItemOptions": {
            "title": "Item options (paid add-on)",
            "type": "boolean",
            "description": "Fetch each customisable item's option groups (sizes, toppings, sides with their extra prices, min/max choices) and nutrition. One extra request per customisable item; $0.0027 per store that gets at least one option group.",
            "default": false
          },
          "maxItemOptionsPerStore": {
            "title": "Max items with options per store",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "0 = every customisable item. Caps the option requests (and the run time) on very large menus.",
            "default": 0
          },
          "groceryCatalog": {
            "title": "Full grocery catalogue",
            "type": "boolean",
            "description": "For grocery, convenience, alcohol, pharmacy and retail stores: walk every aisle for the whole catalogue (thousands of products) instead of the storefront shelves. Included in the details price.",
            "default": false
          },
          "maxItemsPerStore": {
            "title": "Max menu items per store",
            "minimum": 0,
            "type": "integer",
            "description": "0 = every item. Keeps rows small for very large catalogues.",
            "default": 0
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "stores",
              "menuItems",
              "reviews"
            ],
            "type": "string",
            "description": "Stores: one row per store with its menu and reviews nested. Menu items: one row per menu item (store fields on each). Reviews: one row per review. The price is per store in every format.",
            "default": "stores"
          },
          "compact": {
            "title": "Compact rows",
            "type": "boolean",
            "description": "Only the key columns (id, name, link, type, phone, address, coordinates, cuisines, price level, rating, delivery time and fee, open, item count, currency, emails) - for spreadsheets.",
            "default": false
          },
          "maxResults": {
            "title": "Max stores per address / search",
            "minimum": 0,
            "type": "integer",
            "description": "Stores to deliver for each address x search term (the main cost control). 0 = every store Uber Eats lists there.",
            "default": 100
          },
          "maxItems": {
            "title": "Max stores in total",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on stores delivered in the run (all addresses, searches and links together). Empty = no total cap."
          },
          "coverage": {
            "title": "Coverage",
            "enum": [
              "point",
              "cityGrid"
            ],
            "type": "string",
            "description": "One point: the stores Uber Eats shows at the address (about 300). City-wide: a grid of points around the address, merged and de-duplicated, for a whole city.",
            "default": "point"
          },
          "radiusKm": {
            "title": "City-wide radius (km)",
            "minimum": 1,
            "maximum": 60,
            "type": "number",
            "description": "Radius of the grid around the address when Coverage is City-wide.",
            "default": 6
          },
          "gridSpacingKm": {
            "title": "Grid spacing (km)",
            "minimum": 1,
            "maximum": 20,
            "type": "number",
            "description": "Distance between grid points; 3 km keeps every store in reach of a point.",
            "default": 3
          },
          "maxFeedPages": {
            "title": "Max list pages per point",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Uber Eats lists 80 stores a page; one point ends after about 4 pages.",
            "default": 25
          },
          "storeType": {
            "title": "Store type",
            "type": "array",
            "description": "Only these kinds of store. With a search term Uber Eats filters itself; without one the store page is read to tell.",
            "items": {
              "type": "string",
              "enum": [
                "RESTAURANT",
                "GROCERY",
                "CONVENIENCE",
                "ALCOHOL",
                "PHARMACY",
                "RETAIL"
              ],
              "enumTitles": [
                "Restaurants",
                "Grocery",
                "Convenience",
                "Alcohol",
                "Pharmacy & health",
                "Retail (flowers, pets, electronics, beauty…)"
              ]
            }
          },
          "diningMode": {
            "title": "Delivery or pickup",
            "enum": [
              "DELIVERY",
              "PICKUP"
            ],
            "type": "string",
            "description": "Pickup lists the stores that offer pickup at the address.",
            "default": "DELIVERY"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "recommended",
              "rating",
              "deliveryTime",
              "distance"
            ],
            "type": "string",
            "description": "Uber Eats' own orders.",
            "default": "recommended"
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "e.g. 4.5. Uber Eats filters at 3, 3.5, 4, 4.5 and 5; the exact value is checked again on each store."
          },
          "offersOnly": {
            "title": "Offers only",
            "type": "boolean",
            "description": "Only stores running a deal (BOGO, $ off, free delivery…).",
            "default": false
          },
          "topEatsOnly": {
            "title": "Top Eats only",
            "type": "boolean",
            "description": "Uber Eats' \"Top Eats\" badge.",
            "default": false
          },
          "maxDeliveryMinutes": {
            "title": "Max delivery time (minutes)",
            "minimum": 0,
            "maximum": 600,
            "type": "integer",
            "description": "e.g. 30. Stores whose delivery estimate ends above it are skipped."
          },
          "maxDeliveryFee": {
            "title": "Max delivery fee",
            "minimum": 0,
            "type": "number",
            "description": "In the local currency, e.g. 2.99. Stores showing a higher fee are skipped (stores that show no fee are kept)."
          },
          "priceBuckets": {
            "title": "Price level",
            "type": "array",
            "description": "e.g. \"$\", \"$$\". Uber Eats leaves the level blank on many stores; those are skipped when this is set.",
            "items": {
              "type": "string"
            }
          },
          "cuisines": {
            "title": "Cuisines / categories",
            "type": "array",
            "description": "Keep stores whose cuisine or category contains one of these words, e.g. \"pizza\", \"thai\", \"vegan\".",
            "items": {
              "type": "string"
            }
          },
          "openOnly": {
            "title": "Open now only",
            "type": "boolean",
            "description": "Only stores open at run time.",
            "default": false
          },
          "withPhoneOnly": {
            "title": "With phone only",
            "type": "boolean",
            "description": "Only stores that list a phone number.",
            "default": false
          },
          "withEmailOnly": {
            "title": "With email only",
            "type": "boolean",
            "description": "Only stores whose EU trader block lists an email (EU countries).",
            "default": false
          },
          "excludeChains": {
            "title": "Exclude chains",
            "type": "boolean",
            "description": "Skip stores that belong to a chain (Uber Eats' parent chain).",
            "default": false
          },
          "newStoresOnly": {
            "title": "New stores only",
            "type": "boolean",
            "description": "Only stores Uber Eats badges as New.",
            "default": false
          },
          "onboardedSince": {
            "title": "Onboarded since",
            "type": "string",
            "description": "Only stores whose Uber Eats onboarding status changed on or after this date (YYYY-MM-DD)."
          },
          "excludeStoreIds": {
            "title": "Exclude stores",
            "type": "array",
            "description": "Store ids or links to skip (in every mode).",
            "items": {
              "type": "string"
            }
          },
          "monitorMode": {
            "title": "Monitor mode (only new stores)",
            "type": "boolean",
            "description": "Deliver only stores that no earlier monitor run delivered (remembered in the named store below). Run it on a schedule: a run that finds nothing new bills nothing.",
            "default": false
          },
          "monitorChanges": {
            "title": "Also deliver changed stores",
            "type": "boolean",
            "description": "With monitor mode: also deliver stores whose rating, menu (prices, items, sold out), price level or phone changed, with the previous values and the changed fields.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor memory name",
            "type": "string",
            "description": "Named key-value store that remembers delivered stores. Use one name per schedule.",
            "default": "uber-eats-monitor"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "local"
            ],
            "type": "string",
            "description": "English: Uber Eats' English site in every country. Local: the country's own language (menus and reviews as the store wrote them).",
            "default": "en"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Requests in flight at once.",
            "default": 6
          },
          "maxRequestRetries": {
            "title": "Max retries",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries of a request that timed out or failed.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: the container's own IP, then Apify datacenter proxy, then residential (store pages only) if Uber Eats refuses the one before. Give your own proxy to use only that.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}