Uber Eats Full Menu & Reviews Scraper avatar

Uber Eats Full Menu & Reviews Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Uber Eats Full Menu & Reviews Scraper

Uber Eats Full Menu & Reviews Scraper

Uber Eats stores → JSON per URL: menuSections & menuItems (prices, currency, images; optional add-on trees), ratingValue, reviewCount, reviewSamples, address, phone, hours, isOpen/isOrderable, cuisines, analytics, hero images, SEO title/description, URLs, scrapedAt.

Pricing

from $2.50 / 1,000 results

Rating

5.0

(2)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

14

Monthly active users

19 hours ago

Last modified

Share

Overview

Extract structured restaurant and menu data from Uber Eats store pages: store identity, SEO metadata, ratings, address, hours, cuisines, full menu (JSON-LD sections and a flattened item list), optional customization trees, review samples, and delivery hints. Each input URL produces one rich dataset item suitable for price monitoring, menu syndication, or market research.

The Uber Eats Store Scraper is an Apify actor that loads public Uber Eats store detail URLs, parses embedded application state and JSON-LD, and returns a single JSON object per store with menu items, images, and analytics-style rollups.

With this scraper, you get complete menu coverage where exposed in the page payload (sections, item names, descriptions, prices, images), plus store-level context such as open/closed status, rating summary, phone number, and formatted address.

Key metrics include per-item prices, aggregate menu analytics (min/max/average price, image coverage, customization stats), and review text samples hydrated from the store page state.

The actor is built for reliable high-concurrency fetching using Crawlee with an HTTP client tuned for real browser fingerprints, with proxy support for stable runs.

Whether you are aggregating menus across brands, comparing pricing by location, or building a food-data product, this actor returns consistent JSON you can pipe into databases or spreadsheets.


Features

  • Store page extraction:

    • Accepts standard Uber Eats store URLs (with locale path or /store/{slug}/{id} form)
    • Resolves canonical URLs, titles, descriptions, and hero imagery
  • Comprehensive menu data:

    • menuSections: Schema.org Menu/MenuSection/MenuItem structure from JSON-LD where present
    • menuItems: Flattened list with section names, prices, currency, images, UUIDs, and (optionally) full customization groups/options
  • Ratings, reviews, and trust signals:

    • ratingValue and reviewCount from structured data or embedded state
    • reviewSamples: reviewer-visible comments and dates from embedded storeReviews
  • Location & operations:

    • Postal address object and addressText, phoneNumber, hours, isOpen / isOrderable, closedMessage
    • cuisineList, currencyCode, priceBucket, FAQ count, ETA range when detectable
  • Analytics & diagnostics:

    • analytics object summarizing section count, item counts, price and image coverage, customization coverage
    • HTTP statusCode, contentType, bodyLength, optional saved htmlFile reference, scrapedAt timestamp
  • Efficient crawling:

    • Cheerio-based parsing with Impit HTTP client (Firefox fingerprint, HTTP/3)
    • Configurable concurrency, retries, and Apify proxy integration

How to Use

  1. Set Up: Ensure you have an Apify account and access to the Apify platform.
  2. Provide Input Data: Add one or more Uber Eats store URLs to startUrls.
  3. Adjust Scraper Settings: Configure settings like maxItems, maxConcurrency, and maxRequestRetries to optimize performance.
  4. Run the Scraper: Execute the actor on the Apify platform.
  5. Download Results: Export the scraped data in your preferred format (JSON, CSV, Excel).

Usage Limitations

Free Users: Non-paying users are limited to scraping 50 listings per run. To access unlimited scraping and all features, please upgrade to a paid Apify account.

Paid Users: Enjoy unlimited scraping, multiple start URLs, and full access to all scraper features.


Input Configuration

To use the scraper, configure the input parameters as follows:

