Uber Eats Full Menu Scraper
Pricing
from $2.00 / 1,000 results
Uber Eats Full Menu Scraper
[๐ฐ $2 / 1K] Extract full Uber Eats menus โ every item with price, description, photo and add-on options โ plus store ratings, reviews, hours, address, cuisines and delivery fees. Scrape by store URL or discover every store around any address.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Pull complete Uber Eats menus and store profiles at scale โ every item with its price, description, photo and availability, plus ratings, review samples, opening hours, cuisines, delivery fees and ETAs. Discover stores around any street address or exact coordinates, or paste store links you already have. Built for restaurant chains, food delivery analysts, CPG brands and menu-data teams who need the whole catalog in one clean table without clicking through Uber Eats one aisle at a time.
Why This Scraper?
- The complete catalog, not the slice the page shows you โ a supermarket store page loads roughly 75 products in a browser. This scraper walked all 9 catalog pages of one and returned 707 unique products, deduplicated by item ID so the "Featured items" carousel never double-counts.
- Two record types in one dataset โ flat
storerows and flatmenuItemrows joined bystoreId. The menu lands ready for Sheets, BI or SQL with no unnesting step, and the Apify Console gives each type its own tab. - 10 live-verified languages โ English, French, Spanish, Portuguese, Dutch, German, Polish, Swedish, Japanese and Traditional Chinese, each confirmed to return genuinely localized store text and menu section names, not an English page with a flag on it.
- 7 store types, and you only pay for what you keep โ All stores, Restaurants, Grocery, Convenience, Alcohol, Pharmacy and Retail. Store types are resolved before any menu is collected: one run narrowed 97 nearby stores to 78 restaurants, and the 19 excluded stores were never collected or charged for.
- Delivery and pickup return different data, and both are one setting away โ the same store reported a 170โ185 minute delivery ETA and an 8โ18 minute pickup ETA, with different fees and availability. Run both to compare.
- Price analytics computed on every store row โ min, max and average item price, plus price coverage, photo coverage and customization coverage ratios, so you can rank a market without post-processing.
- Full option trees on demand โ sizes, toppings and add-ons with their upcharges, min/max selection rules, sold-out flags and nested child options for items whose choices branch.
- 458 stores found around a single address โ discover by street address, by exact latitude/longitude, by cuisine keyword, or by pasting store links, and mix all four in one run. Duplicate links across country versions of the site collapse to one store.
- Reviews with author, text and date, at no extra charge โ capped per store and filterable by a "since" date. Reviews arrive with the store profile, so tightening these settings never costs you anything and never slows a run down.
Use Cases
Competitive Menu Intelligence
- Track a competitor's full menu, prices and photo coverage week over week
- Compare identical dishes across every location of a chain in one city
- Spot new item launches, seasonal specials and quiet delisting
- Benchmark average item price and price coverage against a whole neighborhood
Restaurant & Delivery Analytics
- Build a census of every store delivering to a postcode, with rating and review counts
- Measure how delivery ETAs and fees vary by time of day and by neighborhood
- Compare delivery versus pickup economics on the same set of stores
- Rank markets by store density, cuisine mix and price tier
CPG & Retail Product Tracking
- Pull full grocery, convenience and pharmacy catalogs โ hundreds to thousands of SKUs per store
- Monitor shelf presence and pricing of your products across retail partners
- Track sold-out and unavailable flags to detect stockouts
- Capture pack sizes and sold-by-unit rules from item quantity data
Market Expansion & Site Selection
- Map cuisine gaps around a candidate address before signing a lease
- Size an addressable market by counting stores and menu items in a radius
- Compare the same brand's pricing across countries using localized store pages
- Identify high-rating, high-review-count operators worth partnering with
Menu Data & Content Operations
- Populate menu databases, food apps and recipe tools with structured item data
- Collect item photos and descriptions for catalog enrichment
- Feed nutrition, allergen or dietary tagging pipelines with clean item text
- Keep third-party listings in sync with what a store actually publishes
Getting Started
Simplest โ one store, full menu
{"startUrls": ["https://www.ubereats.com/store/antons-falafel-house/GgaiuGrKTAWJ-S2dHk9EFQ"]}
Discover restaurants around an address
{"address": "350 5th Ave, New York","storeType": "RESTAURANTS","maxStores": 25,"maxMenuItemsPerStore": 100}
Cheap store census โ profiles only, no menus
{"address": "Brooklyn, NY","storeType": "ALL","maxStores": 0,"maxResults": 500,"includeMenu": false,"includeReviews": true,"maxReviewsPerStore": 5}
Advanced โ localized grocery catalog with options and recent reviews
{"latitude": "48.8566","longitude": "2.3522","searchQuery": "supermarchรฉ","storeType": "GROCERY","diningMode": "DELIVERY","maxStores": 5,"maxResults": 5000,"includeMenu": true,"maxMenuItemsPerStore": 2000,"includeItemCustomizations": true,"includeReviews": true,"maxReviewsPerStore": 20,"reviewsSince": "2025-01-01","language": "fr","maxConcurrency": 5}
Input Reference
Store URLs
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array | 1 sample store | Uber Eats store page links, e.g. https://www.ubereats.com/store/name/abc123. Works with any country version of the site. Leave empty to discover stores by address instead. |
Discover Stores by Location
| Parameter | Type | Default | Description |
|---|---|---|---|
address | string | "" | Find stores that deliver to this place, e.g. Brooklyn, NY or 350 5th Ave, New York. |
latitude | string | "" | Exact latitude of the delivery point, e.g. 40.7128. Overrides the address. Only works paired with longitude. |
longitude | string | "" | Exact longitude of the delivery point, e.g. -74.0060. Overrides the address. Only works paired with latitude. |
searchQuery | string | "" | Only find stores matching this cuisine or dish, e.g. sushi, pizza, vegan. Empty returns every store around the address. |
storeType | select | ALL | All stores, Restaurants only, Grocery stores, Convenience stores, Alcohol, Pharmacy, or Retail. Excluded stores are never collected or charged for. |
diningMode | select | DELIVERY | Delivery or Pickup. Prices, fees and store availability differ between the two. |
maxStores | integer | 3 | How many stores to take from the address search. 0 takes every store found, up to a ceiling of 500 per run. Does not limit pasted store links. |
Menu
| Parameter | Type | Default | Description |
|---|---|---|---|
includeMenu | boolean | true | Collect every menu item with price, description and photo. Turn off for a fast, cheap list of store profiles only. |
maxMenuItemsPerStore | integer | 0 | Stop after this many items per store. 0 collects the complete menu, up to a ceiling of 200 catalog pages (roughly 21,000 items) per store. |
includeItemCustomizations | boolean | false | Also collect sizes, toppings, add-ons and their extra charges. Option lookups get up to 4 minutes per store; anything still queued after that is returned without options. Makes runs substantially slower โ see Tips before switching it on. |
Run Size Limit
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 10000 | Stop the whole run once this many results have been saved, counting store profiles and menu items together. Your spending safety net for large grocery searches. 0 means no limit. As the run approaches the limit the remaining room is shared between the stores still being collected, so the last few can return a shortened menu. |
Reviews
| Parameter | Type | Default | Description |
|---|---|---|---|
includeReviews | boolean | true | Include customer review samples with each store, plus the overall rating and rating count. |
maxReviewsPerStore | integer | 10 | Keep at most this many reviews per store. 0 keeps every review the store page provides. |
reviewsSince | string | "" | Skip reviews older than this date. Empty keeps all of them. |
Language & Speed
| Parameter | Type | Default | Description |
|---|---|---|---|
language | select | en | English, French, Spanish, Portuguese, Dutch, German, Polish, Swedish, Japanese, or Chinese (Traditional). Applies to store text and menu section names. |
maxConcurrency | integer | 5 | How many stores to work through at once. Lower it if you see failures; raise it for faster runs on large store lists. |
Output
Every run produces flat rows with a recordType field: one store row per store, and one menuItem row per item. Both carry storeId and storeUrl so you can join them.
store rows
{"recordType": "store","storeId": "1a06a2b8-6aca-4c05-89f9-2d9d1e4f4415","storeSlug": "antons-falafel-house","storeUrl": "https://www.ubereats.com/store/antons-falafel-house/GgaiuGrKTAWJ-S2dHk9EFQ?diningMode=DELIVERY","name": "Anton's Falafel House","description": "Use your Uber account to order delivery from Anton's Falafel House.","storeType": "Restaurant","rating": 4.7,"reviewCount": 600,"reviewCountText": "600+","priceBucket": "$","priceLevel": 1,"cuisines": ["Mediterranean", "Middle Eastern", "Healthy"],"phone": "+14155550142","address": {"street": "1901 Ocean Ave","city": "San Francisco","region": "CA","postalCode": "94127","country": "US"},"addressText": "1901 Ocean Ave, San Francisco, CA 94127","latitude": 37.7264,"longitude": -122.4677,"hours": [{ "days": "Mon - Fri", "opens": "11:00", "closes": "21:00", "menu": "Main Menu" }],"isOpen": true,"isOrderable": true,"diningMode": "DELIVERY","language": "en","deliveryEtaMinutes": { "min": 20, "max": 35 },"deliveryFee": "$0.49 Delivery Fee","imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/hero.jpeg","currencyCode": "USD","menuSectionCount": 6,"menuItemCount": 31,"analytics": {"itemCount": 31,"priceCoverage": 1.0,"imageCoverage": 0.871,"customizationCoverage": 0.613,"minPrice": 2.5,"maxPrice": 18.95,"averagePrice": 11.42},"reviews": [{"reviewId": "5f2c1d90-3a71-4b02-9f19-77c0a0d4e881","authorName": "Jessica R.","text": "Best falafel in the neighborhood, always hot on arrival.","createdAt": "2024-01-29T18:22:11.000Z"}],"scrapedAt": "2026-07-31T13:04:22Z"}
Store identity & ratings
| Field | Type | Description |
|---|---|---|
recordType | string | Always store for these rows |
storeId | string | Uber Eats store identifier โ join key for menu item rows |
storeSlug | string | URL slug of the store |
storeUrl | string | Canonical store page link, including the dining mode used |
name | string | Store name |
description | string | Store summary text from the page |
storeType | string | Merchant category, e.g. Restaurant, Grocery, Pharmacy |
rating | number | Average star rating |
reviewCount | integer | Rating count as a number, parsed from values like 600+ |
reviewCountText | string | The rating count exactly as Uber Eats displays it |
priceBucket | string | Price tier glyphs, e.g. $$ |
priceLevel | integer | Price tier as a 1โ4 number โ use this to compare across countries |
cuisines | array | Cuisine tags applied to the store |
Location & availability
| Field | Type | Description |
|---|---|---|
phone | string | Store phone number when published |
address | object | street, city, region, postalCode, country |
addressText | string | Full address as a single line |
latitude | number | Store latitude |
longitude | number | Store longitude |
hours | array | Opening blocks: days, opens, closes, menu (24-hour clock) |
isOpen | boolean | Whether the store was open at collection time |
isOrderable | boolean | Whether orders were being accepted |
diningMode | string | DELIVERY or PICKUP used for this row |
language | string | Language code the store page was read in |
deliveryEtaMinutes | object | min and max wait in minutes for the selected mode |
deliveryFee | string | Fee badge text, e.g. $0.49 Delivery Fee |
Menu summary & analytics
| Field | Type | Description |
|---|---|---|
imageUrl | string | Store hero photo |
currencyCode | string | Currency of all prices on this store's items |
menuSectionCount | integer | Number of menu sections found |
menuItemCount | integer | Number of unique items collected for this store |
analytics | object | itemCount, minPrice, maxPrice, averagePrice, priceCoverage, imageCoverage, customizationCoverage |
reviews | array | Review samples: reviewId, authorName, text, createdAt |
scrapedAt | string | ISO timestamp of collection |
menuItem rows
{"recordType": "menuItem","storeId": "1a06a2b8-6aca-4c05-89f9-2d9d1e4f4415","storeName": "Anton's Falafel House","storeUrl": "https://www.ubereats.com/store/antons-falafel-house/GgaiuGrKTAWJ-S2dHk9EFQ?diningMode=DELIVERY","itemId": "8d31c7f0-51ae-4a6c-b2f8-c0a1e2b39d44","name": "Chicken Shawarma Plate","description": "Marinated chicken with rice, salad, hummus and pita.","sectionName": "Main Menu","subsectionName": "Plates","price": 16.95,"priceFormatted": "$16.95","currencyCode": "USD","imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/item.jpeg","isAvailable": true,"isSoldOut": false,"hasCustomizations": true,"customizations": [{"title": "Choose your sauce","minPermitted": 1,"maxPermitted": 2,"options": [{ "name": "Garlic Sauce", "price": 0.0, "isSoldOut": false, "defaultQuantity": 1 },{ "name": "Extra Tahini", "price": 0.75, "isSoldOut": false }]}],"quantityInfo": { "minPermitted": 1, "maxPermitted": 20, "increment": 1, "soldByUnit": "QUANTITY" },"itemUrl": "https://www.ubereats.com/store/antons-falafel-house/GgaiuGrKTAWJ-S2dHk9EFQ?mod=quickView&modctx=...","scrapedAt": "2026-07-31T13:04:22Z"}
Item core
| Field | Type | Description |
|---|---|---|
recordType | string | Always menuItem for these rows |
storeId | string | Store identifier โ join key back to the store row |
storeName | string | Store name, denormalized for easy filtering |
storeUrl | string | Store page link |
itemId | string | Unique item identifier, used to deduplicate repeated items |
itemUrl | string | Direct link that opens this item's quick view on the store page |
name | string | Item name as written by the merchant |
description | string | Item description as written by the merchant |
sectionName | string | Top-level menu or catalog section |
subsectionName | string | Sub-section or aisle within the section |
scrapedAt | string | ISO timestamp of collection |
Price, stock & options
| Field | Type | Description |
|---|---|---|
price | number | Item price as a decimal number |
priceFormatted | string | Price exactly as displayed, including currency symbol |
currencyCode | string | Currency of the price |
imageUrl | string | Item photo |
isAvailable | boolean | Whether the item was orderable |
isSoldOut | boolean | Whether the item was marked sold out |
hasCustomizations | boolean | Whether the item has an option tree, even when options were not collected |
customizations | array | Option groups: title, minPermitted, maxPermitted, and options with name, price, isSoldOut, defaultQuantity and nested childOptions |
quantityInfo | object | minPermitted, maxPermitted, increment, soldByUnit โ how the item is sold |
Tips for Best Results
- Cap large catalogs before you run them. A restaurant returns around 40 items; a supermarket returned 707. Leave
maxMenuItemsPerStoreat0for restaurants, but set a cap for grocery, pharmacy and retail stores unless you genuinely want every SKU. - Keep
maxResultsset when you raisemaxStores.maxStoresandmaxMenuItemsPerStoreeach cap one dimension;maxResultscaps the two multiplied together, which is the number you actually pay for. The10000default is deliberately generous โ lower it for a trial run, and set it to0only when you have already measured the store count you are asking for. - Leave
includeItemCustomizationsoff unless you need option data. Around 6 in 10 items at a typical restaurant are customizable, and each one has to be looked up individually โ it is the single biggest thing that slows a run down. - Use
includeMenu: falsefor market censuses. One address search found 458 stores; profiles-only turns that into 458 rows with ratings, addresses, cuisines and fees, instead of hundreds of thousands of item rows. - Run the same store twice, once per dining mode. Delivery and pickup are genuinely different datasets โ one store showed a 170โ185 minute delivery wait against an 8โ18 minute pickup wait, with different fees.
- Compare price tiers with
priceLevel, notpriceBucket. The glyphs render in the currency of the browsing language, so a US store can displayโฌโฌ. The 1โ4 number is the portable signal across countries. - Item names stay in the merchant's own language. The language setting translates store text and menu section names; item names and descriptions are merchant-written, and the deeper pages of very large catalogs fall back to English section names.
- Latitude and longitude only work as a pair. Supplying one without the other is ignored and the run falls back to the address. Use coordinates when an address is ambiguous or when you want to sample a precise delivery point.
- Outside the US, give coordinates rather than a typed address. Uber Eats' own address lookup leans towards places near where the request appears to come from, so a European or Asian street can come back unmatched. A latitude and longitude pair is exact everywhere โ
48.8606, 2.3376puts you on the Rue de Rivoli in Paris. An address that cannot be matched is reported plainly and nothing is collected for it, so you are never charged for the wrong city. - Reviews are a recent sample, not full history. A tight
reviewsSincedate can legitimately return zero reviews for a store that has hundreds of ratings โ widen the date before assuming something failed.
Pricing
From $2.00 per 1,000 results โ flat pay-per-result, with store rows and menu item rows billed at the same rate. No compute or time-based charges โ you pay per result, plus a small fixed per-run start fee. Bronze, Silver and Gold subscribers pay progressively less; the table shows total cost at each discount tier.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 | $0.24 | $0.23 | $0.22 | $0.20 |
| 1,000 | $2.40 | $2.25 | $2.15 | $2.00 |
| 10,000 | $24.00 | $22.50 | $21.50 | $20.00 |
| 100,000 | $240.00 | $225.00 | $215.00 | $200.00 |
A "result" is any row in the output dataset โ one per store and one per menu item. Stores excluded by your store type filter are never collected and never billed. Platform fees depend on your Apify plan.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n โ Workflow automation
- Google Sheets โ Direct spreadsheet export
- Slack / Email โ Notifications on new results
- Webhooks โ Custom API integrations
- Apify API โ Full programmatic access
Legal & Ethical Use
This actor collects publicly available store and menu information for legitimate market research, competitive analysis and menu data operations. Users are responsible for complying with applicable laws and Uber Eats' Terms of Service. Review text and reviewer display names are personal data in some jurisdictions โ handle them accordingly, and do not use collected data for spam, harassment, price fixing or any illegal purpose.