# Uber Eats Scraper - Restaurants, Full Menus & Modifiers (`parseforge/uber-eats-scraper`) Actor

Scrape Uber Eats restaurants and full menus with prices, ratings, hours, phone, coordinates, ETA and modifiers for any address worldwide. Export CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/uber-eats-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🍔 Uber Eats Scraper

> 🚀 **Export Uber Eats restaurants and their complete menus in seconds, as one row per restaurant or one row per dish.** 280 Chicago restaurants with every dish, price and photo came back in about 2 minutes in our test, with no login.

This Actor reads the same data the Uber Eats website loads for every store page: the restaurant card, the address and coordinates, the opening hours, the phone number and the full menu with prices, photos and customer like scores. You can search near any address or pair of coordinates in the countries where Uber Eats delivers, narrow the search with a cuisine, a dish or a restaurant name, apply the filters the app offers (rating, offers, delivery time, best overall, pickup), or paste store links you already have.

Every restaurant row has 42 fields and every menu item row has 30. Menus range from 24 to 247 dishes per restaurant in our Chicago test. Turn on **Include modifiers and add-ons** to also get the option groups behind each dish (sizes, toppings, sides) with their required flags, limits and extra prices.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Restaurant owners and chains | Benchmark your menu prices and ratings against every competitor in the same delivery zone |
| Food delivery and ghost kitchen operators | Find under-served cuisines and price gaps by neighborhood |
| Market and location analysts | Map restaurant density, cuisines, chains and ratings for any city |
| Sales and lead teams | Build restaurant lead lists with address, phone, cuisine and rating |
| Data and AI teams | Build menu, price and dish datasets across countries and languages |
| Food brands and CPG teams | Track where and how your products are listed and priced |

### 📋 What the Uber Eats Scraper does

1. Takes one or more locations (an address, a city, a postcode or plain `latitude,longitude`) and turns each into a delivery point.
2. Runs one search per location and search term (a cuisine, a dish or a brand) and pages through the whole result list Uber Eats builds for that point, about 80 restaurants per request.
3. Applies the app's own filters before reading: sort order, minimum rating, offers only, delivery under 30 minutes, best overall, delivery or pickup, and restaurants only (shops and pharmacies are dropped by default).
4. Reads each restaurant once and returns the restaurant with its full menu, or splits the menu into one row per dish.
5. Optionally reads every dish that has options and adds the modifier groups with prices.
6. Also accepts Uber Eats store links directly, with no location needed.
7. Deduplicates restaurants across locations and search terms, so the same store never costs you twice.

> 💡 **Why it matters:** a rating and a photo hide what actually decides an order: what the menu costs, what is on it and who sells it nearby. With the menu, the like scores, the ETA and the coordinates on the same row, you can compare a whole market in one export instead of opening store pages one by one.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Restaurant rows carry 42 columns. Menu item rows carry 30. Pick the shape with **Output rows**.

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Restaurant hero photo (dish photo in menu item rows) |
| 📌 `title` | string | Restaurant name (dish name in menu item rows) |
| 🚦 `status` | string | Open, or the closed message Uber Eats shows |
| 🔗 `url` | string | Uber Eats store page |
| 🆔 `id` | string | Store UUID (dish UUID in menu item rows) |
| 🍽 `cuisines` | array | Cuisine and category tags |
| 💲 `priceRange` | string | Price bucket from $ to $$$$ |
| ⭐ `rating` | number | Average rating out of 5 |
| 🔢 `ratingCount` | string | Number of ratings as Uber Eats shows it, for example 3000+ |
| 📍 `address` `streetAddress` `city` `region` `postalCode` `country` | string | Full address, split into parts |
| 🧭 `latitude` `longitude` | number | Store coordinates |
| 📞 `phone` | string | Store phone number |
| 🕒 `openingHours` | array | Opening hours by day range, 24-hour times |
| ⏱ `etaText` `etaMinMinutes` `etaMaxMinutes` | mixed | Delivery estimate, as text and as numbers |
| 🛵 `deliveryFee` | string | Delivery fee text when Uber Eats shows one |
| 🏷 `offers` | array | Promotions on the store card ("Buy 1, get 1", "20% off select items") |
| 🔗 `isChain` `chainName` | string | Chain flag and parent chain name |
| 🍕 `menu` | array | Categories with dishes: name, description, price, photo, availability, like % and count |
| 💬 `topReviews` | array | Public customer reviews the store page shows |
| 🔎 `searchLocation` `searchTerm` | string | What produced the row |
| 🕒 `scrapedAt` | string | When the row was collected |
| ❌ `error` | string | Populated only on failed rows |

