Uber Eats Scraper — Menus, Item Prices & Ratings | API avatar

Uber Eats Scraper — Menus, Item Prices & Ratings | API

Pricing

from $96.03 / 1,000 menu scrapeds

Go to Apify Store
Uber Eats Scraper — Menus, Item Prices & Ratings | API

Uber Eats Scraper — Menus, Item Prices & Ratings | API

Scrape any **Uber Eats** restaurant menu into FLAT rows — one row per item with **price at the top level**, plus store rating, cuisine, address & phone on every row. No nested digging, no browser. Reliable residential-proxy access. Priced per menu — well below per-menu incumbents.

Pricing

from $96.03 / 1,000 menu scrapeds

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Uber Eats Menu Scraper 🍔

Turn any Uber Eats restaurant page into a clean, flat menu table — one row per item with the price right at the top level. No nested JSON to dig through, no browser, no manual copy-paste.

What you get (one row per menu item)

fielddescription
restaurant_nameStore / restaurant name
sectionMenu section breadcrumb (e.g. Breakfast > Featured items)
item_nameMenu item name
price_usdItem price, top-level number (no nested offers.price)
price_currencyCurrency code (e.g. USD)
descriptionItem description
image_urlItem photo
rating / num_ratingsStore rating + review count (repeated on every row)
cuisineCuisine tags
price_rangeStore price range (e.g. $$)
phone, address, city, state, zip, countryStore location & contact
store_url, source_urlLinks
parse_confidence, warningsStructural-drift signal — you never pay for a broken parse
scraped_atUTC timestamp

How to use

  1. Open a restaurant on ubereats.com and copy the page URL (https://www.ubereats.com/store/{name}/{id}).
  2. Paste one or more URLs into Store URLs.
  3. Run. You get a flat table of every menu item with its price.

Input

  • Store URLs — list of Uber Eats /store/ URLs.
  • Max Menus — cap on number of menus (0 = unlimited).
  • Delay between requests — politeness delay (default 1.5s).
  • Proxy — Apify RESIDENTIAL by default (recommended for reliable access).

Pricing & reliability

  • Billed per menu (one charge per restaurant successfully scraped), no matter how many items the menu has — far cheaper than tools that meter the same per-menu unit at a premium.
  • You never pay for a failed parse: if the menu structure drifts, rows are returned with a low parse_confidence and the menu is not charged.
  • Reliable access via residential proxy; runs entirely on the Apify platform.

More scrapers from our toolkit

Building a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:

Chain any of them together from the Integrations tab (the Run succeeded trigger) to build a multi-step workflow — one actor's output feeds the next.

Use it from your existing tools

Use with Claude Desktop / Cursor / Cline (MCP)

Load this actor as a tool in your AI assistant. Call it directly from your AI assistant via the Apify MCP server — no Store browsing needed. Paste this into your MCP client config (e.g. claude_desktop_config.json) and restart the client:

{
"mcpServers": {
"apify-ubereats-menu": {
"command": "npx",
"args": [
"-y",
"@apify/actors-mcp-server",
"--tools",
"bovi/ubereats-menu"
],
"env": {
"APIFY_TOKEN": "YOUR_APIFY_TOKEN"
}
}
}
}

Replace YOUR_APIFY_TOKEN with your own Apify API token (free at apify.com → Settings → Integrations). Curated to a handful of tools so the agent selects reliably.

Works with Clay

Run this actor as an HTTP enrichment step inside a Clay table:

  • Method: POST
  • URL: https://api.apify.com/v2/acts/bovi~ubereats-menu/run-sync-get-dataset-items?token={{apify_token}}
  • Body (JSON): map your Clay columns to the actor input (see the Input section above), e.g. {"storeUrls": "{{clay_column}}"}

The run finishes synchronously and returns the dataset rows straight into your Clay table. It runs on Apify's cloud under your own token and usage. Synchronous runs must complete within 300 seconds.