{
"startUrls": [
{
"url": "https://www.ubereats.com/store/jersey-mikes-subs-creekside/B5-ImzTAQf2En_RCiqU62A"
},
{
"url": "https://www.ubereats.com/en-US/store/jersey-mikes-subs-creekside/B5-ImzTAQf2En_RCiqU62A"
}
],
"maxItems": 300,
"maxConcurrency": 100,
"minConcurrency": 1,
"maxRequestRetries": 100,
"includeItemCustomizations": false,
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

Input Fields Explanation

  • Start URLs (startUrls): Public Uber Eats restaurant store URLs. Supported shapes include:
    • https://www.ubereats.com/store/{store-slug}/{store-id}
    • https://www.ubereats.com/{locale}/store/{store-slug}/{store-id} (locale prefix, e.g. en-US)
  • Max Items (maxItems): Maximum number of stores to process per run (one dataset item per successful store page). Default is 100.
  • Max Concurrency (maxConcurrency): Maximum number of pages processed simultaneously. Default is 100.
  • Min Concurrency (minConcurrency): Minimum number of pages processed simultaneously. Default is 1.
  • Max Request Retries (maxRequestRetries): Number of retries for failed requests. Default is 100.
  • Include item customizations (includeItemCustomizations): When true, enriches menuItems with full customization group/option payloads (much larger output).
  • Proxy Configuration (proxy): Settings for reliable and anonymous scraping. Supports custom proxy URLs.

Output Structure

The scraper produces structured JSON output: one object per store URL with nested menu data, metadata, and optional debug fields.

Sample Data

The record below is the first item from data.json (Jersey Mike's Subs example). The full export is very large; for readability this sample keeps all scalar fields and analytics as in the source object, shows the first four heroImageUrls, the first two menuSections with two dishes each, and three menuItems chosen from items without heavy customization payloads. Counts such as menuItemCount and analytics reflect the full scrape—not the shortened arrays.

{
"source": "ubereats_detail_html",
"url": "https://www.ubereats.com/store/jersey-mikes-subs-creekside/B5-ImzTAQf2En_RCiqU62A?diningMode=PICKUP&pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMjE0MDclMjBOJTIwTWFpbiUyMFN0JTIyJTJDJTIycmVmZXJlbmNlJTIyJTNBJTIyaGVyZSUzQWFmJTNBc3RyZWV0c2VjdGlvbiUzQWlRanFNei05UUYwT1FIYXRmOU9qR0QlM0FDZ2dJQkNDZDc3YXVBeEFCR2dReE5EQTMlMjIlMkMlMjJyZWZlcmVuY2VUeXBlJTIyJTNBJTIyaGVyZV9wbGFjZXMlMjIlMkMlMjJsYXRpdHVkZSUyMiUzQTM3LjI0NzUzJTJDJTIybG9uZ2l0dWRlJTIyJTNBLTgwLjQxNTEyJTdE&surfaceName=",
"restaurantUrl": "https://www.ubereats.com/store/jersey-mikes-subs-creekside/B5-ImzTAQf2En_RCiqU62A",
"shopName": "jersey-mikes-subs-creekside",
"shopId": "B5-ImzTAQf2En_RCiqU62A",
"message": "success: menu found.",
"hasMenu": true,
"menuType": "Menu",
"storeId": "B5-ImzTAQf2En_RCiqU62A",
"storeUuid": "079f889b-34c0-41fd-849f-f4428aa53ad8",
"storeSlug": "jersey-mikes-subs-creekside",
"citySlug": "houston",
"locale": null,
"htmlLocale": "en-US",
"originalUrl": "https://www.ubereats.com/store/jersey-mikes-subs-creekside/B5-ImzTAQf2En_RCiqU62A?diningMode=PICKUP&pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMjE0MDclMjBOJTIwTWFpbiUyMFN0JTIyJTJDJTIycmVmZXJlbmNlJTIyJTNBJTIyaGVyZSUzQWFmJTNBc3RyZWV0c2VjdGlvbiUzQWlRanFNei05UUYwT1FIYXRmOU9qR0QlM0FDZ2dJQkNDZDc3YXVBeEFCR2dReE5EQTMlMjIlMkMlMjJyZWZlcmVuY2VUeXBlJTIyJTNBJTIyaGVyZV9wbGFjZXMlMjIlMkMlMjJsYXRpdHVkZSUyMiUzQTM3LjI0NzUzJTJDJTIybG9uZ2l0dWRlJTIyJTNBLTgwLjQxNTEyJTdE&surfaceName=",
"canonicalUrl": "https://www.ubereats.com/store/jersey-mikes-subs-creekside/B5-ImzTAQf2En_RCiqU62A",
"loadedUrl": "https://www.ubereats.com/store/jersey-mikes-subs-creekside/B5-ImzTAQf2En_RCiqU62A?diningMode=PICKUP&pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMjE0MDclMjBOJTIwTWFpbiUyMFN0JTIyJTJDJTIycmVmZXJlbmNlJTIyJTNBJTIyaGVyZSUzQWFmJTNBc3RyZWV0c2VjdGlvbiUzQWlRanFNei05UUYwT1FIYXRmOU9qR0QlM0FDZ2dJQkNDZDc3YXVBeEFCR2dReE5EQTMlMjIlMkMlMjJyZWZlcmVuY2VUeXBlJTIyJTNBJTIyaGVyZV9wbGFjZXMlMjIlMkMlMjJsYXRpdHVkZSUyMiUzQTM3LjI0NzUzJTJDJTIybG9uZ2l0dWRlJTIyJTNBLTgwLjQxNTEyJTdE&surfaceName=",
"title": "Jersey Mike's Subs (Creekside)",
"seoTitle": "Order Jersey Mike's Subs (Creekside) - Menu & Prices - Houston Delivery | Uber Eats",
"description": "Use your Uber account to order delivery from Jersey Mike's Subs (Creekside) in Houston. Browse the menu, view popular items, and track your order.",
"image": "https://tb-static.uber.com/prod/image-proc/processed_images/dc10f9e54832652cfaea6214699a22b8/19ec62ba51fde35ba0aff5b84321c5af.jpeg",
"heroImageUrls": [
"https://tb-static.uber.com/prod/image-proc/processed_images/dc10f9e54832652cfaea6214699a22b8/19ec62ba51fde35ba0aff5b84321c5af.jpeg",
"https://tb-static.uber.com/prod/image-proc/processed_images/dc10f9e54832652cfaea6214699a22b8/c67d558c633281f9c71fc6a90ef470ae.jpeg",
"https://tb-static.uber.com/prod/image-proc/processed_images/dc10f9e54832652cfaea6214699a22b8/8681e511c0910e0052cb155c50f01f89.jpeg",
"https://tb-static.uber.com/prod/image-proc/processed_images/dc10f9e54832652cfaea6214699a22b8/6ea4f72e303000fbf403bbb36f971f85.jpeg"
],
"ratingValue": 4.9,
"reviewCount": 1000,
"phoneNumber": "+13468085967",
"address": {
"@type": "PostalAddress",
"addressLocality": "Spring",
"addressRegion": "TX",
"postalCode": "77389",
"addressCountry": "US",
"streetAddress": "25640 Kuykendahl Rd"
},
"addressText": "25640 Kuykendahl Rd, Spring, TX, 77389, US",
"pllStatus": "200",
"faqCount": 8,
"currencyCode": "USD",
"priceBucket": "$",
"cuisineList": [
"Sandwich",
"American",
"Bar Food"
],
"isOrderable": true,
"isOpen": true,
"closedMessage": "",
"hours": [
{
"dayRange": "Every Day",
"sectionHours": [
{
"startTime": 600,
"endTime": 1230,
"sectionTitle": ""
}
]
}
],
"menuSections": [
{
"@type": "MenuSection",
"name": "Free with $15 purchase",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "#7 Turkey and Provolone",
"description": "Provolone and Turkey. Served Mike's Way with onions, lettuce, tomato, vinegar, oil, oregano, and salt.",
"offers": {
"@type": "Offer",
"price": "11.94",
"priceCurrency": "USD"
},
"imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/e092aa3249393c24f6edf40d7ca2af39/c67fc65e9b4e16a553eb7574fba090f1.jpeg"
},
{
"@type": "MenuItem",
"name": "Mike's Hot Italian",
"description": "Ham, salami & pepperoni with melted provolone cheese. Topped with grilled onions, lettuce, tomato and Hot Chopped Pepper Relish.",
"offers": {
"@type": "Offer",
"price": "10.73",
"priceCurrency": "USD"
},
"imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/56eae964cde0acab6c6fc55337064832/c67fc65e9b4e16a553eb7574fba090f1.jpeg"
}
]
},
{
"@type": "MenuSection",
"name": "Cold Subs",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "#7 Turkey and Provolone",
"description": "Provolone and Turkey. Served Mike's Way with onions, lettuce, tomato, vinegar, oil, oregano, and salt.",
"offers": {
"@type": "Offer",
"price": "11.94",
"priceCurrency": "USD"
},
"imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/e092aa3249393c24f6edf40d7ca2af39/c67fc65e9b4e16a553eb7574fba090f1.jpeg"
},
{
"@type": "MenuItem",
"name": "#13 The Original Italian",
"description": "Provolone, ham, prosciuttini, cappacuolo, salami, and pepperoni. Served Mike's Way with onions, lettuce, tomato, vinegar, oil, oregano, and salt.",
"offers": {
"@type": "Offer",
"price": "13.13",
"priceCurrency": "USD"
},
"imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/209a01090468cd8010e498c5183faea7/c67fc65e9b4e16a553eb7574fba090f1.jpeg"
}
]
}
],
"menuSectionCount": 5,
"menuSubsectionCount": 3,
"menuItemCount": 39,
"menuItems": [
{
"name": "#31 California Chicken Cheese Steak",
"description": "Lettuce, tomato, mayo, and white American cheese (Not available in all locations).",
"section": "Hot Subs",
"price": 12.84,
"currency": "USD",
"imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/d206b0e4d9dfb622a47210018c48e300/c67fc65e9b4e16a553eb7574fba090f1.jpeg",
"hasImage": true
},
{
"name": "Chips",
"description": "",
"section": "Sides, Drinks, & Desserts",
"price": 2.34,
"currency": "USD",
"imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/8e6b2d2fb9564795b2c343c185311f5e/c67fc65e9b4e16a553eb7574fba090f1.jpeg",
"hasImage": true
},
{
"name": "Cookie",
"description": "Fresh-baked and delicious.",
"section": "Sides, Drinks, & Desserts",
"price": 1.8,
"currency": "USD",
"imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/79b1243942eefeb750018d1cae8f654c/c67fc65e9b4e16a553eb7574fba090f1.jpeg",
"hasImage": true
}
],
"analytics": {
"totalSections": 5,
"totalItems": 39,
"itemsWithPrices": 39,
"itemsWithoutPrices": 0,
"minPrice": 1.8,
"maxPrice": 13.86,
"averagePrice": 10.22,
"itemsWithImages": 39,
"itemsWithoutImages": 0,
"imageCoverage": 100,
"priceCoverage": 100,
"itemsWithCustomizations": 31,
"itemsWithoutCustomizations": 8,
"customizationCoverage": 79,
"totalCustomizationGroups": 31,
"totalCustomizationOptions": 2542
},
"reviewSamples": [
{
"eaterName": "Pamela G.",
"reviewText": "The sandwich is just awesome",
"formattedDate": "08/14/24",
"createdAt": "2024-08-14T00:00:00"
},
{
"eaterName": "Michael M.",
"reviewText": "Always good",
"formattedDate": "05/13/24",
"createdAt": "2024-05-13T00:00:00"
},
{
"eaterName": "Chase H.",
"reviewText": "#13 is the best",
"formattedDate": "02/27/24",
"createdAt": "2024-02-27T00:00:00"
},
{
"eaterName": "pamula S.",
"reviewText": "Great sandwiches",
"formattedDate": "02/02/24",
"createdAt": "2024-02-02T00:00:00"
},
{
"eaterName": "Cody P.",
"reviewText": "Delicious!",
"formattedDate": "10/15/23",
"createdAt": "2023-10-15T00:00:00"
},
{
"eaterName": "Jose G.",
"reviewText": "Great Sandwiches and excellent service",
"formattedDate": "10/11/23",
"createdAt": "2023-10-11T00:00:00"
},
{
"eaterName": "yadder M.",
"reviewText": "Delicious",
"formattedDate": "09/18/23",
"createdAt": "2023-09-18T00:00:00"
},
{
"eaterName": "Steve R.",
"reviewText": "Excellent store.",
"formattedDate": "07/22/23",
"createdAt": "2023-07-22T00:00:00"
},
{
"eaterName": "Linda J.",
"reviewText": "The food is amazing and the delicious very driver was wonderful",
"formattedDate": "07/10/23",
"createdAt": "2023-07-10T00:00:00"
},
{
"eaterName": "Sherley S.",
"reviewText": "Delicious",
"formattedDate": "06/24/23",
"createdAt": "2023-06-24T00:00:00"
},
{
"eaterName": "Claudia D.",
"reviewText": "Fresh and delicious",
"formattedDate": "05/27/23",
"createdAt": "2023-05-27T00:00:00"
},
{
"eaterName": "Vanessa G.",
"reviewText": "Delicious!",
"formattedDate": "03/26/23",
"createdAt": "2023-03-26T00:00:00"
},
{
"eaterName": "Mark N.",
"reviewText": "Great",
"formattedDate": "12/29/21",
"createdAt": "2021-12-29T00:00:00"
}
],
"menuItemMentions": 40,
"sectionMentions": 200,
"reviewMentions": 1,
"reactQueryQueryCount": 6,
"catalogItemCount": 35,
"itemCustomizationsEnabled": true,
"customizationItemsCount": 31,
"deliveryFeeText": null,
"etaRange": "16–16 Min",
"statusCode": 200,
"contentType": "text/html; charset=utf-8",
"bodyLength": 1399934,
"htmlFile": "UBER_EATS_DETAIL-B5-ImzTAQf2En_RCiqU62A-1774802693942.html",
"scrapedAt": "2026-03-29T16:45:03.903Z"
}