Menu item rows replace the restaurant columns with the dish (`category`, `description`, `price`, `priceFormatted`, `isAvailable`, `isSoldOut`, `likePercent`, `likeCount`, `hasModifiers`, `modifierGroups`) and repeat the restaurant name, id, rating, cuisines, address and coordinates on every row.

#### Real sample records

```json
{
  "imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/f7d462cb04f580428f99aca9d5d9c86e/db809eadd12d21eb61044e0f3bf7c9b7.jpeg",
  "title": "Bonchon Chicken (325 5th Ave)",
  "status": "Open",
  "url": "https://www.ubereats.com/store/bonchon-chicken-325-5th-ave/L066F9L1TBSUMe6PUZONgw",
  "id": "2f4eba17-d2f5-4c14-9431-ee8f51938d83",
  "slug": "bonchon-chicken-325-5th-ave",
  "cuisines": [
    "Wings",
    "Asian",
    "Chicken",
    "Family Friendly",
    "Korean"
  ],
  "priceRange": "$",
  "rating": 4.8,
  "ratingCount": "10000+",
  "address": "325 5th Ave, New York, NY 10016",
  "streetAddress": "325 5th Ave",
  "city": "New York",
  "region": "NY",
  "postalCode": "10016",
  "country": "US",
  "latitude": 40.7474696,
  "longitude": -73.9850699,
  "phone": "+12126868282",
  "isOpen": "Yes",
  "isOrderable": "Yes",
  "openingHoursSummary": "Open until 1:00 AM",
  "openingHours": [
    {
      "days": "Sunday - Thursday",
      "slots": [
        {
          "section": "N/A",
          "opens": "10:30",
          "closes": "01:00"
        }
      ]
    }
  ],
  "etaText": "17–32 Min",
  "etaMinMinutes": 17,
  "etaMaxMinutes": 32,
  "deliveryFee": "Not Disclosed",
  "distance": "0.7 mi",
  "currency": "USD",
  "isChain": "Yes",
  "chainName": "BonChon",
  "storeType": "DEFAULT",
  "offers": [
    "Buy 1, get 1"
  ],
  "diningModes": [
    "DELIVERY",
    "PICKUP"
  ],
  "menuCategoryCount": 10,
  "menuItemCount": 70,
  "menu": [
    {
      "category": "Buy 1, get 1 free",
      "items": [
        {
          "id": "34d1034d-40c9-560e-958e-c54bd79dc48f",
          "name": "Grape Juice Can",
          "description": "N/A",
          "price": 5.79,
          "priceFormatted": "$5.79",
          "imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/c10c7f65348e1d5edd628b2ad20e016f/5143f1e218c67c20fe5a4cd33d90b07b.jpeg",
          "isAvailable": "Yes",
          "isSoldOut": "No",
          "hasModifiers": "No",
          "likePercent": 91,
          "likeCount": 37
        },
        {
          "id": "dea74955-a779-5114-bf00-588bcf8772c4",
          "name": "Pear Juice Can",
          "description": "N/A",
          "price": 5.79,
          "priceFormatted": "$5.79",
          "imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/b416aed6edfea626dbfd837c40a4f38e/5143f1e218c67c20fe5a4cd33d90b07b.jpeg",
          "isAvailable": "Yes",
          "isSoldOut": "No",
          "hasModifiers": "No",
          "likePercent": 96,
          "likeCount": 54
        }
      ]
    }
  ],
  "topReviews": [
    {
      "author": "Rachel C.",
      "date": "2026-07-23T00:31:52Z",
      "text": "This was probably the best order I’ve ever had from Bonchon after being a loyal customer for almost 10 years."
    }
  ],
  "searchLocation": "Times Square, New York",
  "searchTerm": "pizza",
  "scrapedAt": "2026-09-28T22:18:28.086Z",
  "error": null
}
```

