# Thuisbezorgd & Takeaway.com Scraper (`jarvismoney/thuisbezorgd-takeaway-scraper`) Actor

Scrape restaurant listings from Thuisbezorgd.nl (NL) and Takeaway.com (BE): ratings, delivery fees, minimum order, cuisines, ETA and offers per postcode. Monitoring mode for new openings.

- **URL**: https://apify.com/jarvismoney/thuisbezorgd-takeaway-scraper.md
- **Developed by:** [Philipp Merz](https://apify.com/jarvismoney) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Thuisbezorgd.nl & Takeaway.com Restaurant Scraper

Extract restaurant listings from **[Thuisbezorgd.nl](https://www.thuisbezorgd.nl)** (Netherlands) and **[Takeaway.com](https://www.takeaway.com/be)** (Belgium) as clean structured JSON. Enter any postcode or address and get every restaurant that delivers there — with ratings, delivery fees, minimum order values, cuisines, delivery ETA and current offers.

Fast and reliable: this actor reads Just Eat Takeaway's own data directly, so a search returns hundreds of restaurants in seconds with no missing fields. No account, no proxy needed.

### What you get

One JSON object per restaurant:

```json
{
  "id": 16505750,
  "name": "Pizza'dam Rozengracht",
  "url": "https://www.thuisbezorgd.nl/en/menu/pizzadam-new",
  "brand": "Thuisbezorgd.nl",
  "street": "Rozengracht 12",
  "postalCode": "1016LR",
  "city": "Amsterdam",
  "latitude": 52.3725,
  "longitude": 4.8812,
  "rating": 3.9,
  "ratingCount": 878,
  "cuisines": ["Italian style pizza", "American style pizza", "Vegan"],
  "deliveryFee": 1.49,
  "minimumOrder": 14.99,
  "deliveryEtaMinutes": "20-45",
  "isOpenNow": true,
  "isNew": false,
  "deals": ["10% off your first order"],
  "searchedAddress": "1011 AB Amsterdam, Netherlands",
  "scrapedAt": "2026-07-07T18:05:00.000Z"
}
```

### Use cases

- **Delivery-market research** — coverage, delivery-fee and minimum-order benchmarks, rating distributions and cuisine mix per city or neighbourhood.
- **Restaurant lead generation** — build targeted lists of restaurants (by city, cuisine, rating) for POS, payments, packaging or supplier sales.
- **Competitor & pricing intelligence** — track delivery fees, ETAs and offers across an area over time.
- **New-opening alerts** — monitoring mode surfaces restaurants that newly appear or start delivering to an area.

### Input

| Field | Type | Notes |
|---|---|---|
| `addresses` | array | Postcodes or address strings. NL postcode is enough (`1011AB`); for Belgium use a fuller address (`Meir 1, Antwerpen`). |
| `country` | string | `nl` (Thuisbezorgd.nl) or `be` (Takeaway.com Belgium) |
| `serviceType` | string | `delivery` (default) or `collection` |
| `openNowOnly` | boolean | Only restaurants currently open for the chosen service |
| `cuisines` | array | Optional filter, e.g. `["pizza","sushi"]` (case-insensitive) |
| `maxRestaurants` | integer | Cap per run (default 500) — keeps costs predictable |
| `newRestaurantsOnly` | boolean | Monitoring mode: only restaurants not seen in previous runs of the same search |
| `language` | string | `en` (default) or `nl` for restaurant page URLs |

Minimal example:

```json
{
  "addresses": ["1011AB Amsterdam", "3011 Rotterdam"],
  "country": "nl",
  "cuisines": ["sushi"]
}
```

### Monitoring mode — new openings & coverage changes

With `newRestaurantsOnly` enabled, the actor remembers which restaurant IDs it has already output **per search configuration** (same addresses + filters = same memory). The first run establishes a baseline; each later run outputs only restaurants that are new to that area — restaurants that just opened, or that started delivering to your postcode. Schedule it daily and connect a webhook or email integration for automatic alerts.

### Export & integrations

Results land in an Apify dataset — export as **JSON, CSV, Excel or XML**, or connect **Zapier, Make, Slack, Google Sheets, webhooks** and the platform's other integrations.

```bash
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"addresses": ["1011AB Amsterdam"], "country": "nl"}'
```

### Fields reference

Restaurant identity (`id`, `name`, `uniqueName`, `url`, `brand`), location (`street`, `postalCode`, `city`, `latitude`, `longitude`), reputation (`rating`, `ratingCount`), economics (`deliveryFee`, `minimumOrder`, `deliveryEtaMinutes` plus `deliveryEtaLower`/`deliveryEtaUpper`, `driveDistanceMeters`), status (`isOpenNow`, `isDelivery`, `isCollection`, `isNew`, `isPremier`, `isTemporarilyOffline`), marketing (`cuisines`, `deals`, `tags`, `logoUrl`), and search context (`searchedAddress`, `searchedQuery`, `serviceType`, `scrapedAt`).

### Data & fair use

- Only **publicly visible restaurant/business data** is collected — the same information any visitor sees when browsing.
- **No personal data**: no customer, reviewer or courier information is touched — business listings only.
- Reasonable request rates. This is business/commercial data with low GDPR exposure.

### FAQ

**Do I need proxies?** No. Leave the proxy option off unless runs ever start failing.

**Does it scrape full menus and item prices?** Not in this version — it returns the restaurant listing and delivery data, which is what most market-research and lead-gen use cases need. Menu-level extraction is on the roadmap; open an issue if you need it and describe your use case.

**A monitoring run returned 0 restaurants — bug?** No: it means nothing new appeared in that area since the previous run. That's the signal working.

**Belgium address didn't resolve?** Bare Belgian postcodes are ambiguous (a "1000" can match a house number). Pass a street + city (e.g. `Meir 1, Antwerpen`).

### Support

Missing a field or hitting an issue? Open an issue on the actor's **Issues tab** — it's monitored and fixes usually ship within hours.

# Actor input Schema

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

One or more delivery locations to search. A postcode works for the Netherlands (e.g. <code>1011AB</code>); for Belgium use a fuller address (e.g. <code>Meir 1, Antwerpen</code>) since bare postcodes can be ambiguous. Each location returns all restaurants that deliver there.

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

Which Just Eat Takeaway brand to search.

## `serviceType` (type: `string`):

Restaurants offering delivery to the address, or collection near it.

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

Only return restaurants currently open for the chosen service type.

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

Optional. Only keep restaurants whose cuisines include any of these terms (case-insensitive, e.g. <code>pizza</code>, <code>sushi</code>). Leave empty for all.

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

Stop after this many restaurants (per run, across all addresses). Keeps costs predictable.

## `newRestaurantsOnly` (type: `boolean`):

Only output restaurants not seen in previous runs with the same search settings. Ideal on a schedule to track new openings or restaurants newly delivering to an area.

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

Language for localized text and restaurant page URLs.

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

This actor needs no proxy by default. Leave as-is unless runs start failing.

## Actor input object example

```json
{
  "addresses": [
    "1011AB Amsterdam"
  ],
  "country": "nl",
  "serviceType": "delivery",
  "openNowOnly": false,
  "cuisines": [],
  "maxRestaurants": 500,
  "newRestaurantsOnly": false,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "1011AB Amsterdam"
    ],
    "cuisines": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("jarvismoney/thuisbezorgd-takeaway-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": ["1011AB Amsterdam"],
    "cuisines": [],
}

# Run the Actor and wait for it to finish
run = client.actor("jarvismoney/thuisbezorgd-takeaway-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "1011AB Amsterdam"
  ],
  "cuisines": []
}' |
apify call jarvismoney/thuisbezorgd-takeaway-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jarvismoney/thuisbezorgd-takeaway-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/taWhtCgmyjRgZMA0C/builds/BKhfC2Y6pPOEOP6Gk/openapi.json
