Uber Eats Scraper avatar

Uber Eats Scraper

Pricing

from $4.00 / 1,000 restaurant scrapeds

Go to Apify Store
Uber Eats Scraper

Uber Eats Scraper

Scrape Uber Eats restaurants and full menus by location or store URL. HTTP-only, no login, MCP-ready.

Pricing

from $4.00 / 1,000 restaurant scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

6 days ago

Last modified

Share

Uber Eats Scraper is an Apify Actor for restaurant and menu data from Uber Eats. It accepts either a location search or Uber Eats store URLs, and it returns one record per restaurant or store menu. In location mode, each record can include fields such as name, rating, review count, ETA, delivery fee, menu item count, city name, store URL, image URL, store UUID, and scraped time. In store-URL mode, each input URL returns one complete menu record with sections, items, prices, and descriptions. The Actor is usable through Apify MCP and is built for HTTP-only extraction with no login.

Best fit and connected workflows

This Actor fits workflows that need public Uber Eats restaurant data in a structured form:

  • Location-based restaurant discovery for a city, address, or precise delivery point.
  • Store-by-store menu extraction from known Uber Eats URLs.
  • Lead lists for restaurant-tech, POS, and delivery-oriented research.
  • Cataloging restaurant coverage, ratings, fees, and menu size across markets.
  • AI agent workflows through Apify MCP, where a tool call returns clean JSON for downstream analysis.

A location search is a natural starting point when you need restaurant cards for a market. A store URL is the direct route when you already have the restaurant page and want the full menu.

Practical scenario

Maya, a product manager at a local food-tech company, starts with Chicago, IL and the keyword pizza. The Actor returns restaurant records with fields like name, rating, reviewCount, etaText, deliveryFeeText, storeUrl, and menuItemCount. Maya uses the rating, fee, and menu size fields to shortlist a few restaurants, then opens the store URLs to review menu structure and item pricing for her next outreach list.

Focused standalone workflow

This Actor is designed as a focused standalone workflow.

Input

FieldTypePurposeExample
locationstringFree-text address or city for Uber Eats restaurant search. It is geocoded automatically.Chicago, IL
locationLatLngstringExact latitude,longitude pair that overrides geocoding.40.758,-73.9855
startUrlsarrayUber Eats store URLs for full menu extraction.["https://www.ubereats.com/store/duane-reade-158-w-45th-st/3aRdtSxMQI-rBbPFn6miNQ"]
searchQuerystringSearch keyword such as a cuisine, dish, or brand.pizza
enrichMenusbooleanFetch full menus for restaurants returned from the location feed.true
maxRestaurantsintegerMaximum restaurant records from the location feed.50
maxMenusToScrapeintegerMaximum menus to enrich when enrichMenus is enabled.10
diningModestringReturns delivery or pickup availability and pricing.DELIVERY
localeCodestringUber Eats locale code used by the API.en-GB
proxyConfigurationobjectProxy settings for the run.Residential proxy settings

Focused JSON input example

{
"location": "Chicago, IL",
"searchQuery": "pizza",
"enrichMenus": true,
"maxRestaurants": 25,
"maxMenusToScrape": 5,
"diningMode": "DELIVERY",
"localeCode": "en-US"
}

Output

The dataset overview view is centered on restaurant cards and enriched menus. The live dataset contract exposes these fields in the table view.

FieldTypeMeaning
namestringRestaurant name
ratingnumberAverage star rating
reviewCountnumberReview count
priceBucketstringPrice tier
etaTextstringETA text shown by Uber Eats
deliveryFeeTextstringDelivery fee text shown by Uber Eats
menuItemCountnumberNumber of menu items returned
cityNamestringCity name
storeUrlstringCanonical Uber Eats store URL
imageUrlstringRestaurant image URL
storeUuidstringStable Uber Eats store ID
scrapedAtstringScrape timestamp

Illustrative JSON record

{
"name": "Example Sushi",
"rating": 4.7,
"reviewCount": 1280,
"priceBucket": "$$",
"etaText": "15 min",
"deliveryFeeText": "$0.99 delivery fee",
"menuItemCount": 42,
"cityName": "Chicago",
"storeUrl": "https://www.ubereats.com/store/example-sushi/store-id",
"imageUrl": "https://d2s9..../image.jpg",
"storeUuid": "example-store-uuid",
"scrapedAt": "2026-01-01T12:00:00.000Z"
}