```json
{
  "imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/6f67fd8dc603a197abf91eba0288129f/fb86662148be855d931b37d6c1e5fcbe.jpeg",
  "title": "Joe's Pizza - Time's Square (1435 Broadway)",
  "status": "Open",
  "url": "https://www.ubereats.com/store/joes-pizza-times-square-1435-broadway/F9A-B2bKRg-ikAd0B8uzgg",
  "id": "17d03e07-66ca-460f-a290-077407cbb382",
  "slug": "joes-pizza-times-square-1435-broadway",
  "cuisines": [
    "Pizza",
    "American",
    "Italian",
    "Group Friendly"
  ],
  "priceRange": "$",
  "rating": 4.6,
  "ratingCount": "15000+",
  "address": "1435 Broadway, New York, NY 10018",
  "streetAddress": "1435 Broadway",
  "city": "New York",
  "region": "NY",
  "postalCode": "10018",
  "country": "US",
  "latitude": 40.7546509,
  "longitude": -73.9868254,
  "phone": "+16465594878",
  "isOpen": "Yes",
  "isOrderable": "Yes",
  "openingHoursSummary": "Open until 3:00 AM",
  "openingHours": [
    {
      "days": "Sunday - Wednesday",
      "slots": [
        {
          "section": "N/A",
          "opens": "10:00",
          "closes": "03:00"
        }
      ]
    }
  ],
  "etaText": "30–30 Min",
  "etaMinMinutes": 30,
  "etaMaxMinutes": 30,
  "deliveryFee": "$3.99 Delivery Fee",
  "distance": "0.2 mi",
  "currency": "USD",
  "isChain": "Yes",
  "chainName": "joe's pizza nyc (parent)",
  "storeType": "DEFAULT",
  "offers": [],
  "diningModes": [
    "DELIVERY",
    "PICKUP"
  ],
  "menuCategoryCount": 3,
  "menuItemCount": 24,
  "menu": [
    {
      "category": "Salads",
      "items": [
        {
          "id": "06741353-8cb0-4be9-982d-b781867cad78",
          "name": "House Salad (Small)",
          "description": "Fresh mixed greens.",
          "price": 11,
          "priceFormatted": "$11.00",
          "imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/a0d4e45600bc020112eeda9ac43862fb/3093d07d5a810674a6d7adf26679874b.jpeg",
          "isAvailable": "Yes",
          "isSoldOut": "No",
          "hasModifiers": "No",
          "likePercent": 79,
          "likeCount": 337
        },
        {
          "id": "41096540-6745-4b31-9b24-11d02dec318b",
          "name": "House Salad (Family)",
          "description": "Feeds four to five people.",
          "price": 32,
          "priceFormatted": "$32.00",
          "imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/2142f841b70f29d2e8fb0b3d052946ef/c67fc65e9b4e16a553eb7574fba090f1.jpeg",
          "isAvailable": "Yes",
          "isSoldOut": "No",
          "hasModifiers": "Yes",
          "likePercent": 81,
          "likeCount": 70
        }
      ]
    }
  ],
  "topReviews": [
    {
      "author": "Charles K.",
      "date": "2023-06-04T00:00:00Z",
      "text": "Outstanding true NY style pizza. The cheese pizza is my pick.  The crust is always crispy and chewy, the cheese to sauce ratio is just right, and the ingredients are of a good quality. Joe's is a favorite for a reason."
    }
  ],
  "searchLocation": "Times Square, New York",
  "searchTerm": "pizza",
  "scrapedAt": "2026-09-28T22:18:27.798Z",
  "error": null
}
```

Menu item row:

