UberEats Menu Scraper + Analytics avatar

UberEats Menu Scraper + Analytics

Under maintenance

Pricing

from $2.75 / 1,000 menu_items

Go to Apify Store
UberEats Menu Scraper + Analytics

UberEats Menu Scraper + Analytics

Under maintenance

Extract full menus from any UberEats store. Paste store URLs, get menu items with prices, images, and sections — plus per-store analytics (price/image coverage, min/max/avg price). Multi-country support. Ideal for price monitoring and competitive restaurant analysis.

Pricing

from $2.75 / 1,000 menu_items

Rating

0.0

(0)

Developer

DataCach

DataCach

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

🍔 UberEats Menu Scraper + Analytics

Extract complete, structured menu data from any UberEats store — including item names, prices, sections, descriptions, and images. Just paste the store URLs directly from your browser. No UUIDs, no API keys, no setup required.

Built for price monitoring, competitive restaurant analysis, food-tech applications, and AI-powered food discovery.


💰 Transparent, usage-based pricing

$6.90 per 1,000 menu items — you only pay for what you extract.

VolumeEstimated cost
1 store × 50 items~$0.35
20 stores × 50 items~$6.90
100 stores × 50 items~$34.50
1,000 stores × 50 items~$345.00

Higher Apify subscription tiers (Bronze, Silver, Gold) automatically receive discounted rates. No hidden fees, no per-run charges beyond the standard Actor start cost.


✨ What does this Actor do?

  • Accepts one or more UberEats store page URLs copied directly from your browser.
  • Automatically decodes the store identifier from the URL — works for both US and international stores.
  • Fetches all stores concurrently with a built-in retry mechanism for maximum reliability.
  • Extracts every menu item across all sections and subsections.
  • Computes per-store analytics (price coverage, image coverage, min/max/avg price, promotion detection).
  • Outputs structured data across three separate datasets ready for JSON, CSV, or Excel export.
  • Enforces limits for free Apify accounts automatically.

📝 Input

FieldTypeRequiredDescription
store_urlsstring[]YesUberEats store page URLs to scrape. Paste directly from your browser.
country_codestringNo (default: "us")ISO country code fallback. Auto-detected from URLs when possible.

Supported URL formats

Both US and international UberEats URLs are supported:

# USUUID is visible directly in the URL
https://www.ubereats.com/store/mcdonalds-fillmore/209c6d0b-8bf5-579c-926b-436bd3bf839c
# International
https://www.ubereats.com/cl/store/arma-tu-hamburguesa-arica/reNyJaIAXPiMDQ7hjscVHA

Example input

{
"store_urls": [
"https://www.ubereats.com/store/mcdonalds-fillmore/209c6d0b-8bf5-579c-926b-436bd3bf839c",
"https://www.ubereats.com/cl/store/arma-tu-hamburguesa-arica/reNyJaIAXPiMDQ7hjscVHA"
]
}

How to find a store URL

Navigate to any restaurant on ubereats.com and copy the URL from your browser's address bar. That's it.


📦 Output

This Actor produces three separate datasets per run, each accessible from the Storage tab in the Apify run detail.


1. Default dataset — Menu Items

One record per menu item. This is the main output.

{
"subsection_id": "2c05b603-56ea-5441-97f9-019f8a7ebc2f",
"subsection_name": "Most Popular",
"store_id": "ad2a8786-4e0e-45f4-a79f-a1dfb38d797f",
"section_id": "c65630da-f63f-5258-8f7d-f94f2bbba0cb",
"section_name": "Lunch",
"country_code": "us",
"region_code": "dc",
"data_file": "ad2a8786-4e0e-45f4-a79f-a1dfb38d797f",
"has_customizations": true,
"is_sold_out": false,
"is_available": true,
"menu_item_id": "a34b9dd7-c831-5b77-bfd4-56ffa252feab",
"menu_item_name": "Medium French Fries",
"menu_item_price": 499,
"menu_item_price_promotion": null,
"menu_item_price_tagline": {
"text": "$4.99 • 320 Cal.",
"textFormat": "<span>$4.99<span style=\"color:#757575\"> • 320 Cal.</span></span>",
"accessibilityText": "$4.99, 320 Cal."
},
"menu_item_description": null,
"menu_item_image": "https://tb-static.uber.com/prod/image-proc/processed_images/c821c5db2718d95dd1fd68002987ec27/c67fc65e9b4e16a553eb7574fba090f1.jpeg",
"store_url": "https://www.ubereats.com/store/mcdonalds-bwr-rbd-80017-ny-aves/ad2a8786-4e0e-45f4-a79f-a1dfb38d797f",
"extraction_date": "2026-03-25",
"extraction_datetime": "2026-03-25T06:20:40.673495+00:00",
"main_task_id": "4e8b5aba-a061-4350-8852-32f114f8eabe",
"main_task_started": "2026-03-25T06:20:38.745046+00:00",
"position": 0
}
FieldTypeDescription
menu_item_idstringUnique UUID of the menu item
menu_item_namestringDisplay name
menu_item_priceintegerRaw price in the smallest currency unit (divide by 100 for most countries)
menu_item_price_promotionstring | nullPromotional price tagline if a discount is active
menu_item_price_taglineobjectFormatted price object from the UberEats API
menu_item_descriptionstring | nullItem description
menu_item_imagestring | nullImage URL
store_idstringUUID of the parent store
section_namestringMenu section name
subsection_namestringMenu subsection name
has_customizationsbooleanWhether the item has customizable options
is_sold_outbooleanWhether the item is currently sold out
is_availablebooleanWhether the item is currently available
country_codestringISO country code of the store
extraction_datestringISO date of extraction (YYYY-MM-DD)
extraction_datetimestringISO datetime in UTC
main_task_idstringUUID shared across all items in the same run
main_task_startedstringISO datetime when the run started

