# Uber Eats & Deliveroo Scraper API – Menus, Prices, No Login (`k-data-lab/uber-eats-deliveroo-scraper`) Actor

Uber Eats scraper and Deliveroo scraper API for food delivery data: restaurants, full restaurant menus, dish prices, delivery fees, ratings and hours by address or link. No login. One price per restaurant, never per dish. Track menu prices. 100 Uber Eats and 20 Deliveroo menus free monthly.

- **URL**: https://apify.com/k-data-lab/uber-eats-deliveroo-scraper.md
- **Developed by:** [K-Data Lab](https://apify.com/k-data-lab) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 uber eats restaurant with full menus

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

## Uber Eats Scraper & Deliveroo Scraper API – Menus, Prices & Fees, No Login

**This Uber Eats scraper and Deliveroo scraper gets restaurants, full menus, dish prices, ratings, hours and delivery fees for any delivery address, with no login or API key.** Type an address, or paste restaurant links. You pay one price per restaurant, however long its menu is, never per dish.

**Your first run is free.** The prefilled search takes about 15 seconds. Every month the first **100 Uber Eats menus, 20 Deliveroo menus and 200 list rows are free**, then **$1.80 per 1,000 Uber Eats restaurants with full menus** on the Apify Starter plan. The $0.005 run start is the only other cost, and the $5 monthly credit on Apify's Free plan covers about 2,700 more Uber Eats menus.

Real rows from a search for `burger` near `Soho, London` on 5 November 2026:

| Platform | Restaurant | Rating | Delivery time | Delivery fee | Minimum | Dishes | Cheapest – dearest |
|---|---|---:|---|---|---|---:|---|
| Deliveroo | Bleecker Burger - Soho | 4.8 (500+) | 10 min | £0.49 | £8.00 | 27 | £1.25 – £47.08 |
| Deliveroo | Burger King - Tottenham Court Road | 4.6 (500+) | 10 min | £0.49 | £8.00 | 131 | £0.34 – £29.99 |
| Uber Eats | Dumbo Soho | 4.54 (76) | 21–41 min | new-user offer | – | 17 | £0.50 – £20.90 |
| Uber Eats | Chicken Mania | – | 58–78 min | – | – | 41 | £1.19 – £34.99 |

#### 🔍 What does it do?

- **Search by address** on Uber Eats, Deliveroo or both, with one row format for both platforms. Add a dish, cuisine or restaurant name, or leave it empty to get what the platform shows for that address.
- **Read full menus:** every dish with price, description, section and image. Deliveroo adds calories, allergens and popular flags.
- **Get restaurant facts:** address, coordinates, cuisines, rating, delivery estimate, delivery fee, minimum order, opening hours, promotions. Uber Eats adds the restaurant's phone and a sample of recent reviews.
- **Choose your rows:** one row per restaurant with its menu inside, or one flat row per dish for Excel. The price is the same.
- **Add dish options** such as sizes and add-ons with their extra prices.
- **Track menu prices on a schedule.** One switch adds `priceChanges` (dish, old price, new price), plus counts of dishes added and removed.
- **Paste links.** Uber Eats store links and Deliveroo menu links work too.

#### 💡 Why choose this actor?

Prices below are on the Apify Starter (Bronze) plan, checked on 6 November 2026. "Per 1,000 restaurants" assumes 100 dishes on each menu.

| Uber Eats | This actor | borderline | memo23 | natanielsantos |
|---|---|---|---|---|
| 1,000 restaurants with menus | **$1.80** | $5.00 | $102.50 | $54.00 |
| Charged per dish | ❌ never | ❌ | ✅ $1.00/1K dishes | ✅ $0.50/1K dishes |
| Run start fee | $0.005 | none | $0.008 | $0.001 |
| Free every month | ✅ 100 menus | ❌ | ❌ | ❌ |
| Deliveroo in the same run | ✅ | ❌ | ❌ | ❌ |
| Whole grocery catalogues | ❌ | ✅ | not stated | not stated |
| Contact emails | ❌ | when Uber Eats lists them | ✅ finder | ❌ |

| Deliveroo | This actor | memo23 | thirdwatch |
|---|---|---|---|
| 1,000 restaurants with menus | **$5.50** | $10.00 | $7.00 + $1.75 per run |
| Run start fee | $0.005 | $0.005 | none |
| Free every month | ✅ 20 menus | ❌ | ❌ |
| Dish options, calories, allergens | ✅ included | not stated | not stated |

Deliveroo costs more than Uber Eats because its pages need residential proxies. Two actors charge less per Deliveroo row: studio-amba/deliveroo-scraper ($2.00 per 1,000, UK only) and lentic_clockss/deliveroo-scraper ($3.00 per 1,000, and each menu item is a charged row).

**Pick this actor** for the lowest Uber Eats cost per restaurant, for one row format across both platforms, or for a flat Deliveroo price that includes every dish. If you need a supermarket's whole catalogue or contact emails, one of the others fits better.

#### 🌍 Where does it work?

| Platform | Status | Countries we tested |
|---|---|---|
| Uber Eats | ✅ No login | US, UK, Canada, Australia, France, Germany, Spain, Japan, Mexico. Other Uber Eats countries should work the same way |
| Deliveroo | ✅ No login | UK, Ireland, France, Italy, Belgium, UAE, Kuwait |
| DoorDash | ❌ Not available | Its pages turned our requests away in every test |
| Just Eat | ❌ Not available | Its pages turned our requests away in every test |

We only list what passed our own cloud tests. Bypassing a site's blocks isn't something we do.

#### 📥 Input examples

**Compare both platforms at one address:**

```json
{ "addresses": ["Soho, London"], "queries": ["sushi"], "platforms": ["ubereats", "deliveroo"], "maxRestaurants": 20 }
```

**The cheaper restaurant list, no menus:**

```json
{ "addresses": ["Shoreditch, London"], "platforms": ["ubereats", "deliveroo"], "includeMenus": false, "maxRestaurants": 120 }
```

**One flat row per dish, for a spreadsheet:**

```json
{ "addresses": ["Times Square, New York"], "queries": ["pizza"], "maxRestaurants": 10, "rowPer": "dish" }
```

**Competitor menu price tracker, run on a schedule:**

```json
{ "startUrls": [{ "url": "https://www.ubereats.com/store/famous-original-rays-pizza-736-7th-ave/U-X5z_PRTHqmP4vfBUbwxQ" }], "trackPriceChanges": true, "monitorName": "ny-pizza" }
```

**Top-rated places open now:**

```json
{ "addresses": ["51.5136, -0.1345"], "platforms": ["deliveroo"], "minRating": 4.5, "openNowOnly": true }
```

#### 📤 Output

One restaurant, shortened to one dish:

```json
{
  "recordType": "restaurant",
  "platform": "deliveroo",
  "storeType": "restaurant",
  "country": "GB",
  "searchAddress": "Soho, London",
  "searchQuery": "burger",
  "restaurantId": "731808",
  "name": "Bleecker Burger - Soho",
  "url": "https://deliveroo.co.uk/menu/London/soho/bleecker-soho?day=today&geohash=gcpvhcvejnem&time=ASAP",
  "rating": 4.8,
  "ratingCount": "500+",
  "isOpen": true,
  "etaMinMinutes": 10,
  "etaMaxMinutes": 10,
  "deliveryFee": 0.49,
  "deliveryFeeText": "£0.49 delivery fee",
  "minimumOrder": 8,
  "currency": "GBP",
  "address": "33 Old Compton Street, London, W1D5JU",
  "promotions": ["Spend £10, Get £0 delivery fee"],
  "menuItemCount": 27,
  "menuMinPrice": 1.25,
  "menuMaxPrice": 47.08,
  "menuAvgPrice": 9.17,
  "menu": [{
    "section": "Meal Deals",
    "items": [{ "name": "Meal for 1", "description": "Burger, fries & a shake", "price": 23.59, "priceText": "£23.59", "isAvailable": true, "hasOptions": true }]
  }],
  "scrapedAt": "2026-11-05T12:41:22Z"
}
```

Download as JSON, CSV or Excel. The **Restaurants** and **Dishes** tabs show tidy tables. A `RUN_SUMMARY` record lists what each search returned, including anything unavailable.

#### 💰 Pricing

Pay per event: only delivered restaurants are charged. A restaurant we couldn't read costs nothing, and filtered restaurants cost nothing. Prices per 1,000:

| Event | Free every month | Starter | Scale | Business |
|---|---:|---:|---:|---:|
| Uber Eats restaurant with full menu | 100 | $1.80 | $1.60 | $1.40 |
| Deliveroo restaurant with full menu | 20 | $5.50 | $5.50 | $5.50 |
| Restaurant list row, no menu | 200 | $0.60 | $0.50 | $0.40 |
| Uber Eats dish options, per dish | 100 | $0.20 | $0.15 | $0.10 |

**Example:** 500 Uber Eats restaurants with menus cost $0.72 after the free 100, plus the $0.005 start. Set a spending limit on any run and it stops cleanly when it gets there.

#### 🔌 Use it from code, n8n or Make

```bash
curl -X POST "https://api.apify.com/v2/acts/k-data-lab~uber-eats-deliveroo-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"addresses":["Times Square, New York"],"queries":["pizza"],"maxRestaurants":5}'
```

In n8n or Make, use the Apify node with the actor ID `k-data-lab/uber-eats-deliveroo-scraper`.

#### 🧠 Use it from AI agents (MCP)

Add this URL to Claude, ChatGPT, Cursor or any MCP client to load the actor as a named tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp):