```json
{
  "imageUrl": "https://tb-static.uber.com/prod/image-proc/processed_images/2142f841b70f29d2e8fb0b3d052946ef/c67fc65e9b4e16a553eb7574fba090f1.jpeg",
  "title": "House Salad (Family)",
  "restaurantName": "Joe's Pizza - Time's Square (1435 Broadway)",
  "category": "Salads",
  "menuName": "Menu",
  "description": "Feeds four to five people.",
  "price": 32,
  "priceFormatted": "$32.00",
  "currency": "USD",
  "isAvailable": "Yes",
  "isSoldOut": "No",
  "likePercent": 81,
  "likeCount": 70,
  "hasModifiers": "Yes",
  "dietaryLabels": [],
  "modifierGroups": [
    {
      "group": "Choice of Add On",
      "required": "No",
      "min": 0,
      "max": 1,
      "options": [
        {
          "name": "Mozzarella",
          "price": 4,
          "isSoldOut": "No"
        }
      ]
    }
  ],
  "id": "41096540-6745-4b31-9b24-11d02dec318b",
  "restaurantId": "17d03e07-66ca-460f-a290-077407cbb382",
  "restaurantUrl": "https://www.ubereats.com/store/joes-pizza-times-square-1435-broadway/F9A-B2bKRg-ikAd0B8uzgg",
  "restaurantRating": 4.6,
  "restaurantCuisines": [
    "Pizza",
    "American",
    "Italian",
    "Group Friendly"
  ],
  "restaurantAddress": "1435 Broadway, New York, NY 10018",
  "restaurantCity": "New York",
  "restaurantCountry": "US",
  "latitude": 40.7546509,
  "longitude": -73.9868254,
  "searchLocation": "N/A",
  "searchTerm": "N/A",
  "scrapedAt": "2026-09-28T22:19:17.496Z",
  "error": null
}
```

### ✨ Why choose this Actor

- 🍽 **Restaurants and dishes in one Actor.** One row per restaurant with the menu nested, or one row per dish with the restaurant on every row.
- 🧩 **Modifiers and add-ons.** Sizes, toppings and sides with required flags, limits and prices, on request.
- 🌍 **Any Uber Eats country.** Search by address or coordinates and choose English or the local language.
- 🎛 **The app's own filters.** Rating, offers, delivery time, best overall, delivery or pickup and restaurants only.
- 🔗 **Two ways in.** Search near a place, or paste store links.
- 🧹 **Clean rows.** Prices as numbers, hours in 24-hour time, no duplicated restaurants, no empty cells (missing values say `Not Disclosed` or `N/A`).

### 📈 How it compares to alternatives

| | This Actor | Typical Uber Eats scrapers |
|---|---|---|
| Output shapes | Restaurant rows or dish rows | Usually restaurant rows only |
| Menu modifiers | Yes, on request | Rarely |
| Filters | Sort, rating, offers, under 30 min, best overall, pickup, store type | Usually a search term only |
| Several locations and terms in one run | Yes, deduplicated | One at a time |
| Store links | Yes, no location needed | Varies |
| Ceiling | About 450 restaurants per search point, the depth Uber Eats itself lists | Same source |

Uber Eats ranks and cuts its own result list per delivery point, so a very large city needs several search points or several terms to be covered. The Actor tells you what each row came from (`searchLocation`, `searchTerm`) so you can see coverage. Fees, ETAs and availability reflect the delivery point and the moment of the run.

### 🚀 How to use

1. Create a free Apify account with $5 credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Actor and add one or more **Locations** (for example `Times Square, New York` or `40.7128,-74.0060`).
3. Optionally add **Search terms** such as `pizza`, `sushi` or a restaurant name.
4. Choose **Output rows**: one row per restaurant or one row per menu item.
5. Set **Max Items** and press Start. Free plans are limited to 10 items as a preview.
6. Download the dataset as CSV, Excel, JSON or XML, or read it through the API.

Example input:

```json
{
  "locations": ["Times Square, New York"],
  "searchTerms": ["pizza"],
  "outputMode": "restaurants",
  "maxItems": 100
}
```

### 💼 Business use cases

#### 📊 Competitor and price benchmarking

Pull every restaurant of your cuisine within a delivery zone and compare menu prices, ratings and offers side by side. Repeat weekly to see who changes prices.

