# Resto Restaurants Search Scraper (`stealth_mode/resto-restaurants-search-scraper`) Actor

Scrape restaurant listings from Resto.be — Belgium's leading dining platform. Collect names, addresses, cuisine types, ratings, coordinates, reservation info, and 30+ fields per restaurant for market research, lead generation, or directory building.

- **URL**: https://apify.com/stealth\_mode/resto-restaurants-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Resto.be Restaurant Scraper: Extract Belgian Restaurant Data

---

### What Is Resto.be?

Resto.be is Belgium's primary online restaurant discovery platform, listing thousands of dining establishments across Brussels, Ghent, Antwerp, and beyond. It provides detailed profiles including menus, ratings, reservation availability, and location data. Manually extracting this information is impractical at scale — the **Resto.be Restaurant Scraper** automates collection from search result pages, delivering structured records ready for analysis.

---

### Overview

The **Resto.be Scraper** processes restaurant search/listing pages and extracts rich profile data for each result. Ideal for:

- **Restaurant aggregators** building or enriching dining directories
- **Market researchers** analysing Belgian F&B landscape by region or cuisine
- **Sales teams** generating hospitality sector leads
- **Developers** feeding data into reservation or review platforms

---

### Input Format

```json
{
  "urls": [
    "https://www.resto.be/restaurant/bruxelles?searchPage=2&randomSeed=-452753312"
  ],
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | Array of strings | URLs of Resto.be restaurant **search/listing pages** to scrape. Add one per line or use bulk edit. Example: `https://www.resto.be/restaurant/bruxelles` |
| `max_items_per_url` | Integer | Maximum number of restaurant records to collect per URL. Default: `20`. Set higher (e.g., `200`) for full-page extraction. |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues running when a URL fails instead of stopping the entire run. Recommended for bulk jobs. Default: `true`. |

> **Tip:** To paginate through results, adjust the `searchPage` query parameter in your URLs (e.g., `?searchPage=1`, `?searchPage=2`). The `randomSeed` parameter maintains consistent ordering across pages — copy it from your browser session for accurate pagination.

***

### Output Format

**Sample output**

```json
{
  "business_id": 186567,
  "business_type_id": 1,
  "business_name": "Jalebi - Restaurant indien",
  "street": "Avenue de Laeken  33",
  "zip": "1090",
  "city": "Jette",
  "region": "Bruxelles",
  "phone": "+32486543091",
  "has_old_reservation_form": false,
  "cuisines": [
    "Indienne"
  ],
  "url": "https://www.resto.be/restaurant/bruxelles/1090-jette/186567-jalebi-restaurant-indien/",
  "neighbourhoods": null,
  "pictures": [
    "https://images.resto.com/view?iid&context=default&width=620&height=350&imageType=JPEG&hash=ffca00860f3c601ce30f6c7e6af5833f",
    "https://images.resto.com/view?iid&context=default&width=620&height=350&imageType=JPEG&hash=ffca00860f3c601ce30f6c7e6af5833f"
  ],
  "lon": "4.323691",
  "lat": "50.871163",
  "avg_rating_1": null,
  "avg_rating_2": null,
  "avg_rating_3": null,
  "avg_rating_combined": "8.766666",
  "nr_of_ratings": "14",
  "nr_of_menus": 0,
  "nr_of_promotions": 0,
  "timeslots": [],
  "has_tablebooker": false,
  "tablebooker_id": "01049362",
  "paid_tablebooker_profile": false,
  "description": "Un voyage gustatif\nAUX MILLES SAVEURS\nOsez l'expérience d'une cuisine indienne raffinée. Notre secret ? Des produits frais triés sur le volet ; des chefs expérimentés ; un service sur mesure. ",
  "budget_id": null,
  "accommodation_ids": [
    470,
    450
  ],
  "neighbourhood_ids": null,
  "budget_price": null,
  "city_url": "restaurant/1090-jette",
  "client": true,
  "premium": false,
  "top_result": false,
  "from_url": "https://www.resto.be/restaurant/bruxelles?searchPage=2&randomSeed=-452753312"
}
```

Each restaurant returns a record with 35+ fields:

#### Identity & Location

| Field | Meaning |
|---|---|
| `Business ID` | Unique internal Resto.be identifier |
| `Business Type ID` | Category type code for the establishment |
| `Business Name` | Restaurant's display name |
| `Street` | Street address |
| `ZIP` | Postal code |
| `City` | City name |
| `Region` | Belgian region (e.g., Brussels-Capital, Flanders, Wallonia) |
| `Neighbourhoods` | Named neighbourhoods associated with the listing |
| `Neighbourhood IDs` | Internal IDs for neighbourhood tags |
| `Displayed Location` | Formatted location string as shown on the site |
| `City URL` | Resto.be city-level listing URL |
| `URL` | Direct URL to the restaurant's Resto.be profile |