Output Fields Explanation

Below is an explanation of the fields in the output JSON, categorized for clarity.

1. Identification, URLs & source

  • source: How the row was produced (e.g. ubereats_detail_html).
  • url / originalUrl / loadedUrl / canonicalUrl / restaurantUrl: Request and canonical store links.
  • shopName, shopId, storeId, storeUuid, storeSlug, citySlug: Store identifiers and slug paths.
  • locale, htmlLocale: Language/locale hints from input or HTML.
  • message: Short status such as menu discovery outcome.
  • hasMenu, menuType: Whether a menu was found and its label.

2. Store presentation & SEO

  • title: Store display name.
  • seoTitle, description: Meta title and description.
  • image: Primary image URL.
  • heroImageUrls: Gallery of hero/banner images from the page payload.

3. Ratings, reviews & FAQs

  • ratingValue: Average rating when available.
  • reviewCount: Total ratings count from structured data (may exceed length of embedded review text).
  • reviewSamples: Array of recent public reviews (eater name, text, formatted and ISO dates).
  • faqCount: Number of FAQ entries when exposed.

4. Location, contact & cuisines

  • address: JSON-LD PostalAddress object.
  • addressText: Single-line formatted address.
  • phoneNumber: Store phone when present.
  • cuisineList: Cuisine tags (e.g. Sandwich, American).
  • currencyCode, priceBucket: Currency and price band indicator.

