# TheFork Scraper - Restaurants, Reviews & Menus (`clearpath/thefork-scraper`) Actor

Extract restaurant data, reviews, menus with prices, and photos from TheFork. Get ratings, Michelin stars, TripAdvisor scores, contact details, booking availability, and 100+ fields. Supports 5 languages. Export as JSON, CSV, Excel.

- **URL**: https://apify.com/clearpath/thefork-scraper.md
- **Developed by:** [ClearPath](https://apify.com/clearpath) (community)
- **Categories:** Lead generation, Travel, Automation
- **Features:** Limited permissions
- **Stats:** 222 total users, 33 monthly users, 41.6% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.99 / 1,000 restaurants

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

## TheFork Scraper | Restaurant Data, Reviews, Menus & Photos (2026)

[![100+ fields per restaurant. Phone numbers. Emails. Menu prices.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/thefork-scraper-readme-hero-v1.png)](https://console.apify.com/actors/Jtb2nC8e8u4B0aXUv/input)

From <strong>Clearpath</strong>, creators of <a href="https://apify.com/clearpath/thefork-restaurant-reviews">TheFork Reviews</a>, <a href="https://apify.com/clearpath/yelp-reviews-scraper">Yelp Reviews</a> and <a href="https://apify.com/clearpath/tripadvisor-reviews-scraper">Tripadvisor Reviews</a>. Restaurant discovery and review research from the same team.

### Why choose this actor?

<strong>Build restaurant leads with useful contact details.</strong> Get phone numbers, published email addresses, websites and full addresses alongside cuisine, chef names and ratings. Start with a city or a list of restaurant pages, then filter the export to your ideal prospects.

<strong>Compare dishes and their prices.</strong> Export menu sections, dish names, descriptions and individual prices, plus fixed-menu offers where available. Useful for comparing local competitors and their menus.

<strong>Get 100+ fields in each restaurant record.</strong> Add Michelin distinctions, TheFork and Tripadvisor ratings, food/service/ambience scores, booking availability, photos and reviews to your research. Each restaurant stays together in one structured record.

<a href="https://console.apify.com/actors/Jtb2nC8e8u4B0aXUv/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/thefork-scraper-readme-cta-v1.svg" width="258" height="48" alt="Find restaurant leads"/></a>

### Quick start

Start with five restaurants in Paris, including contact details and menus. The empty URL list lets the location search take precedence:

```json
{
  "startUrls": [],
  "searchLocation": "Paris",
  "maxRestaurants": 5,
  "maxReviews": 10,
  "maxPhotos": 5
}
```

Contacts, menus and other details are included where published; some fields can be empty. This example requests up to 10 reviews per restaurant. The first 100 reviews per restaurant are included; additional reviews are billed separately. <a href="https://console.apify.com/actors/Jtb2nC8e8u4B0aXUv/input">Open actor input</a> to choose a city or paste restaurant URLs. Export CSV or Excel for prospecting, or JSON to preserve menus, photos and reviews.

<table><tr><td colspan="5" style="background:#8BFF6E;color:#003F38;padding:10px 14px;font-size:13px;font-weight:700">Restaurant & Review Tools</td></tr><tr><td style="background:#C9FFBA;padding:8px 10px;border:1px solid #BDDCAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-Jtb2nC8e8u4B0aXUv-9vhv0q4m14-thefork-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://console.apify.com/actors/Jtb2nC8e8u4B0aXUv/input" style="color:#003F38;text-decoration:none;font-weight:700;font-size:13px">TheFork Places</a></span><br><span style="color:#365530;font-size:12px;white-space:nowrap">You are here</span></td><td style="background:#E8FFDF;padding:8px 10px;border:1px solid #BDDCAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-GzM1sRA0QwmfnUjEb-QxgCbbKvfB-thefork-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/clearpath/thefork-restaurant-reviews" style="color:#003F38;text-decoration:none;font-weight:700;font-size:13px">TheFork Reviews</a></span><br><span style="color:#365530;font-size:12px;white-space:nowrap">Every language</span></td><td style="background:#E8FFDF;padding:8px 10px;border:1px solid #BDDCAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-AQGRB6KUvHqkSvHPj-KDZIkmFvBu-yelp-review-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/clearpath/yelp-reviews-scraper" style="color:#003F38;text-decoration:none;font-weight:700;font-size:13px">Yelp Reviews</a></span><br><span style="color:#365530;font-size:12px;white-space:nowrap">Photos & replies</span></td><td style="background:#E8FFDF;padding:8px 10px;border:1px solid #BDDCAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-w0KUpCAUnd23Z9mTB-56fastRocJ-tripadvisor-review-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/clearpath/tripadvisor-scraper" style="color:#003F38;text-decoration:none;font-weight:700;font-size:13px">Tripadvisor Places</a></span><br><span style="color:#365530;font-size:12px;white-space:nowrap">Places & contacts</span></td><td style="background:#E8FFDF;padding:8px 10px;border:1px solid #BDDCAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-2EJcvIYcO9H0KQOIO-r9WyLYmWGc-place-review-aggregator.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/zen-studio/place-review-aggregator" style="color:#003F38;text-decoration:none;font-weight:700;font-size:13px">Place Reviews</a></span><br><span style="color:#365530;font-size:12px;white-space:nowrap">5 platforms</span></td></tr></table>

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
clearpath/thefork-scraper on Apify. Call: ApifyClient("TOKEN").actor("clearpath/thefork-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: startUrls (array), searchLocation (string), maxRestaurants (integer). Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/clearpath~thefork-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Pricing: PPE $5.99/1k restaurants, $3.99/1k reviews (beyond 100 included per restaurant). Get token: https://console.apify.com/account/integrations To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
```

### Quick Start

#### Basic — Scrape restaurants in a city

```json
{
    "searchLocation": "Paris"
}
```

#### URL input — Scrape specific pages

```json
{
    "startUrls": [
        "https://www.thefork.com/restaurant/l-imperatif-r660609",
        "https://www.thefork.com/restaurants/paris-c415144"
    ]
}
```

#### Advanced — Filtered search with limits

```json
{
    "searchLocation": "Barcelona",
    "language": "es",
    "cuisineTagIds": ["436", "452"],
    "minRating": 8,
    "maxPrice": 40,
    "promotionsOnly": true,
    "sort": "avgRate",
    "maxRestaurants": 200,
    "maxReviews": 500,
    "maxPhotos": 50
}
```

### Input Parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `startUrls` | array | TheFork URLs to scrape. Supports restaurant, city, and search pages. | — |
| `searchLocation` | string | City, neighborhood, or address to search. Typos and non-English names work. | — |
| `searchRadiusKm` | integer | Radius (km) around `searchLocation`. Only applies when the location is a small town/village without a TheFork city profile (large cities use their own polygon). | `10` |
| `language` | string | Output language and TheFork domain. Options: `en`, `fr`, `de`, `it`, `es`. | `en` |
| `reviewLanguage` | string | Filter reviews by language. `all` returns default domain language. Options: `all`, `en`, `fr`, `de`, `it`, `es`, `nl`, `pt`. | `all` |
| `sort` | string | Sort order for location searches. Options: `popularity`, `avgRate`, `quality`, `promotion`, `newRestaurant`, `price`, `lastMonthAvg`, `lastMonthReservation`. | `popularity` |
| `bestRated` | boolean | Only return top-rated restaurants. | `false` |
| `promotionsOnly` | boolean | Only return restaurants with active promotions. | `false` |
| `minPrice` | integer | Minimum average price per person (EUR). | — |
| `maxPrice` | integer | Maximum average price per person (EUR). | — |
| `minRating` | number | Minimum TheFork rating (1-10). | — |
| `maxRating` | number | Maximum TheFork rating (1-10). | — |
| `cuisineTagIds` | array | Filter by cuisine type. 32 options including French, Italian, Japanese, Vegan, Seafood, etc. | all |
| `maxRestaurants` | integer | Max restaurants to scrape. Set `0` for unlimited. | `100` |
| `maxReviews` | integer | Reviews per restaurant, newest first. Set `0` to skip reviews entirely. For unlimited reviews from a single restaurant, use [TheFork Reviews](https://apify.com/clearpath/thefork-restaurant-reviews). | `100` |
| `maxPhotos` | integer | Customer photos per restaurant. Official photos always included. Set `0` to skip customer photos. | `20` |

### Output

Each restaurant is one dataset item with 104 fields:

**Identity** (6 fields) — TheFork ID, legacy ID, slug, canonical URL, and name.

**Cuisine and highlights** (9 fields) — Cuisine type, description, chef, tags, dietary options, and the feature list shown on the listing.

**Contact and location** (14 fields) — Phone, email, website, full postal address, coordinates, parking, and transport directions.

**Ratings** (11 fields) — TheFork and TripAdvisor scores with review counts, the food, service and ambience breakdown, and the split of reviews by language.

**Reviews** (17 fields) — The full review list, plus the highlighted and best-rated reviews with their authors.

**Awards and guides** (14 fields) — Michelin stars, distinctions and review text, TheFork awards, Insider status, and top-chart position.

**Prices and menus** (14 fields) — Average price and currency, every menu with its dishes and prices, accepted payment methods, and the loyalty scheme.

**Booking and availability** (8 fields) — Bookability, live availability, upcoming booking slots, current offers, and vacation status.

**Photos** (8 fields) — Header, restaurant and customer photo lists with their counts.

**Legal** (3 fields) — Company register details and privacy URL, where the restaurant publishes them.

#### Output Example

```json
{
    "id": "d878352e-a8c6-4483-9e99-f74a59b68078",
    "legacy_id": 35146,
    "slug": "l-atelier-de-joel-robuchon-etoile-champs-elysees",
    "url": "https://www.thefork.com/restaurant/l-atelier-de-joel-robuchon-etoile-champs-elysees-r35146",
    "name": "L'Atelier de Joël Robuchon Etoile - Champs Elysées",
    "cuisine": "French",
    "description": null,
    "chef_name": "Éric Bouchenoire ",
    "phone": "+33147237575",
    "is_bookable": true,
    "is_test": false,
    "is_new": false,
    "has_stock": true,
    "vacation": null,
    "has_available_offers": false,
    "main_photo_url": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_664,h_374,c_fill/restaurant/d878352e-a8c6-4483-9e99-f74a59b68078/6e4e9b01-6174-4f6b-b379-d4afdbdaf15d.jpg",
    "food_requirements": [
        "Gluten free",
        "Locally produced",
        "Organic food",
        "Vegetarian dishes"
    ],
    "payment_accepted": [
        "American Express",
        "Apple Pay",
        "Mastercard",
        "MobilePay",
        "Visa"
    ],
    "rate_distinction": "Fabulous",
    "avg_price": 97,
    "avg_price_currency": "EUR",
    "thefork_rating": 8.9,
    "thefork_review_count": 2104,
    "tripadvisor_rating": 4,
    "tripadvisor_review_count": 1673,
    "country": "France",
    "locality": "Paris",
    "street": "30 Rue Vernet",
    "zip_code": "75008",
    "latitude": 48.8723858,
    "longitude": 2.2970681,
    "parking": "Service voiturier",
    "transport": "Métro Charles de Gaulle- Etoile (M1, M9, RER A)",
    "additional_information": null,
    "michelin": {
        "stars": 1,
        "link": "https://guide.michelin.com/en/ile-de-france/paris/restaurant/l-atelier-de-joel-robuchon-etoile",
        "review": "With no less than two establishments in the French capital, Joël Robuchon’s renowned Ateliers are literally making their way around the world. The ..."
    },
    "is_insider": true,
    "is_top_host": false,
    "tf_awards_year": null,
    "top_chart_rank": null,
    "top_chart_size": null,
    "top_chart_location_type": null,
    "top_chart_location_id": null,
    "top_chart_location_name": null,
    "reviews_summary_content": null,
    "reviews_summary_last_update": null,
    "highlighted_review_id": "abb80b5d-df01-447e-ba27-984cb36d6bcc",
    "highlighted_review_created_ts": "2026-08-22T11:18:54.622Z",
    "highlighted_review_rating": 10,
    "highlighted_review_content": "We had a wonderful lunch today. The team explained every dish clearly, which made the whole experience feel thoughtful and welcoming. A great moment and a great lunch ove...",
    "highlighted_review_reviewer_id": "f5270981-71ad-4cc1-ad75-9e93bc8b27d8",
    "highlighted_review_reviewer_name": "Hiu  C.",
    "highlighted_review_reviewer_avatar": null,
    "header_photos": [
        {
            "id": "6e4e9b01-6174-4f6b-b379-d4afdbdaf15d",
            "resizedImageUrls": {
                "url664x374": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_664,h_374,c_fill/restaurant/d878352e-a8c6-4483-9e99-f74a59b68078/6e4e9b01-6174-4f6b-b379-d4afdbdaf15d.jpg",
                "url1080x": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_1080,c_fill/restaurant/d878352e-a8c6-4483-9e99-f74a59b68078/6e4e9b01-6174-4f6b-b379-d4afdbdaf15d.jpg"
            }
        },
        // ... 8 more
    ],
    "header_photos_additional_count": 767,
    "customer_photos_total": 762,
    "menu_photos_total": 0,
    "food_photos_total": 649,
    "has_reservations_today": 1,
    "tags": [
        {
            "id": "311",
            "name": "American Express"
        },
        {
            "id": "2473",
            "name": "Apple Pay"
        },
        {
            "id": "314",
            "name": "Mastercard"
        },
        {
            "id": "1671",
            "name": "MobilePay"
        },
        // ... 58 more
    ],
    "highlighted_tag": [
        {
            "text": "INSIDER",
            "highlightType": "INSIDER"
        },
        {
            "text": "MICHELIN",
            "highlightType": "MICHELIN_1_star"
        },
        // ... 2 more
    ],
    "yums_is_super": false,
    "yums_description": null,
    "yums_count": 100,
    "available_menus": [],
    "bookable_intervals": [
        {
            "date": "2026-09-09",
            "isToday": true,
            "intervals": [
                {
                    "start": 720,
                    "end": 915
                },
                {
                    "start": 1140,
                    "end": 1290
                }
            ]
        },
        // ... 6 more
    ],
    "top_features": [],
    "feature_categories": [
        {
            "name": "Features",
            "category": "ESSENTIALS",
            "features": [
                {
                    "name": "Air-conditioning"
                },
                {
                    "name": "Dog-Friendly"
                },
                {
                    "name": "Wheelchair Accessible"
                },
                // ... 2 more
            ]
        },
        // ... 3 more
    ],
    "legal_privacy_url": null,
    "legal_register_name": null,
    "legal_register_number": null,
    "legal_website": "http://www.joel-robuchon.com/",
    "legal_email": "reservationetoile@atelierjr.fr",
    "pay_at_table_enabled": false,
    "pay_at_table_mastercard_yums": null,
    "use_your_yums": null,
    "earn_double_yums_count": null,
    "exchange_rates": [
        {
            "yumsCost": 1000,
            "discountMoney": {
                "value": 2000,
                "currency": {
                    "isoCurrency": "EUR"
                }
            }
        },
        // ... 1 more
    ],
    "marketing_offer": null,
    "formatted_address": "30 Rue Vernet, 75008, Paris",
    "formatted_short_address": "75008, Paris",
    "insider_description": null,
    "insider_tips": null,
    "michelin_distinctions": [
        {
            "value": "MICHELIN_1_star",
            "description": "One MICHELIN Star: High quality cooking, worth a stop!"
        }
    ],
    "michelin_review": "With no less than two establishments in the French capital, Joël Robuchon’s renowned Ateliers are literally making their way around the world. The ...",
    "michelin_link": "https://guide.michelin.com/en/ile-de-france/paris/restaurant/l-atelier-de-joel-robuchon-etoile",
    "best_rating_value": 10,
    "best_rating_created_at": "2026-08-22T11:18:54.622Z",
    "best_rating_review_body": "We had a wonderful lunch today. The team explained every dish clearly, which made the whole experience feel thoughtful and welcoming. A great moment and a great lunch ove...",
    "best_rating_reviewer_name": "Hiu  C.",
    "best_rating_reviewer_avatar": null,
    "best_rating_reviewer_review_count": 17,
    "best_rating_reviewer_username": "Hiu  C.",
    "menus": [
        {
            "offer_uuid": null,
            "name": "À la carte",
            "raw_name": "À la carte",
            "price": null,
            "price_currency": null,
            "exclusion": null,
            "footer": null,
            "is_bookable": false,
            "has_stock": false,
            "menu_type": "A_LA_CARTE",
            "description": null,
            "updated_ts": "2026-03-10T15:00:49.438Z",
            "sections": [
                {
                    "name": "Starter",
                    "items": [
                        {
                            "name": "Le pâte en croûte (en veau, au foie gras de canard et pistaches)",
                            "description": "en duo de pomme et avocat, aux pousses de salades, sorbet à la moutarde verte",
                            "price": 42,
                            "is_main_dish": false
                        },
                        {
                            "name": "LE HOMARD ",
                            "description": "sur des feuilles de romaine, mozzarella et avocat à l’huile d’olive au curcuma",
                            "price": 52,
                            "is_main_dish": false
                        },
                        {
                            "name": "LA BRESAOLA DE BŒUF WAGYU",
                            "description": "escortée de pain toasté à la tomate",
                            "price": 59,
                            "is_main_dish": false
                        },
                        // ... 3 more
                    ]
                },
                {
                    "name": "Main course",
                    "items": [
                        {
                            "name": "La burger (foie gras d canard,aux poivrons arlequins verjuté)",
                            "description": "au homard européen ou au caviard impérial de Sologne",
                            "price": 69,
                            "is_main_dish": true
                        },
                        {
                            "name": "LE HOMARD «FRITE »",
                            "description": "rôti au beurre demi-sel ravigoté d’une émulsion épicée aux aromates",
                            "price": 89,
                            "is_main_dish": true
                        },
                        {
                            "name": "LA SOLE ",
                            "description": "entière de petit bateau, « Belle Meunière »",
                            "price": 79,
                            "is_main_dish": true
                        },
                        // ... 9 more
                    ]
                },
                {
                    "name": "LES PLATS EN PETITES PORTIONS DÉGUSTATION",
                    "items": [
                        {
                            "name": "LA DAURADE ROYALE",
                            "description": "en carpaccio, au citron et à la fleur de sel, \"Neige Grand Cru de Batz\"",
                            "price": 39,
                            "is_main_dish": false
                        },
                        {
                            "name": "LA FAMEUSE GELÉE DE CAVIAR DE JOËL ROBUCHON",
                            "description": "à la crème de chou-fleur",
                            "price": 49,
                            "is_main_dish": false
                        },
                        {
                            "name": "LE FOIE GRAS ",
                            "description": "frais de canard au nature, pain de campagne toasté",
                            "price": 39,
                            "is_main_dish": false
                        },
                        // ... 16 more
                    ]
                },
                // ... 3 more
            ]
        },
        // ... 5 more
    ],
    "highlighted_menu_items": [],
    "pros": [],
    "food_rating": 9.2,
    "service_rating": 8.7,
    "ambience_rating": 8.6,
    "rating_count": 2104,
    "review_count": 823,
    "language_stats": {
        "all": 823,
        "de": 5,
        "en": 199,
        "es": 24,
        "fr": 546,
        "it": 13,
        "pt": 19,
        "zh": 3,
        "null": 14
    },
    "restaurant_photos": [
        {
            "id": "6e4e9b01-6174-4f6b-b379-d4afdbdaf15d",
            "src": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_664,h_374,c_fill/restaurant/d878352e-a8c6-4483-9e99-f74a59b68078/6e4e9b01-6174-4f6b-b379-d4afdbdaf15d.jpg",
            "title": null,
            "created_ts": "2020-10-08T08:34:15.938Z",
            "url_664x374": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_664,h_374,c_fill/restaurant/d878352e-a8c6-4483-9e99-f74a59b68078/6e4e9b01-6174-4f6b-b379-d4afdbdaf15d.jpg",
            "url_1080x": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_1080,c_fill/restaurant/d878352e-a8c6-4483-9e99-f74a59b68078/6e4e9b01-6174-4f6b-b379-d4afdbdaf15d.jpg"
        },
        // ... 13 more
    ],
    "customer_photos": [
        {
            "id": "dea29fa7-6f8b-4f69-9762-98e348dc2263",
            "image_url": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_800,c_limit/customer/d878352e-a8c6-4483-9e99-f74a59b68078/dea29fa7-6f8b-4f69-9762-98e348dc2263.jpg",
            "title": "IMG_0557.jpeg",
            "description": null
        },
        // ... 4 more
    ],
    "reviews": [
        {
            "id": "f5eb5f4c-f246-49ba-b1a8-dd682b86a6cb",
            "created_at": "2026-08-11T08:35:59.687Z",
            "updated_at": "2026-08-11T08:35:59.687Z",
            "rating_value": 10,
            "meal_date": "2026-08-09T10:30:00.000Z",
            "status": "PUBLISHED",
            "occasion": "FRIENDS",
            "review_body": "Every dish is delicious and the portion is so big",
            "restaurant_reply_body": "Dear Angelina Zhou,\n\nThank you so much for this perfect 10/10 review and your wonderful feedback! \n\nWe are delighted to hear that you thoroughly enjoyed our dishes and ap...",
            "restaurant_reply_status": "PUBLISHED",
            "reviewer_id": "c725ec36-7098-4d45-a1dd-0fed94a230e2",
            "reviewer_first_name": "Angelina",
            "reviewer_last_name": "Z.",
            "reviewer_username": "Angelina Z.",
            "reviewer_avatar_url": null,
            "reviewer_review_count": 1,
            "reviewer_member_since": "2026-07-23T08:13:57.306Z",
            "photos": [
                {
                    "id": "4622988e-85dd-4d25-b73c-78b785bca67d",
                    "title": null,
                    "description": null,
                    "image_url": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_800,c_limit/customer/d878352e-a8c6-4483-9e99-f74a59b68078/4622988e-85dd-4d25-b73c-78b785bca67d.jpg",
                    "preview_url": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,g_auto:subject,w_488,h_488,c_fill/customer/d878352e-a8c6-4483-9e99-f74a59b68078/4622988e-85dd-4d25-b73c-78b785bca67d.jpg",
                    "created_ts": "2026-08-11T08:37:20.708Z",
                    "likes": 0
                },
                {
                    "id": "21532a7a-3559-400b-a42c-2e5621ce0c1b",
                    "title": null,
                    "description": null,
                    "image_url": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_800,c_limit/customer/d878352e-a8c6-4483-9e99-f74a59b68078/21532a7a-3559-400b-a42c-2e5621ce0c1b.jpg",
                    "preview_url": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,g_auto:subject,w_488,h_488,c_fill/customer/d878352e-a8c6-4483-9e99-f74a59b68078/21532a7a-3559-400b-a42c-2e5621ce0c1b.jpg",
                    "created_ts": "2026-08-11T08:37:19.567Z",
                    "likes": 0
                },
                // ... 6 more
            ],
            "likes": 0
        },
        // ... up to 2,104 more reviews
    ]
}
```

### Pricing — Pay Per Event (PPE)

Two billable events:

1. **Restaurant scraped** — charged per restaurant extracted (includes the first 100 reviews)
2. **Review scraped** — charged per review beyond the 100 included with each restaurant

| Tier | Per 1,000 restaurants | Per 1,000 reviews (beyond 100) |
|------|----------------------|-------------------------------|
| Regular | $5.99 | $3.99 |
| Bronze | $5.33 | $3.49 |
| Silver | $4.66 | $2.99 |
| Gold | $3.99 | $2.49 |

#### Free Usage

Free plan includes **10 runs** with up to **50 restaurants per run** (and a sample of reviews per restaurant) — enough to evaluate the output before committing. [Upgrade your plan](https://console.apify.com/billing/subscription) for unlimited results.

### How to Scrape TheFork Restaurant Data

#### Using URLs

Paste any TheFork URL directly:

- **Restaurant page** — `https://www.thefork.com/restaurant/l-imperatif-r660609`
- **City page** — `https://www.thefork.com/restaurants/paris-c415144`
- **Search URL** — Copy a filtered search URL from TheFork, filters are preserved

Mix URL types freely. Each is processed independently.

#### Using Location Search

Enter any location name in `searchLocation`. Accepts cities, neighborhoods, addresses, landmarks. Typos and non-English names are handled automatically:

- `"Paris"`, `"Barclona"`, `"Milano"`, `"Montmartre"`, `"Champs-Elysees"`

Combine with filters (`cuisineTagIds`, `minPrice`, `maxPrice`, `minRating`, `bestRated`, `promotionsOnly`, `sort`) to narrow results.

**Small towns and villages.** Large cities have their own TheFork profile and return tightly-scoped results. Smaller places (no TheFork city profile) fall back to coordinate-based search and return restaurants from a wider area. Use `searchRadiusKm` to control this — defaults to `10` km, set tighter (e.g. `3`) for village-only results or wider (e.g. `50`) for the surrounding region. Ignored for large cities.

```json
{
    "searchLocation": "Saint-Tropez",
    "language": "fr",
    "searchRadiusKm": 5
}
```

#### Combining Both

Use `startUrls` and `searchLocation` together. URLs are processed first, then location search adds more results.

### API Integration

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("your_token")

run = client.actor("YOUR_ACTOR_ID").call(run_input={
    "searchLocation": "Paris",
    "language": "fr",
    "maxRestaurants": 50,
    "maxReviews": 200,
})

for restaurant in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{restaurant['name']} — {restaurant['thefork_rating']}/10 — {restaurant['avg_price']}€")
    for review in restaurant.get("reviews", []):
        print(f"  [{review['rating_value']}/10] {review['review_body'][:80]}")
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'your_token' });

const run = await client.actor('YOUR_ACTOR_ID').call({
    searchLocation: 'Rome',
    language: 'it',
    cuisineTagIds: ['436'],
    maxRestaurants: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} Italian restaurants in Rome`);
```

### Advanced Usage

#### Scrape Italian restaurants in Barcelona with promotions

```json
{
    "searchLocation": "Barcelona",
    "language": "es",
    "cuisineTagIds": ["436"],
    "promotionsOnly": true,
    "sort": "promotion",
    "maxRestaurants": 200
}
```

#### Extract many reviews for specific restaurants

```json
{
    "startUrls": [
        "https://www.thefork.com/restaurant/l-imperatif-r660609"
    ],
    "maxReviews": 500,
    "reviewLanguage": "fr"
}
```

Need every review for one restaurant? Use [TheFork Reviews](https://apify.com/clearpath/thefork-restaurant-reviews) — it's purpose-built for unlimited single-restaurant review extraction.

#### Budget-friendly restaurants in Berlin

```json
{
    "searchLocation": "Berlin",
    "language": "de",
    "maxPrice": 25,
    "bestRated": true,
    "sort": "avgRate",
    "maxRestaurants": 100
}
```

#### Restaurant data only, no reviews

```json
{
    "searchLocation": "London",
    "maxReviews": 0,
    "maxRestaurants": 500
}
```

#### High-volume city export with minimal reviews

```json
{
    "searchLocation": "London",
    "maxRestaurants": 2000,
    "maxReviews": 10,
    "maxPhotos": 0
}
```

### Data Export

Results are available in multiple formats:

- **JSON** — Nested structures (menus, reviews, photos) fully preserved
- **CSV** — Flat fields, arrays serialized
- **Excel** — Spreadsheet-ready

### Automation

- **Scheduled runs** — Daily, weekly, or monthly data refreshes
- **Webhooks** — Get notified when a run completes
- **API** — Integrate into your data pipeline programmatically

### FAQ

**Q: What data does TheFork Scraper extract?**
A: Everything visible on a TheFork restaurant listing: name, contact info (phone, email), full menus with dish prices, all customer reviews, photos, ratings (TheFork + TripAdvisor), Michelin data, booking availability, promotions, tags, and more. Over 100 fields per restaurant.

**Q: How many restaurants can I scrape?**
A: No hard limit. Set `maxRestaurants` to control how many results come back from search/city pages. Direct restaurant URLs are always processed regardless of this limit.

**Q: How fast is it?**
A: Approximately 1,000 restaurants in under 60 seconds for basic data. Deep review extraction (hundreds of reviews per restaurant) adds only a few seconds.

**Q: Do I need a TheFork account?**
A: No. The scraper works without any login or authentication.

**Q: Which countries are supported?**
A: All countries where TheFork operates: France, Germany, Italy, Spain, UK, Belgium, Netherlands, Portugal, Switzerland, Austria, and others. Set the `language` parameter to match your target market.

**Q: Can I filter reviews by language?**
A: Yes. Use `reviewLanguage` to get reviews in English, French, German, Italian, Spanish, Dutch, or Portuguese. Default returns reviews matching your selected domain language.

**Q: How are reviews sorted?**
A: Reviews are returned newest first. Set `maxReviews` to control how many you get per restaurant. Set `0` to skip reviews entirely. For unlimited reviews from a single restaurant, use the dedicated [TheFork Reviews](https://apify.com/clearpath/thefork-restaurant-reviews) actor.

**Q: What about Michelin restaurants?**
A: Michelin data is included when available: star distinctions, Michelin review text, and a link to the Michelin Guide page.

**Q: Can I get full menu prices?**
A: Yes. The output includes complete a la carte menus and preset/fixed menus with every dish name, description, price, and section (starters, mains, desserts, wine list).

**Q: Is there a free trial?**
A: Yes. Free plan includes 10 runs with up to 50 restaurants per run (with a sample of reviews per restaurant). Enough to evaluate the data quality and format before upgrading.

**Q: How does the pricing work for reviews?**
A: The first 100 reviews per restaurant are included in the restaurant scrape cost. Reviews beyond 100 are charged separately. If you only need recent reviews, keep the default `maxReviews: 100` and pay nothing extra.

### Getting Started

#### 1. Try it free

1. [Sign up for Apify](https://console.apify.com/sign-up) — no credit card required
2. Open TheFork Scraper
3. Enter a city name or paste a TheFork URL
4. Click **Start** and inspect the results

#### 2. Configure

1. **Input** — Paste URLs or enter a search location
2. **Filters** — Set cuisine, price range, rating, promotions
3. **Limits** — Control restaurants, reviews, and photos per run
4. **Language** — Pick your target locale

#### 3. Scale

1. Use the API for programmatic access
2. Schedule recurring runs for fresh data
3. Set up webhooks for pipeline automation

### More Zen Studio & Clearpath review scrapers

**🔗 Review aggregators**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-2EJcvIYcO9H0KQOIO-RfOMRAFXbQ-local-business-leads-scraper.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Place reviews**
  - [Place Review Aggregator](https://apify.com/zen-studio/place-review-aggregator)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-qIdkSE8q4I8DIfNlD-lKLPnrjTrn-hotel-review-aggregator-logo2.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Hotel reviews**
  - [Hotel Review Aggregator API: Google, Booking, Expedia & More](https://apify.com/clearpath/hotel-review-aggregator)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-9UyFQFcuwmvWG91uH-BWRrsdwsuQ-software-reviews-aggregator-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Software reviews**
  - [All-in-One Review Scraper: G2, Capterra & Trustpilot](https://apify.com/zen-studio/software-review-scraper)

**📍 Individual review sources**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ojjo6BxQiOiLYRca1-RU3DuH650K-google-maps-directions-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Google Maps**
  - [Google Maps Reviews Scraper - Unlimited Reviews Per Place](https://apify.com/zen-studio/google-maps-reviews-scraper)
  - [Google Maps Scraper - Every Place, Not Just the Top 250](https://apify.com/zen-studio/google-maps-scraper)

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-sv8jAMKDT0AnGB24l-NYt0D11tLA-swarm-foursquare-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Swarm / Foursquare**
  - [Foursquare & Swarm Scraper: Places, Reviews, Busy Hours](https://apify.com/zen-studio/swarm-place-reviews-scraper)

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-AQGRB6KUvHqkSvHPj-KDZIkmFvBu-yelp-review-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Yelp**
  - [Yelp Reviews Scraper - All Languages & Owner Replies](https://apify.com/clearpath/yelp-reviews-scraper)

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-w0KUpCAUnd23Z9mTB-56fastRocJ-tripadvisor-review-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Tripadvisor**
  - [Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions](https://apify.com/clearpath/tripadvisor-reviews-scraper)
  - [Tripadvisor Scraper - Hotels, Restaurants, Attractions, Emails](https://apify.com/clearpath/tripadvisor-scraper)
    **📍 Place discovery**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-4VOKn4ssqn7AQJIUP-tDQgAGNQZE-local-business-leads-scraper.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Business leads**
  - [Fast Business Leads Scraper - Up to 1,000 in 30 Seconds](https://apify.com/clearpath/local-business-lead-extractor)
    **🍽️ Restaurant review tools**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-GzM1sRA0QwmfnUjEb-QxgCbbKvfB-thefork-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **TheFork**
  - [TheFork Restaurant Reviews Scraper - Multi-Language](https://apify.com/clearpath/thefork-restaurant-reviews)

### Legal Compliance

This scraper extracts publicly available data from TheFork listings. Users are responsible for complying with TheFork's terms of service and applicable data protection regulations (GDPR, CCPA). Use extracted data responsibly and in accordance with local laws.

**Contact data**: Phone numbers and email addresses are included when publicly listed. Comply with anti-spam regulations when using contact information.

### Support

- **Email**: max@mapa.slmail.me
- **Bugs**: Issues tab on the Actor page
- **Features**: Email or issues

***

[**Start Scraping TheFork Restaurants Now**](https://console.apify.com/actors/Jtb2nC8e8u4B0aXUv)

***

*Complete restaurant intelligence from Europe's largest dining platform.*

# Actor input Schema

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

TheFork URLs to scrape. Supports restaurant pages, city pages, and search URLs with embedded filters. Mix types freely.

## `searchLocation` (type: `string`):

Alternative to URLs. City, neighborhood, or address. Typos and non-English names work fine (e.g. "Barclona", "Milano").<br><br>Ignored when URLs are provided above.

## `searchRadiusKm` (type: `integer`):

Geographic radius around <b>Search location</b>, in kilometers.<br><br>Only applies to small towns and villages where TheFork falls back to coordinate-based search (large cities use their own polygon and ignore this).<br><br>Default <code>10 km</code>. Increase (e.g. <code>50</code>) for wider coverage of rural areas, or decrease (e.g. <code>3</code>) for tighter scoping.

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

Controls the language of descriptions, cuisine names, tags, and reviews. Also determines the TheFork domain used.

## `reviewLanguage` (type: `string`):

Filter reviews by language. Pick <b>All languages</b> to keep every review regardless of language, or pick a specific language to filter.

## `sort` (type: `string`):

Sort order for search results. Only applies to location-based searches, not to URLs.

## `bestRated` (type: `boolean`):

Only return top-rated restaurants.

## `promotionsOnly` (type: `boolean`):

Only return restaurants with active promotions or deals.

## `minPrice` (type: `integer`):

Minimum average price per person in euros. Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Maximum average price per person in euros. Leave empty for no maximum.

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

Minimum TheFork rating (1-10 scale). Leave empty for no minimum.

## `maxRating` (type: `number`):

Maximum TheFork rating (1-10 scale). Leave empty for no maximum.

## `cuisineTagIds` (type: `array`):

Filter by cuisine type. Select one or more. Leave empty for all cuisines.

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

Maximum restaurants to scrape. Set to <code>0</code> for no limit. Applies to both search results and direct restaurant URLs.

## `maxReviews` (type: `integer`):

Reviews per restaurant, newest first. Set to <code>0</code> to skip reviews entirely.<br><br>For unlimited reviews from a single restaurant, use <a href="https://apify.com/clearpath/thefork-restaurant-reviews" target="_blank">TheFork Reviews</a> instead.

## `maxPhotos` (type: `integer`):

Customer photos per restaurant, paginated. Official restaurant photos (~19) are always included regardless of this setting. Set to <code>0</code> to skip customer photos entirely.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.thefork.com/restaurants/paris-c415144"
  ],
  "searchRadiusKm": 10,
  "language": "en",
  "reviewLanguage": "all",
  "sort": "popularity",
  "bestRated": false,
  "promotionsOnly": false,
  "cuisineTagIds": [],
  "maxRestaurants": 20,
  "maxReviews": 20,
  "maxPhotos": 20
}
```

# Actor output Schema

## `results` (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": [
        "https://www.thefork.com/restaurants/paris-c415144"
    ],
    "searchRadiusKm": 10,
    "language": "en",
    "reviewLanguage": "all",
    "sort": "popularity",
    "maxRestaurants": 20,
    "maxReviews": 20,
    "maxPhotos": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("clearpath/thefork-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": ["https://www.thefork.com/restaurants/paris-c415144"],
    "searchRadiusKm": 10,
    "language": "en",
    "reviewLanguage": "all",
    "sort": "popularity",
    "maxRestaurants": 20,
    "maxReviews": 20,
    "maxPhotos": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("clearpath/thefork-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": [
    "https://www.thefork.com/restaurants/paris-c415144"
  ],
  "searchRadiusKm": 10,
  "language": "en",
  "reviewLanguage": "all",
  "sort": "popularity",
  "maxRestaurants": 20,
  "maxReviews": 20,
  "maxPhotos": 20
}' |
apify call clearpath/thefork-scraper --silent --output-dataset

```

## MCP server setup

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