# Deliveroo Scraper (`axlymxp/deliveroo-scraper`) Actor

Scrape Deliveroo restaurants and shops by area, keyword search or URL in 7 countries: rating, review count, delivery fee, ETA, price band, offers and GPS, with optional full menus and customer reviews. Fast, no browser or proxy. Pay only for results.

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

## Pricing

from $3.00 / 1,000 dataset items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Deliveroo Scraper — Restaurants, Menus, Reviews & Keyword Search

Get every restaurant and shop on Deliveroo in an area, or the ones that match a
keyword, as clean structured data: rating, number of ratings, price band,
delivery fee, minimum order, delivery time, current offer and GPS. Optionally add
the **full menu** (every item with price, category, calories and dietary tags)
and the **latest customer reviews**.

Works in **7 Deliveroo markets**: United Kingdom, Ireland, France, Italy,
Belgium, United Arab Emirates and Kuwait.

- **Whole areas in one go**: a London area page returns 1,500–1,800 branches.
- **Keyword search like the app**: "sushi", "vegan burger" or "Wagamama" returns
  the ~50 best matches Deliveroo shows, each with the matching dishes and prices.
- **No browser, no login, no proxy**: it reads Deliveroo's own app data, so runs
  are fast and cheap.

### Who uses this

| You are… | You use it to… |
|---|---|
| A restaurant group or food brand | Track competitors' ratings, prices, menus and offers in your delivery zones |
| An agency or lead-gen team | Build lists of every restaurant in a city with rating, price band and address |
| An analyst or investor | Measure delivery coverage, fees and ETAs by area, and map chain footprints |
| A developer | Feed restaurant data into an app, dashboard or AI agent with a stable JSON shape |

### What you get (output fields)

| Field | Example | Notes |
|---|---|---|
| `name` | SoBe Burger | Restaurant or shop |
| `rating` / `rating_count` | 4.4 / "500+" | As shown on Deliveroo |
| `price_category` | ££ | Price band |
| `delivery_fee` / `delivery_fee_minor` | £3.78 / 378 | Also in minor units (pence/cents/fils) |
| `minimum_order` | £15.00 | |
| `eta_minutes_min` / `eta_minutes_max` | 30 / 60 | Delivery time estimate |
| `offer` | Buy 1, get 1 free | Current promotion |
| `delivery_status` | AVAILABLE | AVAILABLE = orderable now or for a scheduled slot |
| `lat` / `lon` / `distance_meters` | 51.4844 / -0.0932 / 4337 | GPS and distance from the search point |
| `branch_type` | RESTAURANT | or ON_DEMAND_CONVENIENCE for grocery and convenience shops |
| `url`, `id`, `drn_id`, `slug` | … | Deliveroo identifiers |
| `brand_drn_id` | … | Same for every branch of a chain |
| `matched_dishes` | \[{name, price, …}] | Keyword search rows: the dishes Deliveroo shows for the match |
| `address`, `neighbourhood`, `city` | 5 Westmoreland Road, London, SE172AX | With full menu or restaurant URLs |
| `menu_categories`, `menu_items` | … | With "Include full menu" |
| `reviews` | \[{rating, text, tags, date}] | With "Reviews per restaurant" |

### Use cases

1. **Competitor watch.** Schedule a weekly run for your delivery areas and diff
   ratings, fees and offers.
2. **Menu price benchmarking.** Turn on the full menu for 50 burger restaurants
   and compare prices category by category.
3. **Sales prospecting.** List every restaurant in a city with its rating and
   price band, and target the well-rated ones without an offer.
4. **Market mapping.** Count branches per area, the share orderable now, and the
   average delivery fee and ETA.
5. **AI agents.** Answer "where can I get good ramen in Soho under £15 delivery?"
   from live data.

### Input