```text
https://mcp.apify.com?tools=actors,k-data-lab/uber-eats-deliveroo-scraper
```

It returns plain JSON and needs no Uber Eats or Deliveroo login.

| The agent is asked to | Input to send |
|---|---|
| Get Uber Eats restaurants near an address | `{ "addresses": ["<address, city>"], "includeMenus": false, "maxRestaurants": 20 }` |
| Get the menu and prices of an Uber Eats restaurant | `{ "startUrls": [{ "url": "<ubereats.com/store link>" }] }` |
| Get the menu and prices of a Deliveroo restaurant | `{ "startUrls": [{ "url": "<deliveroo menu link>" }] }` |
| Find Deliveroo restaurants by postcode | `{ "addresses": ["<postcode, city>"], "platforms": ["deliveroo"], "maxRestaurants": 20 }` |
| Find a dish or cuisine near an address | `{ "addresses": ["<address, city>"], "queries": ["<dish>"], "maxRestaurants": 5 }` |
| Compare delivery fees on Uber Eats and Deliveroo | `{ "addresses": ["<address, city>"], "queries": ["<dish>"], "platforms": ["ubereats", "deliveroo"], "maxRestaurants": 10 }` |
| Get every dish as a flat table | `{ "addresses": ["<address, city>"], "rowPer": "dish", "maxRestaurants": 5 }` |