2. store-analytics dataset — Per-store Summary

One record per scraped store. Useful for competitive benchmarking, data quality audits, and price intelligence dashboards.

{
"store_id": "ade37225-a200-5cf8-8c0d-0ee18ec7151c",
"country_code": "cl",
"total_sections": 4,
"total_subsections": 12,
"total_items": 38,
"price_coverage_pct": 100.0,
"image_coverage_pct": 94.74,
"min_price": 150000,
"max_price": 650000,
"avg_price": 312500.0,
"has_promotions": false,
"extraction_date": "2026-03-25",
"extraction_datetime": "2026-03-25T04:30:35.319213+00:00",
"main_task_id": "36a31035-82ad-41a0-8b24-37ade70e2c44",
"main_task_started": "2026-03-25T04:30:31.438177+00:00"
}
FieldDescription
total_sections / total_subsections / total_itemsMenu structure counts
price_coverage_pct% of items with a non-zero price (0–100)
image_coverage_pct% of items with an image URL (0–100)
min_price / max_price / avg_pricePrice statistics in raw currency units
has_promotionstrue if at least one item has an active promotional price

3. run-summary dataset — Run-level Report

One record per Actor run. Ideal for monitoring scheduled runs, auditing failures, and tracking extraction history.

{
"main_task_id": "36a31035-82ad-41a0-8b24-37ade70e2c44",
"main_task_started": "2026-03-25T04:30:31.438177+00:00",
"main_task_finished": "2026-03-25T04:31:10.000000+00:00",
"country_code": "cl",
"stores_requested": 5,
"stores_succeeded": 4,
"stores_failed": 1,
"failed_store_ids": ["ade37225-a200-5cf8-8c0d-0ee18ec7151c"],
"total_menu_items": 142,
"free_user": false
}

💎 Free vs Paid

FeatureFreePaid
Store URLs per run1Up to 1,000
Menu items returned5Unlimited
Multi-country in one run
Per-store analytics dataset
Run summary dataset
Concurrent fetching (up to 32 workers)
Bulk scraping for price monitoring

Free account limits

When running with a free Apify account, the following restrictions apply automatically:

  • Only the first store URL is processed.
  • A maximum of 5 menu items is returned.

Upgrade to a paid Apify plan to unlock bulk scraping, full analytics, and multi-country support.


🚀 How to run

Apify Console

  1. Click Try for free on this page.
  2. Paste your UberEats store URLs into the store_urls field.
  3. Click Start and wait for the run to complete.
  4. Download results from the Storage tab in JSON, CSV, or Excel format.

Apify API

curl -X POST \
"https://api.apify.com/v2/acts/datacach~ubereats-menu-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"store_urls": [
"https://www.ubereats.com/store/mcdonalds-fillmore/209c6d0b-8bf5-579c-926b-436bd3bf839c"
]
}'

Schedule recurring runs

Use Apify's built-in Scheduler to monitor menus on a daily or weekly basis and detect price changes over time.


🛠 Technical notes

  • Built with Python 3 and the Apify SDK.
  • Concurrent store fetching via asyncio with a semaphore (up to 32 workers by default).
  • Automatic retry — stores that fail on the first attempt are retried once with a fresh authentication token before being marked as permanently failed.
  • URL decoding — international UberEats URLs encode the store ID as a URL-safe base64 hash; the Actor decodes it automatically.
  • Duplicate URLs in the input are deduplicated while preserving order.
  • Supports UberEats menu API formats v1 (catalogSectionsMap) and v2 (sectionEntitiesMap).
  • All timestamps are in UTC.

ActorDescription
UberEats – Stores Search by Location and KeywordSearch for UberEats stores by location and keyword. Use it to discover store URLs, then feed them directly into this Actor to extract their full menus.
UberEats – Brand Listing by CountryGet every brand listed on UberEats for one or more countries.

💬 Support

Need help or have a feature request? Reach us via the Apify inbox on our profile page.

✨ Credits

Developed and maintained by the DataCach team.


This Actor is neither affiliated with, sponsored by, nor endorsed by Uber Eats or Uber Technologies Inc. Use responsibly and in accordance with the Apify Terms of Service and Uber Eats' own terms of use.