5. Ordering state & hours

  • isOrderable, isOpen: Whether the storefront accepts orders and is open.
  • closedMessage: User-visible closed copy when applicable.
  • hours: Structured opening hours (day ranges and section hours).

6. Menu (structured & flat)

  • menuSections: JSON-LD-style menu sections with nested MenuItem entries (name, description, offers price, imageUrl).
  • menuSectionCount, menuSubsectionCount, menuItemCount: Counts for sections, subsections, and items.
  • menuItems: Denormalized list of items (name, description, section, price, currency, image, UUIDs, optional customizations when enabled).

7. Analytics & embedded-state hints

  • analytics: Aggregates such as total items, min/max/average price, image and price coverage, customization coverage and option counts.
  • menuItemMentions, sectionMentions, reviewMentions: Raw substring occurrence counts in HTML (debug/quality signal).
  • reactQueryQueryCount: Number of React Query entries parsed from __REACT_QUERY_STATE__.
  • catalogItemCount, itemCustomizationsEnabled, customizationItemsCount: Catalog sizing hints from embedded data.

8. Delivery hints & HTTP metadata

  • deliveryFeeText, etaRange: Delivery fee copy and ETA range when parsed from HTML.
  • pllStatus: Internal PLL script status code string when present.
  • statusCode, contentType, bodyLength: HTTP response metadata.
  • htmlFile: Filename of optional saved HTML snapshot on disk (local/debug runs).
  • scrapedAt: ISO timestamp when the row was produced.