Send `addresses` or `startUrls`; every other field is optional. A call for 5 Uber Eats menus costs $0.005 while the free monthly quota lasts and $0.014 after it. Read `name`, `rating`, `etaMinMinutes`, `deliveryFee`, `deliveryFeeText`, `minimumOrder`, `currency`, `menuItemCount` and `menu`. `deliveryFee` is empty when the platform shows only a new-user offer, so check `deliveryFeeText`. If a row is missing, the `RUN_SUMMARY` record says why.

#### ❓ FAQ

**Why do so many Uber Eats delivery fees show as an offer?** Uber Eats shows logged-out visitors a new-user offer such as `$0 delivery fee (new users)`. We keep those words in `deliveryFeeText` and leave the number `deliveryFee` empty, so an offer never reads as the real fee. A real fee shown to visitors, such as `£0.99 Delivery Fee`, fills both. Deliveroo shows its real fee.

**Are prices the same for everyone?** Menu prices can vary by address, time and platform, so `searchAddress` records where each row applies. Prices stay in local currency, and `currency` says which. A pasted link with no address gives menu prices, but Deliveroo then shows no delivery fee or minimum order.

**Why is the same dish listed once when the app shows it twice?** Apps repeat dishes under "Picked for you". We keep each dish once, under its real section, and mark it `isPopular`.

**Do I get supermarkets?** By default, no. Uber Eats shows only featured shelves for grocers, so they would be incomplete. Turn off **Restaurants only** to include them; `storeType` and `menuComplete` label them.

