UberEats Menu Scraper
Pricing
from $2.00 / 1,000 results
UberEats Menu Scraper
Scrape UberEats: list restaurants near a location (lat/lng) and pull a store's full menu — items, prices, descriptions, and modifier groups. Feed and store modes; one row per menu item for price monitoring.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Find restaurants near any location and pull their full menus — items, prices, descriptions, ratings, delivery estimates, and optional add-on choices. Perfect for price monitoring, menu intelligence, competitor tracking, and ghost-kitchen discovery.
Why use this actor
- No account, no login, no API key — give it a location or a restaurant link and run.
- Two ways to work: list every restaurant near a point on the map, or pull the complete menu of specific restaurants you already have.
- Real prices and menu detail — item names, descriptions, prices, sold-out status, photos, and (optionally) the full add-on / customization choices for each item.
- Store intelligence — rating, price level, cuisine tags, phone number, address, coordinates, delivery time estimates, and current offers.
- One row per menu item (best for price tracking) or one row per store with the menu nested — your choice.
- Clean, structured output, automatic retries, runs on a schedule, exports to JSON / CSV / Excel. No scrapers or browsers to babysit.
How it works
- Pick a mode: feed (restaurants near a location) or store (menus for specific restaurants).
- For feed mode, give one or more locations (latitude/longitude). For store mode, paste restaurant links or ids.
- The actor lists the nearby restaurants and/or reads each restaurant's full menu.
- Each restaurant or menu item becomes one row in your dataset. Turn on add-ons to also capture every customization choice.
You never manage scrapers, browsers, or blocks — just provide locations or restaurants and read the results.
Input
Mode: Feed — restaurants near a location
{"mode": "feed","locations": [{ "latitude": 40.7128, "longitude": -74.006, "title": "New York" }],"includeMenus": false,"localeCode": "us","maxItems": 0,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Mode: Store — full menu of specific restaurants
{"mode": "store","stores": ["https://www.ubereats.com/store/ess-a-bagel-115-broadway/DxhTGkXoURuZAGDJWnguWA"],"itemsAsRows": true,"includeModifiers": false,"location": { "latitude": 40.7128, "longitude": -74.006, "title": "New York" },"localeCode": "us","maxItems": 0}
| Field | Mode | Type | Description |
|---|---|---|---|
mode | — | string | feed (restaurants near a location) or store (menu of specific restaurants). Default feed. |
locations | feed | array | One or more {latitude, longitude, title} objects (or "lat,lng" strings). Defaults to New York. |
includeMenus | feed | boolean | Also pull each nearby restaurant's full menu. Slower. Default false. |
stores | store | array of strings | Restaurant links (https://www.ubereats.com/store/...) or raw store ids. |
itemsAsRows | store | boolean | true (default) = one row per menu item; false = one row per restaurant with the menu nested inside. |
includeModifiers | both | boolean | Also capture each item's add-on / customization choices. Slower. Default false. |
location | store | object | Optional location near the store, used to pick the right market. Defaults to New York. |
localeCode | — | string | Country / locale for results (us, gb, ca, en-US, …). |
maxItems | — | integer | Cap on total rows. 0 = no cap. |
maxConcurrency | — | integer | How many locations / restaurants to process in parallel. Default 3. |
proxyConfiguration | — | object | US residential proxy is recommended and set by default. |
Output
Feed mode — one row per nearby restaurant:
{"_input": "40.7128,-74.006","_scrapedAt": "2026-07-09T11:09:31Z","_source": "S1-feed","recordType": "STORE","storeUuid": "0f18531a-45e8-511b-9900-60c95a782e58","title": "Ess-a-Bagel","url": "https://www.ubereats.com/store/ess-a-bagel-115-broadway/DxhTGkXoURuZAGDJWnguWA","cityName": "new_york","ratingText": "4.7","ratingAccessibility": "A top rated restaurant with 4.7 out of 5 stars based on more than 260 reviews.","etaText": "12 min","deliveryFeeText": null,"meta": [ { "text": "12 min", "accessibilityText": "Delivered in 12 to 23 min", "badgeType": "ETD" } ],"imageUrl": "https://tb-static.uber.com/prod/image-proc/.../268ee1a1296808aa6eae11eb597de84d.jpeg","favorite": false,"endorsements": null,"signposts": null}
| Field | Type | Description |
|---|---|---|
title | string | Restaurant name. |
url | string | Link to the restaurant on UberEats. |
cityName | string | Market the result belongs to. |
ratingText | string | Star rating. |
etaText | string | Estimated delivery time. |
deliveryFeeText | string | Delivery fee, when shown. |
imageUrl | string | Restaurant photo. |
endorsements / signposts | array | Badges and current offers (e.g. "Great value", "20% off $15+"), when present. |
Store mode — one row per menu item (itemsAsRows: true):
{"_input": "https://www.ubereats.com/store/ess-a-bagel-115-broadway/DxhTGkXoURuZAGDJWnguWA","_scrapedAt": "2026-07-09T15:50:38Z","_source": "S1-store","recordType": "MENU_ITEM","storeUuid": "0f18531a-45e8-511b-9900-60c95a782e58","storeTitle": "Ess-a-Bagel (115 Broadway)","storeUrl": "https://www.ubereats.com/store/ess-a-bagel-115-broadway/","currencyCode": "USD","storeRating": 4.7,"phoneNumber": "+16464750675","priceBucket": "$","isOpen": true,"cuisineList": ["American", "Breakfast and Brunch", "Desserts"],"address": "115 Broadway, New York, NY 10006","city": "New York","latitude": 40.708729,"longitude": -74.0110446,"categoryTitle": "Featured items","itemUuid": "3ecbc6ff-9065-52b8-8885-d562a92ac762","title": "Morning Classic","itemDescription": "Your choice of bagel with bacon, egg, & American cheese","price": 1208,"priceFormatted": 12.08,"priceText": "$12.08","imageUrl": "https://tb-static.uber.com/prod/image-proc/.../d03e52b3c8af19d8fa8222e23efd9cfa.jpeg","isSoldOut": false,"isAvailable": true,"hasCustomizations": true}
| Field | Type | Description |
|---|---|---|
storeTitle / storeUrl | string | Restaurant name and link. |
currencyCode | string | Currency of the prices. |
storeRating | number | Restaurant star rating. |
phoneNumber | string | Restaurant phone number. |
priceBucket | string | Price level ($, $$, …). |
isOpen | boolean | Whether the restaurant is currently open. |
cuisineList | array | Cuisine tags. |
address / city / latitude / longitude | string / number | Restaurant location. |
categoryTitle | string | Menu section the item belongs to. |
title | string | Menu item name. |
itemDescription | string | Item description. |
price | integer | Price in minor units (cents), e.g. 1208. |
priceFormatted | number | Price in major units, e.g. 12.08. |
priceText | string | Price as shown on the site (e.g. "Priced by add-ons"). |
isSoldOut / isAvailable | boolean | Availability of the item. |
hasCustomizations | boolean | Whether the item has add-on choices (captured when includeModifiers is on). |
With itemsAsRows: false, store mode instead emits one row per restaurant (recordType: "STORE_MENU") with the full menu nested under menuItems[].
On failure the actor writes a row with _error and _errorDetail rather than silently skipping.
Notes & limits
- US residential proxy is recommended (and set by default) for reliable cloud runs; pick the country that matches your target market.
- Menu availability varies by country and time of day — a restaurant closed for the current daypart may return fewer items or an unavailable menu. Use a
localeCode/locationmatching the target market. - Prices are given both in minor units (
price, e.g. cents) and major units (priceFormatted).