๐ดUber Eats Scraper [PPR]
Pricing
$5.00 / 1,000 restaurants
๐ดUber Eats Scraper [PPR]
Pay per result - Fast and cost-effective Uber Eats Scraper requiring just a search query and location or using stores urls. Instantly retrieve comprehensive restaurant data, including names, phone, ratings, locations, and menus. Seamlessly integrates, offering a highly efficient data solution.
Pricing
$5.00 / 1,000 restaurants
Rating
5.0
(3)
Developer
borderline
Maintained by CommunityActor stats
11
Bookmarked
604
Total users
66
Monthly active users
1.4 days
Issues response
6 days ago
Last modified
Categories
Share
๐ Uber Eats Scraper Actor | (PPR) Pay per results version
๐ Uber Eats Scraper extracts comprehensive restaurant data from Uber Eats in two ways: by address (or address + query) or by store URLs. Perfect for gathering restaurant insights, menus, and pricing.
โจ Features
-
๐ Option A โ By address or address + query: Provide a delivery address (required). Optionally add a query (e.g. cuisine, restaurant name) and a storeType (Uber Eats vertical tab: restaurants, grocery, pharmacy, etc.).
-
๐ Option B โ By URLs: Provide a list of Uber Eats store page URLs to scrape those restaurants directly. When urls is not empty, query, address, and storeType are ignored.
-
๐ช Store type filter: Target restaurants only, grocery, convenience, pharmacy, and other Uber Eats category tabsโwithout mixing unrelated verticals in your dataset.
-
๐ Rich Detailed Data: For each restaurant you get:
- ๐ Restaurant Name & Sanitized Title
- โญ Ratings & Customer Reviews
- ๐ Complete Address (latitude, longitude)
- ๐ Full Menus & Pricing Details
- ๐ Opening Hours & Availability
- ๐ Contact Information (Phone Number & Emails)
- ๐ผ๏ธ High-Quality Images (Logo & Hero Image)
- ๐ Distance & Delivery ETA
- ๐ง Open/Closed Status & Messages
-
๐ป Integrations: Google Sheets, Slack, Zapier & Make.
What does the Uber Eats Scraper do?
Extract restaurant details and menus from Uber Eats, with one restaurant per result. Search near an address, at coordinates, or scrape a list of store URLs. Menu items stay nested inside the restaurant row.
Use the results to compare menus and prices, research restaurant markets, track availability, or build a restaurant directory. Apify provides API access, schedules, dataset exports, integrations and run monitoring. Start with one location and a small maxRows value to check coverage.
What data can I extract?
The scraper returns information Uber Eats makes available for each store. Missing source information can be absent or null; menu and promotion collections can be empty.
| Fields | Meaning |
|---|---|
uuid, title, sanitizedTitle, url | Store identity, name and public URL |
slug, citySlug, merchantType | Store and city identifiers, merchant category |
location | Address, city, postcode, country and store coordinates |
phoneNumber, emails | Contact information exposed by Uber Eats; emails are often empty |
cuisineList, categories, categoriesLink | Cuisines and category links |
priceBucket | Store price category, from $ to $$$$ |
parentChain, isChain | Parent chain {uuid, name} when available, and chain flag |
rating | Existing rating fields plus exactValue and ratingCount; counts can be strings such as "5,000+" |
isOpen, isOrderable, isLost | Open now, accepting orders, and whether the store has left the platform |
storeAvailablityStatus, closedMessage | Availability details reported by Uber Eats |
etaRange, etaMinutes | Original ETA text and numeric {min, max} in minutes, or null |
fareBadge, deliveryFee | Original fee text and {amount, currencyCode, text}, or null; amount is in major currency units, e.g. 2.99 USD |
hours, workingHoursTagline | Opening-hour ranges and readable summary |
promotions | Non-empty promotion text supplied by Uber Eats |
menu, featuredItems | Menu sections/items and featured items: prices, images, descriptions and availability |
analytics | Menu counts, price statistics and content coverage |
logoImageUrl, heroImageUrl | Store branding and header image |
distance, supportedDiningModes | Distance information and supported ordering modes |
storeReviews, featuredReviews | Review snippets in the store response; not a paginated review export |
diningMode | Requested DELIVERY or PICKUP mode |
searchAddress | Location producing this result; coordinates use Uber's resolved full address. Direct URL mode has no search address |
scrapedAt | UTC ISO timestamp of extraction |
What does menu analytics measure?
analytics is computed from the exported menu, excluding the separate featured-items list. It includes totalSections, totalItems, itemsWithPrice, itemsWithImage, itemsWithDescription, itemsWithCustomizations and itemsSoldOut.
minPrice, maxPrice and averagePrice use the same units as menu-item price: cents for USD/EUR, so 1299 means $12.99 or โฌ12.99. Missing prices are excluded; zero is valid. Price aggregates are null when no usable price exists.
priceCoverage, imageCoverage, descriptionCoverage and customizationCoverage are fractions from 0 to 1, using total menu items as the denominator. Empty menus have zero coverage. Customization coverage measures the presence of customizable items; enable getMenuCustomizations to retrieve option trees.
How do I scrape Uber Eats?
- Open the Input tab and choose one of the location or URL options below.
- Set the locale and optional store type or search query.
- Set
maxRowsand the run's spending limit, then start the Actor. - Inspect the Output tab. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
How do I search near one address?
{"address": "1600 Pennsylvania Avenue NW, Washington, DC","query": "pizza","storeType": "RESTAURANTS","locale": "en-US","addressCountry": "US","maxRows": 20}
Include the city and country for reliable resolution. Omit query to browse nearby stores.
How do I use coordinates or pickup mode?
{"latitude": 48.8566,"longitude": 2.3522,"locale": "fr-FR","addressCountry": "FR","diningMode": "PICKUP","maxRows": 10}
Provide both coordinates: latitude โ90 to 90 and longitude โ180 to 180. Uber resolves the point to a location. DELIVERY is the default; pickup requests use PICKUP availability and results. Coverage depends on the market and store.
How do I scrape known store URLs?
{"urls": ["https://www.ubereats.com/fr/store/mcdonalds-paris-alesia/eHoH6Q_2RRikwI-xKk7qaQ","https://www.ubereats.com/es-en/store/kebaba-haus-%26-pizzeria-bulevar-de-peguera-17/"],"locale": "fr-FR","getMenuCustomizations": false}
Direct URLs override all location inputs, query and storeType. maxRows does not limit URL mode. Filters, dining mode, exclusions and the run's paid-item limit still apply. Invalid non-Uber-Eats URLs are dropped with a warning; input with no valid URL is rejected.
Which inputs are available?
| Input | Default / accepted values | Behavior |
|---|---|---|
address | Non-empty string | One search location |
latitude, longitude | Numeric coordinate pair | Overrides both text-location inputs |
urls | Non-empty list of store URLs | Overrides discovery inputs |
locale | en-US | Language/region; see Input tab for supported locales |
addressCountry | US | Country code used for address resolution; set it to the country being searched |
query | Omitted | Cuisine, store name or keyword |
storeType | ALL | Uber Eats vertical/category tab |
maxRows | 1,500 if omitted | Successful rows per address; 0 requests all available subject to the paid-item limit. Input form prefills 100 |
diningMode | DELIVERY | DELIVERY or PICKUP |
excludeStores | Empty | Store UUIDs to skip in every mode, including URLs; case-insensitive |
getMenuCustomizations | false | Retrieve modifier groups and choices; increases duration and payload size |
Excluded stores are not saved, billed, or counted toward maxRows. Location precedence is urls โ coordinates โ address, with warnings when lower-priority inputs are ignored.
Which store types support a query?
| Store type | With a query | Without a query |
|---|---|---|
ALL | Search across categories | Home feed |
RESTAURANTS | Restaurant search | Restaurant-focused feed |
GROCERY | Shop search | Grocery browse feed |
SHOP | Grocery and retail search | General browse behavior |
ALCOHOL | Alcohol search | General browse behavior |
CONVENIENCE, PHARMACY, PRESCRIPTIONS, PERSONAL_CARE, BABY, SPECIALITY_FOODS, PET_SUPPLIES, FLOWERS, RETAIL, BEAUTY, ELECTRONICS | Query ignored | Category browse feed |
Aliases: HEALTH means PHARMACY; UNKNOWN means ALL. Set RESTAURANTS explicitly for restaurant-only searches.
What does an output row look like?
This shortened, illustrative row shows the structure and units. Actual values depend on Uber Eats.
{"uuid": "bff91760-2d67-54d7-91db-9f6f875086a6","title": "Example Pizza","url": "https://www.ubereats.com/store/example-pizza/v_kXYC1nVNeR259vh1CGpg","slug": "example-pizza","citySlug": "washington-dc","priceBucket": "$$","parentChain": null,"isChain": false,"emails": [],"currencyCode": "USD","rating": { "ratingValue": 4.4, "reviewCount": "700+", "exactValue": 4.4077, "ratingCount": "700+" },"isOpen": true,"isOrderable": true,"etaRange": "Delivered in 35 to 55 min","etaMinutes": { "min": 35, "max": 55 },"fareBadge": "Delivery Fee: $0.99","deliveryFee": { "amount": 0.99, "currencyCode": "USD", "text": "Delivery Fee: $0.99" },"workingHoursTagline": "Open until 10:00 PM","promotions": [],"diningMode": "DELIVERY","searchAddress": "1600 Pennsylvania Avenue NW, Washington, DC","scrapedAt": "2026-09-05T12:00:00.000Z","menu": [{"catalogName": "Pizza","catalogItems": [{"uuid": "b7ac95d8-11ea-4917-bc31-dd20c2407f29","title": "Margherita","itemDescription": "Tomato, mozzarella and basil","price": 1299,"priceTagline": "$12.99","isSoldOut": false,"hasCustomizations": true}]}],"featuredItems": [],"analytics": {"totalSections": 1, "totalItems": 1,"itemsWithPrice": 1, "itemsWithImage": 0, "itemsWithDescription": 1,"itemsWithCustomizations": 1, "itemsSoldOut": 0,"minPrice": 1299, "maxPrice": 1299, "averagePrice": 1299,"priceCoverage": 1, "imageCoverage": 0,"descriptionCoverage": 1, "customizationCoverage": 1}}
How much does it cost to scrape Uber Eats?
The Actor's listed price is $5 per 1,000 restaurant rows, or $0.005 per restaurant. The menu is included in that row; menu items are not separate billable results. Check the Pricing tab for the current rate.
| Successful restaurant rows | Result charge at this rate |
|---|---|
| 100 | $0.50 |
| 1,000 | $5.00 |
| 100 stores | $0.50 |
Use the run's spending/paid-item limit as the global budget. maxRows limits restaurant rows for the selected location or URLs. Duplicate and excluded stores within a run produce no additional rows. Separate runs can return and bill the same restaurant again. Account credits and applicable platform charges are shown in Apify Console.
What are the limitations?
- Results reflect stores visible to Uber Eats for the chosen location and mode. They are not a complete census;
maxRowsis a ceiling, not a guaranteed count. - Opening status, fees, promotions and ETA change with location and time. Unrecognized ETA/fee text produces null numeric metrics while the original text remains available.
- Some stores omit menu sections, prices, chain metadata, ratings or contacts. Empty emails do not imply that a restaurant has no email address.
- Searches can return zero rows. The Actor currently marks zero-result runs as failed, including searches where nothing matches.
- Removed stores and temporary access failures can prevent retrieval. Direct-target failures go into the separate
errorsdataset rather than billable restaurant placeholders. - Menus remain nested. Flat menu rows, paginated reviews, automatic change detection and external website contact enrichment are not included.
- Full customizations require additional requests and can make runs substantially longer.
Frequently asked questions
Can I call the scraper through an API?
Use the Actor's API tab for authenticated run examples, pass the same input JSON, and retrieve results from the run's default dataset. Keep tokens in your application's secret storage.
Can AI agents or MCP clients use this Actor?
Invoke the Actor through Apify's API from an agent workflow. Apify also provides an Actors MCP server; configure it for this Actor and your account. This Actor does not expose a separate custom MCP server. Set small row and spending limits when allowing an agent to start runs.
Can I schedule exports to Sheets or other tools?
Use Apify schedules for recurring runs and the Integrations tab for destinations such as Google Sheets, Slack, Make or Zapier. Retain uuid and scrapedAt when comparing exports over time. Change detection belongs in your downstream workflow.
Are prices in dollars or cents?
Menu-item price and analytics price aggregates use the source menu's minor units, such as cents for USD/EUR. deliveryFee.amount uses major units. Read currencyCode alongside either value; missing data is not a zero price.
Can I use the data for my project?
Check the source website's terms and the rules applicable to your intended use. Treat contact details and review content responsibly; this tool does not grant rights to republish third-party content or contact people without an appropriate basis.
Where can I get help?
Open an issue in the Issues tab, ideally with the run URL, input location and expected result. Remove secrets from examples. Contact the developer there for custom requirements.