Benefits of the Uber Eats Store Scraper

  • Menu intelligence: Capture full menus with prices and images in one request per store.
  • Competitive research: Compare item pricing and assortment across locations and brands.
  • Data pipelines: Clean JSON ready for warehouses, BI tools, or enrichment workflows.
  • Review snippets: Quick access to verbatim customer feedback included in the initial page payload.
  • Operational flags: Open/closed and orderable state for availability monitoring.

Why Choose the Uber Eats Store Scraper?

The Uber Eats Store Scraper is built for teams that need repeatable, structured restaurant data without maintaining headless browsers for every run. It combines fast HTTP fetching with parsing of Uber’s embedded state and JSON-LD so you get menus and metadata in one JSON document per store.

Use Cases:

  • Building or updating a restaurant menu database
  • Tracking price or item changes over time
  • Enriching location datasets with cuisines, hours, and ratings
  • Sampling customer review text for sentiment or QA

Technical Implementation

The actor uses a robust extraction pipeline:

  1. HTTP fetch: Crawlee CheerioCrawler with an Impit-based client (Firefox profile, HTTP/3, optional TLS relaxations) and Apify proxy support.
  2. State & JSON-LD parsing: Reads __REACT_QUERY_STATE__ and JSON-LD blocks to recover store entity, menu, ratings, and reviews.
  3. Menu flattening & analytics: Derives flat menuItems, optional customization trees, and summary statistics for coverage and pricing.