#### Contact

| Field | Meaning |
|---|---|
| `Phone` | Restaurant phone number |

#### Cuisine & Description

| Field | Meaning |
|---|---|
| `Cuisines` | Cuisine types (e.g., Italian, Belgian, Asian Fusion) |
| `Description` | Restaurant description as shown on the profile |
| `Budget ID` | Internal code for price range tier |
| `Budget Price` | Human-readable price range (e.g., €€, €€€) |
| `Accommodation IDs` | IDs for special accommodation features |

#### Ratings & Activity

| Field | Meaning |
|---|---|
| `Average Rating 1` | Rating score from dimension 1 (e.g., food quality) |
| `Average Rating 2` | Rating score from dimension 2 (e.g., service) |
| `Average Rating 3` | Rating score from dimension 3 (e.g., ambiance) |
| `Average Rating Combined` | Overall combined rating score |
| `Number Of Ratings` | Total count of user ratings |
| `Number Of Menus` | Number of menus published on the profile |
| `Number Of Promotions` | Active promotions or deals listed |

#### Reservation & Booking

| Field | Meaning |
|---|---|
| `Has Old Reservation Form` | Whether the legacy reservation form is active |
| `Has Tablebooker` | Whether online table booking via Tablebooker is enabled |
| `Tablebooker ID` | Tablebooker integration identifier |
| `Paid Tablebooker Profile` | Whether the restaurant has a paid Tablebooker subscription |
| `Timeslots` | Available booking time slots |

#### Media

| Field | Meaning |
|---|---|
| `Pictures` | Array of image URLs for the restaurant |
| `Longitude` | Geographic longitude coordinate |
| `Latitude` | Geographic latitude coordinate |

#### Listing Tier

| Field | Meaning |
|---|---|
| `Client` | Whether the restaurant is a paying Resto.be client |
| `Premium` | Whether the listing has premium placement |
| `Top Result` | Whether the listing is featured as a top result in search |

***

### How to Use

1. **Find listing URLs** — Search for restaurants on Resto.be by city or cuisine. Copy the full search results URL including query parameters.
2. **Configure input** — Paste URLs into the `urls` array. Set `max_items_per_url` to match the expected number of results per page (typically up to 20–50 per page on Resto.be).
3. **Enable failure tolerance** — Keep `ignore_url_failures: true` for multi-URL runs.
4. **Run & export** — Download results as JSON, CSV, or Excel.

**Common issues:**

- If results are empty, confirm the URL is a **search/listing page**, not a single restaurant profile page.
- For consistent multi-page scraping, preserve the `randomSeed` value across paginated URLs.

***

### Use Cases & Business Value

- **Lead generation:** Build contact lists of restaurants by city, cuisine, or budget tier
- **Competitive analysis:** Map restaurant density and rating distribution across Belgian cities
- **Reservation platform integration:** Identify Tablebooker-enabled venues for partnership outreach
- **Directory enrichment:** Populate or update dining databases with fresh coordinates, photos, and hours

***

### Conclusion

The **Resto.be Restaurant Scraper** delivers comprehensive, structured data from Belgium's top dining platform. With detailed output across location, ratings, booking, and listing tier fields, it supports everything from market analysis to lead generation — without a single manual copy-paste.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the restaurants list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.resto.be/restaurant/bruxelles?searchPage=2&randomSeed=-452753312"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.resto.be/restaurant/bruxelles?searchPage=2&randomSeed=-452753312"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/resto-restaurants-search-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 = {
    "urls": ["https://www.resto.be/restaurant/bruxelles?searchPage=2&randomSeed=-452753312"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/resto-restaurants-search-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 '{
  "urls": [
    "https://www.resto.be/restaurant/bruxelles?searchPage=2&randomSeed=-452753312"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/resto-restaurants-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Resto Restaurants Search Scraper",
        "description": "Scrape restaurant listings from Resto.be — Belgium's leading dining platform. Collect names, addresses, cuisine types, ratings, coordinates, reservation info, and 30+ fields per restaurant for market research, lead generation, or directory building.",
        "version": "0.0",
        "x-build-id": "0YVi3NDltG4X43KOO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~resto-restaurants-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-resto-restaurants-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~resto-restaurants-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-resto-restaurants-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~resto-restaurants-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-resto-restaurants-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the restaurants list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the restaurants list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