| Parameter | What it does | Default |
|---|---|---|
| **Deliveroo URLs** (`startUrls`) | Area pages (`…/restaurants/<city>/<area>`) list every branch delivering there; restaurant pages (`…/menu/<city>/<area>/<name>`) return that restaurant | Soho, London |
| **Search keywords** (`searchQueries`) | Dishes, cuisines or names, searched in each location | — |
| **Locations** (`locations`) | Area URL, `city/area` (e.g. `london/soho`) or `lat,lon` | — |
| **Market** (`market`) | Country for `city/area` and coordinates | uk |
| **Include full menu** (`includeMenu`) | Adds every menu item and the street address | off |
| **Max menu items per restaurant** | Keeps rows small for supermarkets (8,000+ products) | 500 |
| **Reviews per restaurant** (`maxReviewsPerRestaurant`) | Adds the latest reviews | 0 |
| **Review order** (`reviewsSort`) | newest, oldest, highest_rated, lowest_rated | newest |
| **Only orderable restaurants** (`onlyAvailable`) | Skip branches not taking orders | off |
| **Delivery or pickup** (`fulfillmentMethod`) | DELIVERY or COLLECTION | DELIVERY |
| **Max restaurants** (`maxItems`) | Total rows (duplicates removed) | 100 |
| **Max per area or search** (`maxItemsPerSource`) | Share the total across inputs | 0 (no cap) |

#### Example inputs

All restaurants in two areas:

```json
{
  "startUrls": [
    { "url": "https://deliveroo.co.uk/restaurants/london/soho" },
    { "url": "https://deliveroo.fr/fr/restaurants/paris/9eme-opera" }
  ],
  "maxItems": 3000
}
```

Keyword search with menus and reviews:

```json
{
  "searchQueries": ["sushi", "pizza"],
  "locations": ["london/soho", "51.4545,-2.5879"],
  "market": "uk",
  "includeMenu": true,
  "maxReviewsPerRestaurant": 10,
  "maxItems": 200
}
```

#### Example output

```json
{
  "market": "uk",
  "source": "area",
  "source_value": "uk:london/soho",
  "id": "477181",
  "name": "SoBe Burger",
  "url": "https://deliveroo.co.uk/menu/London/walworth-area/sobe-burger-at-foodrules",
  "branch_type": "RESTAURANT",
  "rating": 4.4,
  "rating_count": "500+",
  "price_category": "££",
  "delivery_status": "AVAILABLE",
  "eta_minutes_min": 30,
  "eta_minutes_max": 60,
  "delivery_fee": "£3.78",
  "delivery_fee_minor": 378,
  "minimum_order": "£15.00",
  "offer": "Buy 1, get 1 free",
  "lat": 51.4844186,
  "lon": -0.093195,
  "address": "5 Westmoreland Road, London, SE172AX",
  "currency": "GBP",
  "menu_item_count": 45,
  "menu_categories": ["Meal Deals", "BURGERS", "CHICKEN BUNS", "…"],
  "menu_items": [
    {
      "name": "Double Bacon Black Garlic",
      "category": "BURGERS",
      "price": "£13.95",
      "price_minor": 1395,
      "available": true,
      "dietary_tags": []
    }
  ],
  "reviews": [
    { "rating": 5, "text": null, "tags": ["Hot food", "Fresh produce"], "date": "2026-10-01" }
  ],
  "scraped_at": "2026-10-01T02:58:26Z"
}
```

### Scheduling, webhooks and integrations

- **Schedule** a daily or weekly run in Apify Console (Schedules) for monitoring.
- **Webhooks**: get notified or trigger a pipeline when a run finishes.
- **Export** as JSON, CSV, Excel or XML, or connect Google Sheets, Make, Zapier,
  Airbyte or an S3 bucket.
- **API**: start runs and fetch results from any language with the Apify API.

### Use it from AI assistants (MCP)