#### 🗺 Market and site selection

Export restaurants for several neighborhoods, then count cuisines, chains and ratings per area with the coordinates on every row.

#### 📇 Lead generation

Build a restaurant list with address, phone, cuisine, chain flag and rating for sales outreach, POS, supplier or marketing offers.

#### 🤖 Menu and dish datasets

Use dish rows with descriptions, prices, photos and like scores to train models, build dish search or study how the same dish is priced across cities and countries.

### 🔌 Automating Uber Eats Scraper

Schedule the Actor on Apify and send the results wherever you work:

- **Make and Zapier:** trigger a scenario when a run finishes and add the rows to your tools.
- **Slack:** post a message when a competitor adds an offer.
- **Airbyte:** load the dataset into your warehouse.
- **GitHub:** open an issue or commit the export.
- **Google Drive and Sheets:** save every run as a spreadsheet.

### 🌟 Beyond business use cases

- **Research:** study food access, cuisine mix and price levels across neighborhoods and countries.
- **Personal:** compare what a dish costs in every restaurant near you before you order.
- **Non-profit:** map where healthy or affordable options exist in a community.
- **Experimentation:** prototype a food recommender or a menu search on real data.

### 🤖 Ask an AI assistant about this scraper

Use the buttons on the Apify page to open this Actor in ChatGPT, Claude or Perplexity and ask how to build your input, how to read the menu structure or how to load the dataset into your stack.

### ❓ Frequently Asked Questions

**🍕 What does one row contain?**
By default, one restaurant with 42 fields and its whole menu nested inside. Switch to menu items and you get one row per dish with 30 fields.

**📍 How do I choose where to search?**
Add an address, city, postcode or `latitude,longitude` to Locations. Uber Eats returns the restaurants that deliver to that point.

**🔎 Can I search for a cuisine or a brand?**
Yes. Add Search terms such as `ramen`, `vegan` or a restaurant name. One search runs for each location and term.

**🔗 Can I scrape specific restaurants?**
Yes. Paste Uber Eats store links in Store URLs. No location is needed for links.

**🧩 What are modifiers?**
The options behind a dish, such as size, toppings and sides, with how many you must or may pick and the extra price. Turn on Include modifiers and add-ons. It makes one extra request per dish that has options, so it is slower.

**🌍 Which countries work?**
Any country where Uber Eats delivers. If a point is outside the delivery area the Actor logs it and returns nothing for that point. Choose English or the local language for interface texts.

**💲 Are prices numbers?**
Yes. `price` is in major currency units (14.99) and `priceFormatted` keeps the text Uber Eats shows ("$14.99"). The currency code is on every row.

**🛵 Why is the delivery fee sometimes Not Disclosed?**
Uber Eats only shows a fee on the store page when one applies to that delivery point and account. When it shows nothing, the Actor says so instead of guessing.

**🏪 Why do I only get restaurants?**
Uber Eats mixes shops, pharmacies and convenience stores into the same feed. Store type defaults to restaurants only. Choose All stores to keep everything.

**📈 How many restaurants can I get from one search?**
Uber Eats lists about 450 restaurants for one search point. For a whole city, add several locations or terms and the Actor removes duplicates.

**⏱ How fast is it?**
About 280 restaurants with full menus in 2 minutes in our Chicago test.

**🛡 Do I need a proxy?**
Uber Eats refuses plain cloud connections, so the Actor uses Apify residential proxy by default. It reads about 55 KB per restaurant with its menu. Datacenter proxy works for small runs but is blocked often, so keep residential for anything serious.

### 🔌 Integrate with any app

Use the Apify API, webhooks and the integrations catalog to connect the dataset to Make, Zapier, Slack, Airbyte, Google Sheets, your database or your own code.

### 🔗 Recommended Actors

