๐ŸดUber Eats Scraper [PPR] avatar

๐ŸดUber Eats Scraper [PPR]

Pricing

$5.00 / 1,000 restaurants

Go to Apify Store
๐ŸดUber Eats Scraper [PPR]

๐Ÿด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

borderline

Maintained by Community

Actor stats

11

Bookmarked

603

Total users

67

Monthly active users

1.4 days

Issues response

5 days ago

Last modified

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.

FieldsMeaning
uuid, title, sanitizedTitle, urlStore identity, name and public URL
slug, citySlug, merchantTypeStore and city identifiers, merchant category
locationAddress, city, postcode, country and store coordinates
phoneNumber, emailsContact information exposed by Uber Eats; emails are often empty
cuisineList, categories, categoriesLinkCuisines and category links
priceBucketStore price category, from $ to $$$$
parentChain, isChainParent chain {uuid, name} when available, and chain flag
ratingExisting rating fields plus exactValue and ratingCount; counts can be strings such as "5,000+"
isOpen, isOrderable, isLostOpen now, accepting orders, and whether the store has left the platform
storeAvailablityStatus, closedMessageAvailability details reported by Uber Eats
etaRange, etaMinutesOriginal ETA text and numeric {min, max} in minutes, or null
fareBadge, deliveryFeeOriginal fee text and {amount, currencyCode, text}, or null; amount is in major currency units, e.g. 2.99 USD
hours, workingHoursTaglineOpening-hour ranges and readable summary
promotionsNon-empty promotion text supplied by Uber Eats
menu, featuredItemsMenu sections/items and featured items: prices, images, descriptions and availability
analyticsMenu counts, price statistics and content coverage
logoImageUrl, heroImageUrlStore branding and header image
distance, supportedDiningModesDistance information and supported ordering modes
storeReviews, featuredReviewsReview snippets in the store response; not a paginated review export
diningModeRequested DELIVERY or PICKUP mode
searchAddressLocation producing this result; coordinates use Uber's resolved full address. Direct URL mode has no search address
scrapedAtUTC 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?

  1. Open the Input tab and choose one of the location or URL options below.
  2. Set the locale and optional store type or search query.
  3. Set maxRows and the run's spending limit, then start the Actor.
  4. 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?

InputDefault / accepted valuesBehavior
addressNon-empty stringOne search location
latitude, longitudeNumeric coordinate pairOverrides both text-location inputs
urlsNon-empty list of store URLsOverrides discovery inputs
localeen-USLanguage/region; see Input tab for supported locales
addressCountryUSCountry code used for address resolution; set it to the country being searched
queryOmittedCuisine, store name or keyword
storeTypeALLUber Eats vertical/category tab
maxRows1,500 if omittedSuccessful rows per address; 0 requests all available subject to the paid-item limit. Input form prefills 100
diningModeDELIVERYDELIVERY or PICKUP
excludeStoresEmptyStore UUIDs to skip in every mode, including URLs; case-insensitive
getMenuCustomizationsfalseRetrieve 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 typeWith a queryWithout a query
ALLSearch across categoriesHome feed
RESTAURANTSRestaurant searchRestaurant-focused feed
GROCERYShop searchGrocery browse feed
SHOPGrocery and retail searchGeneral browse behavior
ALCOHOLAlcohol searchGeneral browse behavior
CONVENIENCE, PHARMACY, PRESCRIPTIONS, PERSONAL_CARE, BABY, SPECIALITY_FOODS, PET_SUPPLIES, FLOWERS, RETAIL, BEAUTY, ELECTRONICSQuery ignoredCategory 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 rowsResult 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; maxRows is 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 errors dataset 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.