# Lieferando & Just Eat Scraper: Restaurants, Ratings & Fees (`polderdata/justeat-lieferando-scraper`) Actor

Scrape restaurants from Lieferando, Just Eat, Thuisbezorgd and Takeaway.com for any postcode: name, address, cuisines, rating, reviews count, delivery fee, minimum order, delivery time, deals. Export to CSV, JSON or Excel.

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

## Pricing

from $2.50 / 1,000 results

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

## Lieferando & Just Eat Scraper: Restaurants, Ratings & Delivery Fees

Scrape **restaurants from Lieferando, Just Eat, Thuisbezorgd and Takeaway.com** for any postcode area: name, chain, address with coordinates, cuisines, **star rating and number of reviews**, **delivery fee, minimum order and delivery time**, open status and current deals. Works for **Germany, the UK, the Netherlands, Austria, Switzerland and Belgium**. Export to **CSV, JSON or Excel**, or use the data via **API**.

*Lieferando Restaurants scrapen: Bewertungen, Liefergebühren und Mindestbestellwert als Excel/CSV. · Thuisbezorgd restaurants scrapen naar Excel/CSV.*

> Unofficial tool. Not affiliated with, endorsed by or sponsored by Just Eat Takeaway.com, Lieferando, Thuisbezorgd or Just Eat. It collects only publicly listed business data and no personal data (no reviews text, no reviewer or owner names, no phone numbers).

### What data you get

One row per restaurant on each area page (an area page usually lists **500–2,000 restaurants**).

| Field | Example | Description |
|---|---|---|
| `restaurantId`, `slug` | `10620363`, `stadtsalat-berlin-2` | Platform id and URL slug |
| `name`, `brandName` | `STADTSALAT`, `Stadtsalat` | Restaurant and chain name |
| `menuUrl` | `https://www.lieferando.de/speisekarte/stadtsalat-berlin-2` | Menu page |
| `site`, `country` | `lieferando.de`, `DE` | Where it was found |
| `street`, `postalCode`, `city` | `Friedrichstraße 113`, `10117`, `Berlin` | Business address |
| `latitude`, `longitude` | `52.525906`, `13.387984` | Coordinates |
| `cuisines` | `["Salate", "Poke bowl"]` | Cuisine labels (site language) |
| `rating`, `ratingCount` | `4.6`, `744` | Star rating (0–5) and number of ratings |
| `deliveryFee`, `minimumOrderValue`, `currency` | `0`, `1`, `EUR` | Delivery fee and minimum order |
| `deliveryEtaMinMinutes`, `deliveryEtaMaxMinutes` | `35`, `55` | Estimated delivery time |
| `offersDelivery`, `offersCollection` | `true`, `true` | Delivery / pick-up offered |
| `openNowForDelivery`, `openNowForCollection`, `canPreorder`, `temporarilyOffline` | `true`, … | Status at scrape time |
| `nextOpeningTime` | `2026-10-19T10:45:00` | Next opening (local time) |
| `deals` | `["StampCard", "2 für 1 Deal"]` | Current promotions |
| `isNew`, `isPremier` | `false`, `false` | New on the platform / premier partner |
| `distanceMeters`, `displayRank` | `654`, `0` | Distance from the postcode and position in the list |
| `logoUrl` | `https://res.cloudinary.com/…png` | Restaurant logo |
| `areaUrl`, `scrapedAt` | | Source page and scrape time (UTC) |

### How to use