- [NYC Restaurant Inspections Scraper](https://apify.com/parseforge/nyc-restaurant-inspections-scraper) - health inspection grades for New York restaurants.
- [Chicago Restaurant Inspections Scraper](https://apify.com/parseforge/chicago-restaurant-inspections-scraper) - inspection results for Chicago restaurants.
- [Seattle Restaurant Inspections Scraper](https://apify.com/parseforge/seattle-restaurant-inspections-scraper) - inspection results for Seattle restaurants.
- [UK Food Hygiene Ratings Scraper](https://apify.com/parseforge/fsa-uk-food-hygiene-ratings-scraper) - hygiene ratings for UK food businesses.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Uber Technologies, Inc. It only collects publicly available data.

# Actor input Schema

## `startUrls` (type: `array`):

Uber Eats store links, for example https://www.ubereats.com/store/joes-pizza-times-square-1435-broadway/F9A-B2bKRg-ikAd0B8uzgg . Links from any country domain path work.

## `searchTerms` (type: `array`):

Cuisine, dish or restaurant name, for example pizza, sushi, McDonald's. One search runs per term and location. Empty means every restaurant Uber Eats lists there.

## `locations` (type: `array`):

Street address, city, postcode or plain coordinates as latitude,longitude (for example 40.7128,-74.0060). Uber Eats returns the restaurants that deliver to that point.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `outputMode` (type: `string`):

Restaurants gives one row per restaurant, with the menu nested inside. Menu items gives one row per dish, with the restaurant details repeated on every row. Max Items counts rows of the type you pick.

## `includeMenu` (type: `boolean`):

Nest the whole menu (categories, dishes, prices, photos, likes) inside each restaurant row. Turn it off for a faster, lighter restaurant directory. Menu items mode always reads the menu.

## `includeModifiers` (type: `boolean`):

Also read every dish that has options (sizes, toppings, sides) and add its modifier groups with required flags, limits and prices. Slower, because it makes one extra request per dish.

## `language` (type: `string`):

English translates the interface texts (dining modes, hours labels, category names Uber Eats localizes). Local uses the language of the country you search in, as the Uber Eats site does there. Restaurant and dish names are always the ones the restaurant wrote.

## `sortBy` (type: `string`):

Order in which Uber Eats lists the restaurants.

## `minRating` (type: `string`):

Keep only restaurants rated at least this high.

## `offersOnly` (type: `boolean`):

Keep only restaurants running an offer or promotion.

## `under30Minutes` (type: `boolean`):

Keep only restaurants Uber Eats estimates to deliver in under 30 minutes.

## `topEatsOnly` (type: `boolean`):

Keep only restaurants Uber Eats badges as Best overall, where the market has that badge.

## `diningMode` (type: `string`):

Delivery or pickup. Pickup changes which restaurants are listed and the ETA shown.

## `storeType` (type: `string`):

Uber Eats mixes shops, pharmacies and convenience stores into the same feed. Restaurants only drops them; All keeps everything.

## `maxStoresPerSearch` (type: `integer`):

Optional cap on the restaurants read for each location and search term, so one big city does not use the whole Max Items budget. Leave empty for no cap.

## `proxyConfiguration` (type: `object`):

Residential proxy is the reliable choice. Datacenter IPs work for small runs but Uber Eats blocks them often.

## Actor input object example

```json
{
  "searchTerms": [
    "pizza"
  ],
  "locations": [
    "Times Square, New York"
  ],
  "maxItems": 10,
  "outputMode": "restaurants",
  "includeMenu": true,
  "includeModifiers": false,
  "language": "english",
  "sortBy": "Recommended",
  "minRating": "",
  "offersOnly": false,
  "under30Minutes": false,
  "topEatsOnly": false,
  "diningMode": "DELIVERY",
  "storeType": "restaurants",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Restaurant name, rating, cuisines, address, phone, ETA and dish count

## `fullData` (type: `string`):

Complete dataset: 42 fields per restaurant, 30 per menu item

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "pizza"
    ],
    "locations": [
        "Times Square, New York"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/uber-eats-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["pizza"],
    "locations": ["Times Square, New York"],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/uber-eats-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "pizza"
  ],
  "locations": [
    "Times Square, New York"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/uber-eats-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/uber-eats-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/r2sVjqNhTkgLj0vbE/builds/RKwwRIqz8DNeQie5e/openapi.json
