{
  "openapi": "3.0.1",
  "info": {
    "title": "Uber Eats Scraper — Menus, Reviews & Leads",
    "description": "Uber Eats scraper for restaurants and menus. Search by city or paste store URLs. One row per store with priced dishes, ratings, reviews, phone, hours, and optional emails plus a lead score. Filter by locale or skip stores you already have. Delivery or pickup. JSON, CSV or Excel.",
    "version": "1.0",
    "x-build-id": "UpKMT24ysF5PXWkMj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~uber-eats-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~uber-eats-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~uber-eats-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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": {
          "address": {
            "title": "Search location (address or city)",
            "type": "string",
            "description": "Discover stores by location instead of pasting store URLs. Enter a city or full address (e.g. \"Chicago, IL\" or \"1407 N Main St, Blacksburg VA\"). The actor geocodes it and pulls every matching Uber Eats store, then scrapes each one. Leave empty if you're using Start URLs."
          },
          "searchQuery": {
            "title": "Search keyword (optional)",
            "type": "string",
            "description": "Optional dish/cuisine keyword, e.g. \"pizza\", \"sushi\", \"tacos\". Leave empty to BROWSE every store at the location (all verticals). With a keyword, results are filtered to that term."
          },
          "matchStoreName": {
            "title": "Match store name",
            "type": "boolean",
            "description": "Use this when the Search keyword is the name of a specific restaurant or shop you want to find (e.g. \"La La Land\"). Returns the first store whose name matches the keyword (one store per run); Uber Eats search otherwise fills the results with other nearby stores. If no store with that name is on Uber Eats near the address, the run succeeds with no results. Ignored when the Search keyword is empty.",
            "default": false
          },
          "storeType": {
            "title": "Store type / vertical (best-effort)",
            "enum": [
              "ALL",
              "RESTAURANTS",
              "GROCERY",
              "SHOP",
              "CONVENIENCE",
              "PHARMACY",
              "PRESCRIPTIONS",
              "PERSONAL_CARE",
              "BABY",
              "SPECIALITY_FOODS",
              "PET_SUPPLIES",
              "FLOWERS",
              "RETAIL",
              "BEAUTY",
              "ELECTRONICS",
              "ALCOHOL"
            ],
            "type": "string",
            "description": "Preferred Uber Eats vertical for the location search. ALL is recommended; the narrower verticals are best-effort and Uber may still return mixed results. Only applies to location search.",
            "default": "ALL"
          },
          "diningMode": {
            "title": "Dining mode",
            "enum": [
              "DELIVERY",
              "PICKUP"
            ],
            "type": "string",
            "description": "Delivery or pickup feed for location search.",
            "default": "DELIVERY"
          },
          "latitude": {
            "title": "Latitude (optional, overrides geocoding)",
            "type": "string",
            "description": "Optional. Provide precise coordinates to skip geocoding (use with longitude). Useful when a city name is ambiguous."
          },
          "longitude": {
            "title": "Longitude (optional, overrides geocoding)",
            "type": "string",
            "description": "Optional. Provide precise coordinates to skip geocoding (use with latitude)."
          },
          "locale": {
            "title": "Uber Eats locale",
            "type": "string",
            "description": "Optional locale prefix for store URLs with no locale yet (en-US, en-GB, es-MX). Leave empty to keep the site default."
          },
          "addressCountry": {
            "title": "Country code (geocode)",
            "type": "string",
            "description": "Optional ISO 3166-1 alpha-2 country (US, GB, MX) to pin Nominatim geocoding when a city name exists in more than one country."
          },
          "excludeStores": {
            "title": "Exclude store IDs",
            "type": "array",
            "description": "Skip these store UUIDs or path IDs (the last segment of /store/{slug}/{id}) so a city re-run does not scrape stores you already have.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional. Public Uber Eats store URLs to scrape directly (https://www.ubereats.com/store/{slug}/{id} or store-browse-uuid links). Use this instead of, or in addition to, location search.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Results Limit",
            "type": "integer",
            "description": "Maximum number of listings to scrape per run. Set to 0 for unlimited. Default 10000; free-tier accounts are capped at 50 stores per run regardless.",
            "default": 10000
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 100
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 100
          },
          "includeItemCustomizations": {
            "title": "Include All Menu Option",
            "type": "boolean",
            "description": "When enabled, fetches Uber Eats item option trees such as sizes, toppings, add-ons, and nested suboptions from the item detail API. This increases run time and request volume.",
            "default": false
          },
          "reviewsSince": {
            "title": "Reviews Since (ISO date)",
            "type": "string",
            "description": "Optional. Only return reviews with a createdAt timestamp greater than or equal to this ISO date (e.g. 2025-01-01 or 2025-01-01T00:00:00Z). Useful for incremental scheduled runs to avoid re-charging for reviews you already have."
          },
          "maxReviews": {
            "title": "Max Reviews per Store",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap on the number of reviews returned per store. Applied after reviewsSince filtering. Set to 0 to disable. Uber Eats only shows a small sample of written reviews per store (usually about 10 to 20), and many stores show none at all even with thousands of star ratings. This setting limits that sample; it cannot return more reviews than Uber Eats displays on the store page."
          },
          "enrichEmails": {
            "title": "Enrich with contact emails (experimental, billed per email)",
            "type": "boolean",
            "description": "If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Billed per contact email found; only charged when an email is returned, never for misses.",
            "default": false
          },
          "detectTech": {
            "title": "Detect restaurant tech stack / POS (lead-gen)",
            "type": "boolean",
            "description": "If enabled (requires \"Enrich with contact emails\"), fetches each restaurant's own website and detects its tech: online-ordering / POS (Toast, Square, Clover, ChowNow, Olo…), reservations (OpenTable, Resy, Tock…), site platform, and analytics. Adds a techStack object. Great for sales prospecting.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}