1. Open the site for your country (e.g. [lieferando.de](https://www.lieferando.de), [just-eat.co.uk](https://www.just-eat.co.uk), [thuisbezorgd.nl](https://www.thuisbezorgd.nl)), **enter a postcode**, and copy the URL of the restaurant list, e.g. `https://www.lieferando.de/lieferservice/essen/berlin-10115` or `https://www.just-eat.co.uk/area/ec1a-london`.
2. Paste one or more URLs into **Area URLs**. Optionally keep only some **cuisines**, a **minimum rating** or restaurants **open now**.
3. Click **Start** and download the results as CSV, Excel or JSON, or fetch them via the API.

Example input:

```json
{
    "startUrls": [
        { "url": "https://www.lieferando.de/lieferservice/essen/berlin-10115" },
        { "url": "https://www.thuisbezorgd.nl/bestellen/eten/amsterdam-1012" }
    ],
    "maxItems": 2000,
    "cuisines": ["pizza", "sushi"],
    "minRating": 4
}
```

**Supported sites (tested 2026-10-18):** lieferando.de, lieferando.at, thuisbezorgd.nl, takeaway.com/be, just-eat.co.uk, just-eat.ch. Other Just Eat Takeaway.com sites (just-eat.ie, takeaway.com/lu, just-eat.es, justeat.it, pyszne.pl) are accepted but less tested.

### Pricing

You pay per restaurant returned: **$2.50 per 1,000 restaurants** ($0.0025 each), plus Apify's tiny per-run start fee. A whole Berlin or London area (≈ 1,400–2,000 restaurants) costs about **$3.50–5**; 100 restaurants cost **$0.25**. Filters are applied before you are charged, so you only pay for matching restaurants. You never pay more than the **Maximum cost per run** you set in the run options.

Residential proxies (needed for these sites) are included in the price.

On the Apify Free plan a run returns at most 100 restaurants.

### Example output

```json
[
  {
    "restaurantId": "10620363",
    "name": "STADTSALAT",
    "brandName": "Stadtsalat",
    "slug": "stadtsalat-berlin-2",
    "menuUrl": "https://www.lieferando.de/speisekarte/stadtsalat-berlin-2",
    "site": "lieferando.de",
    "country": "DE",
    "street": "Friedrichstraße 113",
    "postalCode": "10117",
    "city": "Berlin",
    "latitude": 52.525906,
    "longitude": 13.387984,
    "cuisines": [
      "Mittagsangebote",
      "Salate",
      "Poke bowl"
    ],
    "rating": 4.6,
    "ratingCount": 744,
    "offersDelivery": true,
    "offersCollection": true,
    "openNowForDelivery": true,
    "openNowForCollection": true,
    "canPreorder": false,
    "temporarilyOffline": false,
    "nextOpeningTime": "2026-10-19T10:45:00",
    "deliveryEtaMinMinutes": 35,
    "deliveryEtaMaxMinutes": 55,
    "deliveryFee": 0,
    "minimumOrderValue": 1,
    "currency": "EUR",
    "deals": [],
    "isNew": false,
    "isPremier": false,
    "distanceMeters": 654,
    "displayRank": 0,
    "logoUrl": "https://res.cloudinary.com/tkwy-prod-eu/image/upload/c_pad,h_100,w_100/f_auto/q_auto/v1/static-takeaway-com/images/chains/de/stadtsalat/logo_465x320.png",
    "areaUrl": "https://www.lieferando.de/lieferservice/essen/berlin-10115",
    "scrapedAt": "2026-10-18T12:57:59.563Z"
  },
  {
    "restaurantId": "4124288",
    "name": "Domino's Pizza",
    "brandName": "Domino's",
    "slug": "dominos-pizza-mitte-berlin",
    "menuUrl": "https://www.lieferando.de/speisekarte/dominos-pizza-mitte-berlin",
    "site": "lieferando.de",
    "country": "DE",
    "street": "Schumannstraße 19",
    "postalCode": "10117",
    "city": "Berlin",
    "latitude": 52.52371,
    "longitude": 13.379903,
    "cuisines": [
      "Snacks",
      "Italienische Pizza",
      "Amerikanische Pizza",
      "Angebote"
    ],
    "rating": 4,
    "ratingCount": 1267,
    "offersDelivery": true,
    "offersCollection": true,
    "openNowForDelivery": true,
    "openNowForCollection": true,
    "canPreorder": false,
    "temporarilyOffline": false,
    "nextOpeningTime": "2026-10-18T16:00:00",
    "deliveryEtaMinMinutes": 25,
    "deliveryEtaMaxMinutes": 40,
    "deliveryFee": 1.49,
    "minimumOrderValue": 7.9,
    "currency": "EUR",
    "deals": [
      "20 % Rabatt auf ausgewählte Produkte",
      "StampCard",
      "Gratis Produkt"
    ],
    "isNew": false,
    "isPremier": false,
    "distanceMeters": 827,
    "displayRank": 1,
    "logoUrl": "https://res.cloudinary.com/tkwy-prod-eu/image/upload/c_pad,h_100,w_100/f_auto/q_auto/v1/static-takeaway-com/images/chains/de/dominos_neu/logo_465x320.png",
    "areaUrl": "https://www.lieferando.de/lieferservice/essen/berlin-10115",
    "scrapedAt": "2026-10-18T12:57:59.563Z"
  },
  {
    "restaurantId": "10614123",
    "name": "The Mood Burger",
    "brandName": "The Mood Burger",
    "slug": "the-mood-burger-mitte",
    "menuUrl": "https://www.lieferando.de/speisekarte/the-mood-burger-mitte",
    "site": "lieferando.de",
    "country": "DE",
    "street": "Große Hamburger Straße 23",
    "postalCode": "10115",
    "city": "Berlin",
    "latitude": 52.523914,
    "longitude": 13.399642,
    "cuisines": [
      "Burger",
      "100% Halal",
      "Angebote"
    ],
    "rating": 4.3,
    "ratingCount": 2179,
    "offersDelivery": true,
    "offersCollection": true,
    "openNowForDelivery": true,
    "openNowForCollection": true,
    "canPreorder": false,
    "temporarilyOffline": false,
    "nextOpeningTime": "2026-10-19T11:00:00",
    "deliveryEtaMinMinutes": 35,
    "deliveryEtaMaxMinutes": 50,
    "deliveryFee": 2.99,
    "minimumOrderValue": 10,
    "currency": "EUR",
    "deals": [
      "50 % Rabatt auf ausgewählte Produkte",
      "StampCard"
    ],
    "isNew": false,
    "isPremier": false,
    "distanceMeters": 1376,
    "displayRank": 2,
    "logoUrl": "https://res.cloudinary.com/tkwy-prod-eu/image/upload/c_pad,h_100,w_100/f_auto/q_auto/v1/static-takeaway-com/images/chains/de/the_mood_burger/logo_465x320.png",
    "areaUrl": "https://www.lieferando.de/lieferservice/essen/berlin-10115",
    "scrapedAt": "2026-10-18T12:57:59.563Z"
  },
  {
    "restaurantId": "13000472",
    "name": "Habba Habba",
    "brandName": null,
    "slug": "habba-habba-prenzlauer-berg",
    "menuUrl": "https://www.lieferando.de/speisekarte/habba-habba-prenzlauer-berg",
    "site": "lieferando.de",
    "country": "DE",
    "street": "Kastanienallee 15",
    "postalCode": "10435",
    "city": "Berlin",
    "latitude": 52.53885,
    "longitude": 13.409657,
    "cuisines": [
      "Falafel",
      "Angebote"
    ],
    "rating": 4.5,
    "ratingCount": 597,
    "offersDelivery": true,
    "offersCollection": false,
    "openNowForDelivery": true,
    "openNowForCollection": false,
    "canPreorder": false,
    "temporarilyOffline": false,
    "nextOpeningTime": "2026-10-19T11:00:00",
    "deliveryEtaMinMinutes": 25,
    "deliveryEtaMaxMinutes": 45,
    "deliveryFee": 3.19,
    "minimumOrderValue": 9,
    "currency": "EUR",
    "deals": [
      "50 % Rabatt auf ausgewählte Produkte",
      "StampCard"
    ],
    "isNew": false,
    "isPremier": false,
    "distanceMeters": 2017,
    "displayRank": 4,
    "logoUrl": "https://res.cloudinary.com/tkwy-prod-eu/image/upload/c_pad,h_100,w_100/f_auto/q_auto/v1/static-takeaway-com/images/restaurants/de/P1O100R3/logo_465x320.png",
    "areaUrl": "https://www.lieferando.de/lieferservice/essen/berlin-10115",
    "scrapedAt": "2026-10-18T12:57:59.563Z"
  },
  {
    "restaurantId": "9447323",
    "name": "La Piazza",
    "brandName": null,
    "slug": "la-piazza-10119",
    "menuUrl": "https://www.lieferando.de/speisekarte/la-piazza-10119",
    "site": "lieferando.de",
    "country": "DE",
    "street": "Zehdenicker Straße 20",
    "postalCode": "10119",
    "city": "Berlin",
    "latitude": 52.530582,
    "longitude": 13.405156,
    "cuisines": [
      "Italienisch",
      "Italienische Pizza",
      "Pasta",
      "Angebote"
    ],
    "rating": 4.9,
    "ratingCount": 1901,
    "offersDelivery": true,
    "offersCollection": true,
    "openNowForDelivery": true,
    "openNowForCollection": true,
    "canPreorder": false,
    "temporarilyOffline": false,
    "nextOpeningTime": "2026-10-19T10:30:00",
    "deliveryEtaMinMinutes": 25,
    "deliveryEtaMaxMinutes": 45,
    "deliveryFee": 1.9,
    "minimumOrderValue": 15,
    "currency": "EUR",
    "deals": [
      "2 für 1 Deal",
      "30 % Rabatt auf ausgewählte Produkte",
      "StampCard"
    ],
    "isNew": false,
    "isPremier": false,
    "distanceMeters": 1509,
    "displayRank": 6,
    "logoUrl": "https://res.cloudinary.com/tkwy-prod-eu/image/upload/c_pad,h_100,w_100/f_auto/q_auto/v1/static-takeaway-com/images/restaurants/de/RPR1O3QN/logo_465x320.png",
    "areaUrl": "https://www.lieferando.de/lieferservice/essen/berlin-10115",
    "scrapedAt": "2026-10-18T12:57:59.563Z"
  }
]
```

### Use cases

- **Market research and site selection:** count restaurants per cuisine, rating and delivery fee in any city or postcode before opening a location or dark kitchen.
- **Sales lead lists for B2B:** build lists of restaurant businesses (name, address, cuisine, rating) for food suppliers, POS, packaging or marketing services.
- **Competitor and price monitoring:** schedule daily runs to track delivery fees, minimum orders, ratings and promotions of chains and competitors.
- **Delivery-platform analytics:** compare coverage, delivery times and deals across Lieferando, Just Eat and Thuisbezorgd markets.
- **Data enrichment:** add ratings, review counts and coordinates to your own restaurant database.

### Integrations

- **API:** start runs and download results with the [Apify API](https://docs.apify.com/api/v2) or the Apify JavaScript/Python clients.
- **Scheduling:** run daily or weekly with Apify Schedules to follow ratings, fees and deals over time.
- **Webhooks:** get notified when a run finishes.
- **Google Sheets, Make, Zapier, n8n:** send results to your tools via Apify integrations.
- **AI agents (MCP):** let Claude, ChatGPT or any MCP client look up restaurants through the [Apify MCP server](https://mcp.apify.com).

### Limits and FAQ

**Is it legal?** The Actor reads only the public restaurant list pages anyone sees after entering a postcode, at a polite rate (a few pages per minute), and respects the sites' robots.txt (filter URLs with `?filter=` are not supported; use the Actor's own cuisine filter). It collects business data only: no review texts, no reviewer, owner or courier names, no phone numbers or e-mails. You are responsible for using the data in line with the sites' terms and applicable law, including the GDPR.

**Do I get menus and dish prices?** No, this Actor returns the restaurant list (one row per restaurant) with a `menuUrl` link. Menus are not scraped.

**Why does one run stop at ~1,000–2,000 results per URL?** That is how many restaurants deliver to that postcode. Add more area URLs (other postcodes or cities) for more coverage; duplicates across URLs are removed.

**My URL gives an error.** Use the URL of the restaurant list after entering a postcode. Unknown area URLs redirect to the home page, and the Actor tells you so instead of returning empty data.

**How fast is it?** One area page (hundreds to thousands of restaurants) takes a few seconds; 3,000 restaurants from three countries took 23 seconds in testing.

**Something broke?** Open an issue on the Issues tab with your input and it will be looked at promptly.

### Changelog / maintained

Last verified working: 2026-10-18 (Germany, UK, Netherlands, Belgium, Austria, Switzerland). See the changelog tab for changes.

# Changelog

This Actor's version history is a separate document: https://apify.com/polderdata/justeat-lieferando-scraper/changelog.md

# Actor input Schema

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

Restaurant-list pages from Lieferando (lieferando.de, lieferando.at), Thuisbezorgd (thuisbezorgd.nl), Takeaway.com (takeaway.com/be), Just Eat (just-eat.co.uk, just-eat.ch, just-eat.ie) and other Just Eat Takeaway.com sites. Open the site, enter a postcode, and copy the URL, e.g. https://www.lieferando.de/lieferservice/essen/berlin-10115 or https://www.just-eat.co.uk/area/ec1a-london.

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

The run stops after this many restaurants. One area page usually lists 500–2,000 restaurants. You pay per result, so this also caps the cost of a run.

## `cuisines` (type: `array`):

Keep only restaurants with at least one matching cuisine (case-insensitive, partial match, in the site's language), e.g. "pizza", "sushi", "burger". Empty = all.

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

Keep only restaurants that are open for delivery or collection at the time of the run.

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

Keep only restaurants with at least this star rating (0–5). Restaurants without a rating are excluded when this is set.

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

These sites block datacenter IPs, so the Actor uses Apify residential proxies by default and automatically picks an IP in each site's country (e.g. GB for just-eat.co.uk). Keep the default unless you know what you are doing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.lieferando.de/lieferservice/essen/berlin-10115"
    }
  ],
  "maxItems": 50,
  "cuisines": [],
  "openNowOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (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://www.lieferando.de/lieferservice/essen/berlin-10115"
        }
    ],
    "maxItems": 50,
    "cuisines": [],
    "openNowOnly": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("polderdata/justeat-lieferando-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://www.lieferando.de/lieferservice/essen/berlin-10115" }],
    "maxItems": 50,
    "cuisines": [],
    "openNowOnly": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("polderdata/justeat-lieferando-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://www.lieferando.de/lieferservice/essen/berlin-10115"
    }
  ],
  "maxItems": 50,
  "cuisines": [],
  "openNowOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call polderdata/justeat-lieferando-scraper --silent --output-dataset

```

## MCP server setup

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