Explore More Scrapers

If you found this actor useful, check out other scrapers at memo23's Apify profile. We offer a wide range of tools to enhance your web scraping and automation needs.


Support


Additional Services


Version History

  • v1.0: Uber Eats store detail extraction (menu, reviews, analytics)
  • Cheerio + embedded React Query state parsing
  • Optional full item customization payloads

This scraper is designed for legitimate business and research purposes. Users are responsible for:

  • Complying with Uber and Uber Eats terms of service and applicable laws
  • Respecting robots.txt, rate limiting, and platform policies
  • Using scraped data in accordance with applicable privacy and consumer regulations
  • Obtaining necessary permissions for commercial use of data

FAQ

Q: How many stores can I scrape per run?
A: Free users can process up to 50 stores per run (same maxItems cap as other actors on this billing tier). Paid users can raise limits according to their plan.

Q: Does the actor return the full menu?
A: Yes, when Uber Eats exposes the menu in the store page payload. Output includes both JSON-LD menuSections and a flattened menuItems list; enabling includeItemCustomizations adds large per-item customization trees.

Q: Are prices and currency included?
A: Yes. Items include numeric prices and currency (typically USD for US stores), plus store-level currencyCode.

Q: How fresh is the data?
A: Data reflects the store page at crawl time (scrapedAt).

Q: Can I scrape without proxies?
A: You can, but residential or datacenter proxies are recommended for stable production runs.

apify-ubereats