**How many Deliveroo restaurants can I get?** About 100 from the plain area page, and every restaurant in the area (over 4,000 in central London) when `maxRestaurants` is above 100. A search returns up to 150.

**Does it work in Singapore or Qatar?** No. Deliveroo closed in both countries in March 2026, so we list only the markets that are live.

**How do addresses work?** We look them up in OpenStreetMap, © OpenStreetMap contributors. If one lands in the wrong country, add a city and country, use coordinates, or set **Country**.

**Do you return reviews?** Uber Eats rows include the sample of recent reviews shown on the store page, without reviewer names. Full review history isn't included, and Deliveroo reviews aren't either.

**Is it legal?** The actor reads what any logged-out visitor can see and doesn't log in or collect customer data. Phone numbers are the restaurants' public business numbers. Each platform's terms still apply to how you use the data. This actor isn't affiliated with Uber Eats or Deliveroo.

#### 🧰 More from K-Data Lab

**Marketplaces and reviews**

- [Amazon Seller Central Review Scraper](https://apify.com/k-data-lab/amazon-seller-central-review-scraper): brand reviews and monitoring from your own account
- [Amazon ASIN Rating & Review Count Lookup](https://apify.com/k-data-lab/amazon-asin-rating-scraper): ratings, review counts and BSR, no login
- [Google Play Scraper API](https://apify.com/k-data-lab/google-play-scraper): app details and reviews, any country

**Travel and ads**

- [Agoda Scraper API](https://apify.com/k-data-lab/agoda-scraper): hotel prices, rooms and reviews
- [Airline Award Seat Scraper](https://apify.com/k-data-lab/airline-award-seat-scraper): live miles, taxes and seats left
- [Google Ads Transparency & Ad Library Scraper](https://apify.com/k-data-lab/google-ad-library-scraper): every Google ad a competitor runs

**Social and video**

- [Telegram Scraper API](https://apify.com/k-data-lab/telegram-channel-scraper): channels and keyword search, no login
- [YouTube Scraper API](https://apify.com/k-data-lab/youtube-scraper): video stats, metadata and channels, no login

**Korean data**

- [Korean Music Chart API](https://apify.com/k-data-lab/korean-music-chart-scraper): Melon, Genie, Bugs, FLO and VIBE in one chart
- Single-service charts: [Melon](https://apify.com/k-data-lab/melon-scraper), [Genie](https://apify.com/k-data-lab/genie-scraper), [Bugs](https://apify.com/k-data-lab/bugs-scraper), [FLO](https://apify.com/k-data-lab/flo-scraper), [VIBE](https://apify.com/k-data-lab/vibe-scraper)
- Apartment prices: [KB Land](https://apify.com/k-data-lab/kbland-scraper), [R114](https://apify.com/k-data-lab/r114-scraper)

#### 💬 Feedback

Need a field that's missing, or found a restaurant that doesn't work? Open an issue on the **Issues** tab. We answer the same day.

Tags: uber eats scraper, uber eats api, uber eats menu scraper, deliveroo scraper, deliveroo api, deliveroo menu scraper, food delivery scraper, food delivery data, restaurant menu scraper, menu price tracker, restaurant data api, delivery fee data

# Changelog

This Actor's version history is a separate document: https://apify.com/k-data-lab/uber-eats-deliveroo-scraper/changelog.md

# Actor input Schema

## `addresses` (type: `array`):

Delivery addresses to search, one per item: a street, area, postcode, city or coordinates, e.g. <code>Times Square, New York</code>, <code>W1D 3QU, London</code> or <code>51.5136, -0.1345</code>. Add a city and country so the place is unambiguous. Prices, fees and the restaurants returned depend on this address. Send this or <code>startUrls</code>.

## `country` (type: `string`):

Two-letter country code such as <code>US</code> or <code>GB</code>. Only needed if an address lands in the wrong country; normally it comes from the address.

## `queries` (type: `array`):

Dish, cuisine or restaurant name to search at each address, e.g. <code>pizza</code>, <code>sushi</code> or <code>McDonald's</code>. Leave empty to get what the platform shows for the address.

## `platforms` (type: `array`):

Which food delivery platforms to search at each address: <code>ubereats</code>, <code>deliveroo</code> or both. Uber Eats covers the US, UK, Canada, Australia, much of Europe, Japan and more. Deliveroo works in the UK, Ireland, France, Italy, Belgium, UAE and Kuwait.

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

Restaurant links to read directly, each as <code>{ "url": "..." }</code>: Uber Eats store links (<code>ubereats.com/store/name/ID</code>) or Deliveroo menu links (<code>deliveroo.co.uk/menu/city/area/name</code>). Each link returns that restaurant and its menu. Send this or <code>addresses</code>.

## `maxRestaurants` (type: `integer`):

The limit for each address + search + platform, from 1 to 1000. It keeps cost predictable: use 5 for a quick check.

## `includeMenus` (type: `boolean`):

On: every dish with its price, plus address, hours and delivery fees, charged as a restaurant with full menu. Off: the cheaper restaurant list only (name, rating, delivery time, promotions).

## `rowPer` (type: `string`):

One row per restaurant with its menu inside, or one flat row per dish for spreadsheets. The price is the same: you pay per restaurant, never per dish.

## `includeOptions` (type: `boolean`):

Add-ons and sizes with their extra prices. Free on Deliveroo. On Uber Eats each dish with options needs one more request and is charged as <code>item-options</code>.

## `maxOptionItemsPerRestaurant` (type: `integer`):

Limits the option cost of very long menus.

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

Delivery or pickup.

## `minRating` (type: `number`):

Skip restaurants rated below this, e.g. <code>4.5</code>. Unrated restaurants are skipped too when this is set.

## `restaurantsOnly` (type: `boolean`):

Skip supermarkets and convenience stores, which show only featured shelves on Uber Eats. Turn off to include them.

## `openNowOnly` (type: `boolean`):

Skip restaurants that can't take an order right now.

## `trackPriceChanges` (type: `boolean`):

Remembers each menu between runs. Later runs add <code>priceChanges</code> (dish, old price, new price). Use it with a schedule; the first run only records prices.

## `monitorName` (type: `string`):

Keeps separate price memories, e.g. <code>london-pizza</code>.

## `dedupe` (type: `boolean`):

A restaurant found by two searches is returned and charged once.

## Actor input object example

```json
{
  "addresses": [
    "Times Square, New York",
    "Soho, London"
  ],
  "country": "GB",
  "queries": [
    "pizza",
    "sushi"
  ],
  "platforms": [
    "ubereats",
    "deliveroo"
  ],
  "startUrls": [
    {
      "url": "https://www.ubereats.com/store/famous-original-rays-pizza-736-7th-ave/U-X5z_PRTHqmP4vfBUbwxQ"
    }
  ],
  "maxRestaurants": 5,
  "includeMenus": true,
  "rowPer": "restaurant",
  "includeOptions": false,
  "maxOptionItemsPerRestaurant": 30,
  "diningMode": "DELIVERY",
  "minRating": 4.5,
  "restaurantsOnly": true,
  "openNowOnly": false,
  "trackPriceChanges": false,
  "monitorName": "london-pizza",
  "dedupe": true
}
```

# Actor output Schema

## `restaurants` (type: `string`):

No description

## `dishes` (type: `string`):

No description

## `all` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "addresses": [
        "Times Square, New York"
    ],
    "queries": [
        "pizza"
    ],
    "platforms": [
        "ubereats"
    ],
    "maxRestaurants": 5,
    "includeMenus": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("k-data-lab/uber-eats-deliveroo-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 = {
    "addresses": ["Times Square, New York"],
    "queries": ["pizza"],
    "platforms": ["ubereats"],
    "maxRestaurants": 5,
    "includeMenus": True,
}

# Run the Actor and wait for it to finish
run = client.actor("k-data-lab/uber-eats-deliveroo-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 '{
  "addresses": [
    "Times Square, New York"
  ],
  "queries": [
    "pizza"
  ],
  "platforms": [
    "ubereats"
  ],
  "maxRestaurants": 5,
  "includeMenus": true
}' |
apify call k-data-lab/uber-eats-deliveroo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,k-data-lab/uber-eats-deliveroo-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/ofVta1m0YqtIy12gv/builds/NoixHMBnTzjnDud8T/openapi.json
