Uber Eats Scraper - Stores, Menus, Reviews & Prices
Pricing
from $0.90 / 1,000 stores
Uber Eats Scraper - Stores, Menus, Reviews & Prices
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.
Pricing
from $0.90 / 1,000 stores
Rating
0.0
(0)
Developer
Top Api
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Features
Share
What does Uber Eats Scraper do?
Uber Eats Scraper extracts stores from Uber Eats - restaurants, grocery, convenience, alcohol, pharmacy and retail - for any delivery address, city, coordinates, search term or Uber Eats link. Each store row carries its phone, address, opening hours, rating, delivery time and fee, the full menu with prices, the reviews Uber Eats shows and, in the EU, the store's legal trader block. Built for restaurant-tech sales teams, delivery-market analysts and menu-price trackers who need Uber Eats data on a schedule without copying it by hand.
Uber Eats Scraper - Uber Eats API - Uber Eats menu scraper - Uber Eats restaurant scraper
- Every store Uber Eats lists at an address: the same list a customer sees, 80 stores a page, with Uber Eats' own sort and filters
- The full store page in one row: phone, address, hours, the whole menu (85 items per store on average in our 100-store test), reviews, chain and price level
- EU trader block parsed into fields: legal name, address, email, phone, register, registration and VAT number, managing director - free with the store details
- City-wide coverage: a grid of delivery points around an address, merged and de-duplicated by store id
- No login, cookies or Uber Eats API key: give an address, a search term or a link
- Pay only for delivered stores: no start fee; filtered, duplicate and unreadable stores are never charged
- Export anywhere: JSON, CSV, Excel, XML; schedules, webhooks, Make, Zapier, n8n, Google Sheets; callable from AI agents through the Apify API and MCP server
What data can you get from Uber Eats?
| 🏪 Store name, id (`uuid`) and link | 🍽️ Store type (restaurant, grocery, convenience, alcohol, pharmacy, retail) | ☎️ Phone number |
| 📍 Full address, city, postcode, coordinates | ⭐ Rating, exact score and rating count | 💲 Price level ($, $$…) |
| ⏱️ Delivery time estimate (min / max minutes) | 🚚 Delivery fee, surge flag, service fee | 🎁 Offers (BOGO, $ off, free delivery) |
| 🕒 Opening hours per day and per menu | 📖 Full menu: sections, items, prices, photos, descriptions | 🔥 Like %, "#1 most liked", calories, sold out |
| 💬 Reviews: text, first name, date | 🔗 Chain (parent brand) and cuisines | 📊 Menu analytics: item count, min / max / average price |
| 🇪🇺 EU trader block: legal name, email, register, registration and VAT number | 🧼 UK hygiene rating, NYC health-grade link | 🧩 Item options and nutrition (add-on) |
On our 100-store test run at a Washington, DC address (2026-10-28): phone 98%, rating 95%, opening hours 99%, menu 99% (8,477 items), reviews on 78% of stores (2,072 reviews), chain 81%, price level 63%, delivery fee 58%.
How to scrape Uber Eats with Uber Eats Scraper
- Create a free Apify account - $5 of monthly credit, no card needed.
- Open Uber Eats Scraper and click Try for free.
- Type a delivery address or city into Delivery addresses or cities (or paste store links into Uber Eats links), add search terms if you want, and set Max stores per address / search.
- Click Start. Stores stream into the dataset as they are read.
- Open the Storage tab and Export as JSON, CSV or Excel - or put the input on a schedule.
⬇️ Input
| Field | What it does | Default |
|---|---|---|
locations | Delivery addresses, postcodes or cities ("Times Square, New York", "75008 Paris") | - |
coordinates | Delivery points as "latitude,longitude" | - |
searchQueries | Search terms ("pizza", "pharmacy", "McDonald's"); each runs at each address | every store at the address |
startUrls | Store links (any country), store ids, /search, /feed, /city, /category links | - |
sitemapCountries | Two-letter codes: store links from Uber Eats' store sitemaps, no address needed | - |
country | Country of your addresses (Uber Eats' address search prefers the caller's country) | - |
includeDetails | The store page on each row: phone, address, hours, menu, reviews, trader block (add-on) | on |
includeMenu / includeReviews | Nest the menu / reviews in the store row | on |
maxReviewsPerStore, reviewsSince | Cap and date window for reviews | all |
includeItemOptions, maxItemOptionsPerStore | Option groups + nutrition of customisable items (add-on) | off |
groceryCatalog, maxItemsPerStore | Walk every aisle of grocery-type stores; cap items per store | off |
outputFormat | stores, menuItems (one row per item) or reviews (one row per review) | stores |
compact | Only the key columns, for spreadsheets | off |
maxResults | Stores per address x search term (main cost control; 0 = all) | 100 |
maxItems | Stores in the whole run | no cap |
coverage, radiusKm, gridSpacingKm | cityGrid = grid of points around the address | point |
storeType, diningMode, sortBy | Uber Eats' own store type, delivery / pickup, sort | all, delivery, recommended |
minRating, offersOnly, topEatsOnly, maxDeliveryMinutes, maxDeliveryFee | Uber Eats' own filters, re-checked on each store | - |
priceBuckets, cuisines, openOnly, withPhoneOnly, withEmailOnly, excludeChains, newStoresOnly, onboardedSince, excludeStoreIds | Filters checked before anything is charged | - |
monitorMode, monitorChanges, monitorStoreName | Deliver only new (and changed) stores since the last run; with store details on, a store delivered before without its store page comes once more with it (monitorStatus details) | off |
language | English site or the country's own language | English |
maxConcurrency, maxRequestRetries, proxyConfiguration | Advanced | 6, 3, Apify proxy |
Field names of other Uber Eats actors are accepted too (address, query, urls, maxRows, getMenuCustomizations, addressCountry, latitude / longitude…), so switching is a copy-paste.
Input examples
Every store Uber Eats delivers to an address, full rows:
{"locations": ["1600 Pennsylvania Avenue, Washington DC"],"maxResults": 100}
The best-rated sushi in London, listing rows only (cheapest):
{"locations": ["10 Downing Street, London"],"country": "GB","searchQueries": ["sushi"],"sortBy": "rating","includeDetails": false,"maxResults": 200}
A whole city, grocery stores with their full catalogue:
{"locations": ["Paris"],"country": "FR","coverage": "cityGrid","radiusKm": 8,"storeType": ["GROCERY"],"groceryCatalog": true,"maxResults": 500}
Store links, with item options and the menu one row per item:
{"startUrls": [{ "url": "https://www.ubereats.com/store/gregorys-coffee-1000-vermont/AOLOcvgyR2uaxcXi9nC76Q" }],"includeItemOptions": true,"outputFormat": "menuItems"}
⬆️ Output
One row per store (trimmed: one menu item and one review shown; real row from the 2026-10-28 test run):
{"uuid": "00e2ce72-f832-476b-9ac5-c5e2f670bbe9","title": "Gregorys Coffee (1000 Vermont)","url": "https://www.ubereats.com/store/gregorys-coffee-1000-vermont/AOLOcvgyR2uaxcXi9nC76Q","storeType": "RESTAURANT","phoneNumber": "+18772129983","addressText": "1000 Vermont, Washington DC, DC 20005","latitude": 38.9028536,"longitude": -77.0338531,"currencyCode": "USD","cuisineList": ["Coffee and Tea", "Juice and Smoothies", "Pastry", "Breakfast and Brunch", "Desserts"],"priceBucket": "$$","parentChain": { "uuid": "a20d44bb-a37b-4eb2-8f9d-93ddc1971c00", "name": "gregorys coffee" },"rating": { "ratingValue": 4.6, "reviewCount": "180+", "exactValue": 4.5701, "ratingCount": 180 },"isOpen": true,"etaRange": "13–32 Min","etaMinutes": { "min": 13, "max": 32 },"deliveryFee": { "amount": 0, "currencyCode": "USD", "text": "$0 delivery fee (new users)" },"workingHoursTagline": "Open until 3:00 PM","menus": [{ "title": "Menu", "hours": "6:00 AM – 3:00 PM", "isTop": true }],"promotions": ["$0 delivery fee (new users)", "Buy 1, get 1", "Buy 1, get 1 free"],"distance": "0.4 mi","menu": [{"catalogName": "Featured items","menuName": "Menu","catalogItems": [{"uuid": "827aa8ca-5ecd-5d8b-bb51-68421a7d867c","title": "Sausage, Egg, & Cheese Muffin","itemDescription": "Pork sausage, eggs, swiss cheese & peppercorn dressing on an english muffin","price": 960,"priceTagline": "$9.60","isSoldOut": false,"hasCustomizations": true,"popularityHints": ["#1 most liked"],"promotionTags": ["Buy 1, get 1 free"]}]}],"menuItemCount": 111,"menuSectionCount": 20,"storeReviews": [{"reviewText": "Shop stayed open a few more minutes past closing just so I could get my order! Thank you!!","eaterName": "Toby L.","createdAt": "2025-05-13T00:00:00Z"}],"detailsIncluded": true,"searchAddress": "1600 Pennsylvania Ave NW, Washington, DC 20500, USA","searchRank": 13}
Menu prices are in the currency's minor units (960 = $9.60), with currencyCode on every row.
An EU store adds the trader block (real values from a Munich store read on 2026-10-28):
{"trader": {"legalName": "Feinkost Käfer GmbH","tradingName": "Feinkost Käfer","address": "Prinzregentenstr. 73, 81675, München","email": "a.scherpke@feinkost-kaefer.de","phone": "+49894168310","register": "Amtsgericht München","registrationNumber": "HRB 90753","vatNumber": "811258423","managingDirector": "Michael Käfer"},"emails": ["a.scherpke@feinkost-kaefer.de"]}
The full field list is in the Output tab (81 fields). With includeDetails: false a row carries the listing fields only: id, name, link, photo, rating and count, delivery time and fee, offers, coordinates, open / closed state, new / exclusive badges.
💰 How much does it cost to scrape Uber Eats?
Pay per event, no start fee, no monthly rent:
| Event | Price | When |
|---|---|---|
| Store | $0.0009 ($0.90 per 1,000) | every store row delivered |
| Store details | $0.0009 ($0.90 per 1,000) | the row carries the store page (phone, address, hours, menu, reviews, trader block) - on by default |
| Item options | $0.0027 per store | the store got at least one option group (includeItemOptions) |
So a full store row is $0.0018 ($1.80 per 1,000), a listing row $0.0009. The menu, reviews, grocery catalogue, trader block and the menu-item / review output formats are inside those prices.
Measured on the platform (2026-10-28, Apify cost to us in brackets):
| Run | Stores | Time | You pay |
|---|---|---|---|
| 10 stores at Times Square (the prefill) | 10 full rows | 6.5 s | $0.018 |
| Every store at a Washington, DC address, capped at 100 | 100 full rows | 37 s | $0.18 |
| Every store Uber Eats lists at Times Square, listing rows | 422 listing rows | 10 s | $0.38 |
| Washington, DC city grid (19 points, 6 km) | 736 full rows | 16 min | $1.32 |
| 3 sushi stores in London as menu-item rows | 199 item rows | 6 s | $0.0054 |
| Store links with item options (US, FR, DE) | 3 stores, 2 with options | 5 s | $0.0108 |
Set a maximum cost per run in Apify and the actor stops cleanly at it: it delivers only stores whose events all fit.
🔁 Run it on a schedule
Turn on Monitor mode, give the memory a name and schedule the task (Apify Console → Schedules, e.g. daily). Each run delivers only stores no earlier run delivered; Also deliver changed stores adds stores whose rating, menu prices / items / sold-out state, price level or phone changed, with previousStats and changedFields. A run that finds nothing new bills nothing.
{"locations": ["Times Square, New York"],"monitorMode": true,"monitorChanges": true,"monitorStoreName": "nyc-times-square","maxResults": 0}
From code: POST https://api.apify.com/v2/acts/topapi~uber-eats-scraper/run-sync-get-dataset-items?token=<TOKEN> with the input as the body, or the Apify MCP server from an AI agent.
Data limits (measured)
- One address lists the stores Uber Eats shows there: 132 stores at a Washington, DC address, 205 at Times Square on the first page; a point ends after about 300. Use
coverage: cityGridfor a whole city. - Delivery time, fee, open state and offers depend on the address and the time of the run. Store links read without any address carry no delivery fields (add an address in
locationsand it is used for the links too). - The EU trader block is shown only to a customer in the store's country; the actor reads EU store links from inside the store's country automatically (one extra request when the link has no country prefix).
- Reviews are the ones Uber Eats shows on the store (0 to about 110: text, first name, date). Uber Eats shows no star rating per review on the web.
- Item options and grocery aisles are read from the container or datacenter IP only: when a run has had to move to residential IPs, those stores are delivered without options (and not charged for them).
- Volume per run: each run uses one IP per step (container IP, then one Apify datacenter session, then one residential session) and moves up only when Uber Eats refuses the step before. In our city-grid test the container IP read 697 store pages before Uber Eats answered "too many requests" and the run went on from the datacenter session. If every step is refused, the run stops and delivers what it already read.
- The full grocery catalogue is request-heavy (one big store took 151 requests for 6,855 products) and Uber Eats checks such walks sooner, so a run reads the whole catalogue of a few stores; a walk that was cut keeps the aisles read and says
groceryCatalogComplete: false. - Search results carry no matched dishes: Uber Eats' web search answer lists stores, not the items that matched.
- Italy and Brazil returned no restaurants in our 2026-10-20 test (Uber Eats does not serve restaurants there).
FAQ
Do I need an Uber Eats account or API key?
No. The actor reads what any visitor sees, with no login, cookie or key.
Which countries work?
Every country Uber Eats serves: the US, Canada, Mexico, the UK, Ireland, France, Germany, Spain, the Netherlands, Belgium, Japan, Taiwan, Australia, New Zealand, Chile and more. Set country for addresses outside the US, or give coordinates.
How do I get a whole city?
Set coverage to cityGrid and a radiusKm. The actor reads a grid of points around the address and merges them by store id, so a store is delivered and charged once.
How do I get only the stores I have not seen yet?
Monitor mode remembers delivered stores in a named store; schedule it and each run returns only new (and, if you want, changed) stores.
Can I get the menu as one row per item?
Yes: outputFormat: menuItems. Each item row carries the store's name, link, type, city, country and currency. reviews gives one row per review. The price is still per store.
What is the EU trader block?
EU law makes marketplaces show who the seller is. Uber Eats shows it on EU stores; the actor splits it into legal name, address, email, phone, register, registration number, VAT number and managing director.
Why is the delivery fee empty on some stores?
Uber Eats shows a fee only for some store / address / time combinations and often shows a new-user offer instead (58% of stores carried one in our DC test).
Does it get item options (sizes, toppings)?
Yes, with includeItemOptions: every option group with its choices, extra prices, min / max and the item's nutrition. It costs $0.0027 per store that gets at least one group.
Can I use my own proxy?
Yes, in proxyConfiguration. The actor then uses only that proxy.
What happens if Uber Eats blocks the run?
The run moves one step up (container IP → datacenter → residential) when Uber Eats refuses; it never answers a challenge. If every step is refused with nothing delivered, the run ends FAILED and nothing is charged; with some stores delivered it ends SUCCEEDED with a warning in the status.
Other actors
- Google Maps Reviews Scraper - reviews of the same restaurants on Google Maps
- Yelp Reviews Scraper - Yelp ratings, owner replies and photos
- Google Maps Photos Scraper - every photo and video of a place on Google Maps