How it works

This Actor uses Uber Eats HTTP endpoints directly, including getFeedV1 for location-based restaurant feeds and getStoreV1 for store menus. Free-text locations are geocoded with OpenStreetMap Nominatim, and exact coordinates can be supplied through locationLatLng. The default proxy setup uses Apify Residential proxies in the US, which aligns with the live contract for this Actor. The build is based on the js-crawlee-cheerio template.

Pricing

This Actor uses Pay per event pricing, plus Apify platform usage. The charged events in the live contract are:

  • Actor start
  • Restaurant scraped
  • Menu scraped

Each location-search restaurant card generates a Restaurant scraped event, and each full menu fetch generates a Menu scraped event. For example, a run that returns twenty restaurants and enriches five menus produces twenty restaurant events and five menu events, plus the start event. For the current event pricing and Apify platform usage details, use the live Pricing tab in the Apify Console.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a tool-backed Apify Actor. The exact Actor identity is khadinakbar/uber-eats-scraper.

Tool use is a good fit when an agent needs a single structured call that returns Uber Eats restaurant cards or full menus. The input can be a location, a precise coordinate pair, or a list of store URLs. The output is dataset-backed, so downstream tools can read clean JSON from the dataset endpoint.

Search Uber Eats in Chicago with the keyword "pizza", return up to 10 restaurants, and enrich the top 3 menus so I can compare ratings, delivery fees, and menu size.

Output interpretation:

  • name, rating, and reviewCount help identify the store.
  • etaText and deliveryFeeText describe availability and pricing shown by Uber Eats.
  • storeUrl and storeUuid support follow-up lookups.
  • menuItemCount indicates how much menu content was returned.
  • scrapedAt helps track when the record was collected.

Provenance and scope:

  • Records come from public Uber Eats restaurant and store pages.
  • The Actor covers location feeds and store menus.
  • In store-URL mode, each URL returns one record with the full menu.
  • In location mode, restaurant cards come from the search feed, and menu enrichment adds store-menu records.

Pagination and cost guidance:

  • maxRestaurants caps the number of restaurant records pulled from a location feed.
  • maxMenusToScrape caps how many menus are enriched when that option is enabled.
  • Store-URL mode returns one record per input URL.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const actorRun = await client.actor('khadinakbar/uber-eats-scraper').call({
location: 'Austin, TX',
searchQuery: 'sushi',
maxRestaurants: 10,
});
const datasetId = actorRun.defaultDatasetId;
const { items } = await client.dataset(datasetId).listItems({ clean: true });
console.log(items);

Best results and outcome guidance

Use a city or address when you want the live nearby restaurant feed. Use locationLatLng when you need a precise delivery point. Use startUrls when you already have the store page and want the full menu. Keep maxRestaurants and maxMenusToScrape aligned with the size of the workflow you want to run. When comparing markets, the combination of rating, reviewCount, deliveryFeeText, and menuItemCount gives a practical first pass.

Design note

I found that the live dataset overview view exposes a compact record shape centered on name, rating, reviewCount, priceBucket, etaText, deliveryFeeText, menuItemCount, cityName, storeUrl, imageUrl, storeUuid, and scrapedAt, which makes the Actor easy to read in table form and easy to pass into downstream tooling.

FAQ

When should I use location versus startUrls?
Use location for restaurant discovery around a city or address. Use startUrls for direct menu extraction from known Uber Eats store pages.

What happens when I need a narrower area?
Use locationLatLng for an exact coordinate target, which overrides geocoding from the free-text location field.

Can I search by cuisine or brand?
Yes. searchQuery accepts keywords such as cuisine, dish, or brand and runs Uber's relevance search near the selected location.

How can I keep a run smaller?
Reduce maxRestaurants for location searches and maxMenusToScrape when menu enrichment is enabled.

Does this Actor work with MCP clients?
Yes. It is described as MCP-ready and can be used through Apify MCP with the Actor identity khadinakbar/uber-eats-scraper.

Responsible use

This Actor collects publicly available Uber Eats restaurant and menu information. Use the results in ways that align with Uber Eats terms, applicable laws, and data-protection obligations. Review the live Pricing tab before running larger jobs so the selected input size matches your intended usage.