This Actor works as a tool through the [Apify MCP server](https://mcp.apify.com),
so Claude, ChatGPT and other MCP clients can call it. For example: *"List the
top-rated Thai restaurants delivering to Soho with their delivery fees."*

### Related Actors

- **Deliveroo Reviews Scraper**: one row per review, with date filters, for
  monitoring and sentiment analysis.
- **Deliveroo Menu Items Scraper**: one row per dish or product, for price
  benchmarking and full supermarket catalogues.

### FAQ

**How many restaurants can I get?** An area page returns every branch Deliveroo
lists for it, typically 1,000–4,000 in big cities, including closed ones
(`delivery_status: UNAVAILABLE`). Keyword search returns up to about 50 matches
per keyword and location, which is what Deliveroo itself shows.

**Is the data live?** Yes. Every run reads Deliveroo's current data: ratings,
fees, ETAs and offers as a customer would see them at that moment.

**Why is the ETA several hours for some restaurants?** Outside opening hours,
Deliveroo's estimate includes the wait until the restaurant opens. Use
`delivery_status_text` (e.g. "Opening at 10:00") or "Only orderable restaurants".

**Why are rating, fee and ETA empty for one of my restaurant URLs?** Deliveroo
only lists a branch in its area feeds while it is online. When you pass the URL
of a branch that is temporarily offline, the Actor still returns its menu,
address and reviews, but the live fields (rating, fee, ETA) stay empty until it
reappears.

**Which countries work?** UK, Ireland, France, Italy, Belgium, UAE and Kuwait.
Paste any Deliveroo URL from those sites; the market is detected automatically.

**Do I need a proxy or a Deliveroo account?** No. Leave the proxy off.

**Can I get postcodes?** The street address (with postcode in the UK) is included
when you turn on the full menu or pass restaurant URLs.

**Is it legal?** The Actor collects publicly visible business information
(restaurants, menus, prices, ratings) and anonymised reviews; it never logs in
or touches personal accounts. You are responsible for using the data in line with
Deliveroo's terms and the laws that apply to you.

**Something broke?** Open an issue on the Actor page. Errors are also reported to
the maintainer automatically.

# Actor input Schema

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

Area pages (e.g. https://deliveroo.co.uk/restaurants/london/soho) return every restaurant and shop that delivers there. Restaurant pages (https://deliveroo.co.uk/menu/<city>/<area>/<name>) return that one restaurant. Any supported market: deliveroo.co.uk, .ie, .fr, .it, .be, .ae, .com.kw.

## `searchQueries` (type: `array`):

Optional. Search like the Deliveroo app's search box: dishes, cuisines or restaurant names (e.g. 'sushi', 'vegan burger', 'Wagamama'). Each keyword is searched in every location (below) or, if no locations are given, in every area URL above. Returns up to ~50 best matches per keyword and location, with the matching dishes.

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

Optional. Where to search or which areas to list: an area URL, 'city/area' slugs as in Deliveroo URLs (e.g. 'london/soho', 'bristol/clifton'), or 'latitude,longitude' (e.g. '51.5136,-0.1365'). Slugs and coordinates use the Market setting below.

## `market` (type: `string`):

Country for 'city/area' and coordinate locations. Deliveroo URLs carry their own market.

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

Add every menu item (name, description, price, category, calories, dietary tags, availability, popularity, image) and the restaurant's street address to each row. Billed as an extra 'Full menu' event per restaurant.

## `maxMenuItemsPerRestaurant` (type: `integer`):

Cap on menu items stored per restaurant row when the full menu is included (supermarkets can list 8,000+ products). 0 = no cap. For complete catalogues, one row per product, use the Deliveroo Menu Items Scraper.

## `maxReviewsPerRestaurant` (type: `integer`):

Add up to this many customer reviews (star rating, comment, tags, date) to each row. 0 = no reviews. Billed as an extra 'Reviews' event per restaurant that has reviews.

## `reviewsSort` (type: `string`):

Which reviews to take first.

## `onlyAvailable` (type: `boolean`):

Skip branches that are not taking orders right now or for a scheduled slot (Deliveroo status UNAVAILABLE).

## `fulfillmentMethod` (type: `string`):

Area feeds for delivery or for collection (pickup).

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

Stop after this many restaurant rows in total (duplicates across inputs are removed).

## `maxItemsPerSource` (type: `integer`):

Optional cap per area, keyword search or batch of URLs, so several inputs share the total. 0 = no cap.

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

Not needed: Deliveroo's API works without a proxy. Only set this if you see repeated errors.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://deliveroo.co.uk/restaurants/london/soho"
    }
  ],
  "searchQueries": [
    "sushi",
    "pizza"
  ],
  "locations": [
    "london/soho",
    "51.4545,-2.5879"
  ],
  "market": "uk",
  "includeMenu": false,
  "maxMenuItemsPerRestaurant": 500,
  "maxReviewsPerRestaurant": 0,
  "reviewsSort": "newest",
  "onlyAvailable": false,
  "fulfillmentMethod": "DELIVERY",
  "maxItems": 100,
  "maxItemsPerSource": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `restaurants` (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 = {
    "startUrls": [
        {
            "url": "https://deliveroo.co.uk/restaurants/london/soho"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/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 = { "startUrls": [{ "url": "https://deliveroo.co.uk/restaurants/london/soho" }] }

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/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 '{
  "startUrls": [
    {
      "url": "https://deliveroo.co.uk/restaurants/london/soho"
    }
  ]
}' |
apify call axlymxp/deliveroo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axlymxp/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/LWOmNX2mtel19aaNU/builds/MXUSYDl4lrBxnj5jB/openapi.json
