TheFork Scraper - Restaurants, Menus & Reviews avatar

TheFork Scraper - Restaurants, Menus & Reviews

Pricing

from $2.39 / 1,000 restaurants

Go to Apify Store
TheFork Scraper - Restaurants, Menus & Reviews

TheFork Scraper - Restaurants, Menus & Reviews

Extract restaurant data from TheFork: ratings, menus with prices, reviews, photos, cuisine tags, and booking info. Search any city or scrape specific restaurant URLs.

Pricing

from $2.39 / 1,000 restaurants

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

TheFork Scraper - Restaurants, Menus & Reviews

Extract restaurant data from TheFork (Europe's largest restaurant booking platform, also known as LaFourchette and El Tenedor) without touching a browser or writing a scraper yourself. Search any city and filter by cuisine, price, or rating, or feed in specific restaurant URLs to get full profiles: ratings, menus with prices, opening hours, photos, and customer reviews.

Search any city on TheFork with filters for cuisine, price range, rating, and active promotions — get menus with per-dish prices, food/service/ambience rating breakdowns, and each restaurant's most recent reviews.

Copy to your AI assistant

Use the Apify actor "parsebird/thefork-scraper" via the ApifyClient. Example: client.actor("parsebird/thefork-scraper").call(run_input={"searchLocation": "Barcelona", "language": "es", "cuisineTagIds": ["436"], "minRating": 8, "maxRestaurants": 100, "maxReviews": 20}). Key inputs: searchLocation (string, city/neighborhood/address to search), startUrls (array of TheFork restaurant/city URLs, overrides searchLocation), language (en/fr/de/it/es, default en), reviewLanguage (default all), sort (popularity/avgRate/quality/promotion/newRestaurant/price/lastMonthAvg/lastMonthReservation, default popularity), bestRated (boolean), promotionsOnly (boolean), minPrice/maxPrice (integer), minRating/maxRating (1-10), cuisineTagIds (array of tag id strings), maxRestaurants (default 20, 0 = unlimited), maxReviews (default 20, 0 = skip -- TheFork's page reliably exposes about 20 recent reviews per restaurant regardless of a higher setting), maxPhotos (default 20, 0 = skip). Output: one dataset item per restaurant with identity, address/geolocation, ratings breakdown, price, menus with dish-level prices, payment methods, opening hours, photos, and a reviews array. Full API spec: https://apify.com/parsebird/thefork-scraper/api. Get an API token at https://console.apify.com/settings/integrations.

What does TheFork Scraper do?

TheFork Scraper is a TheFork API alternative that turns TheFork's restaurant search and restaurant profile pages into structured, ready-to-use data — no manual copy-pasting, no HTML parsing, no anti-bot headaches. Point it at a city and it returns every matching restaurant's rating, price, cuisine, menu, and reviews as clean JSON.

  • 🔍 Search by location — type any city, neighborhood, or address; typos and non-English spellings are resolved automatically
  • 🍽️ Full menus — every section and dish with its price, pulled straight from the restaurant's à la carte and fixed-price menus
  • Rating breakdown — TheFork score, TripAdvisor score, and the food/service/ambience sub-ratings shown on the restaurant page
  • 💬 Customer reviews — reviewer name, rating, review text, meal date, photos, and likes, newest first
  • 🎯 Filters — cuisine, price range, TheFork rating, top-rated status, and active promotions
  • 🔗 Two input modes — search a city, or scrape specific restaurant/search-result URLs directly
  • 🌍 Five languages — thefork.com, .fr, .de, .it, and .es

Built on the Apify platform, so every run also comes with scheduling for recurring monitoring, instant API and webhook access, integrations with Zapier/Make/Google Sheets, and export to JSON, CSV, Excel, HTML, or XML straight from the run's dataset.

Input parameters

ParameterTypeRequiredDefaultDescription
searchLocationstringNo*City, neighborhood, or address to search
startUrlsarrayNo*TheFork restaurant, city, or search-result URLs to scrape directly
languagestringNoenOutput language / TheFork domain: en, fr, de, it, es
reviewLanguagestringNoallOnly fetch reviews in this language
sortstringNopopularitySort order for search results
bestRatedbooleanNofalseOnly TheFork "Top Rated" restaurants
promotionsOnlybooleanNofalseOnly restaurants with an active discount
minPrice / maxPriceintegerNoAverage price per person range
minRating / maxRatingnumberNoTheFork rating range (1–10)
cuisineTagIdsarrayNoallCuisine filter (French, Italian, Japanese, Vegan, Seafood, and 27 more)
maxRestaurantsintegerNo20Max restaurants to scrape (0 = unlimited)
maxReviewsintegerNo20Max reviews per restaurant, newest first (0 = skip; TheFork reliably exposes ~20 per restaurant)
maxPhotosintegerNo20Max customer photos per restaurant (0 = skip)

*Provide either searchLocation or startUrls.

What data can you extract from TheFork?

FieldDescription
name, slug, url, legacy_idRestaurant identity and canonical URL
cuisine, tags, highlighted_tags, food_requirementsCuisine type and dietary/feature tags
country, locality, street, zip_code, latitude, longitudeAddress and geolocation
thefork_rating, tripadvisor_rating, food_rating, service_rating, ambience_ratingRating breakdown
avg_price, avg_price_currency, price_summaryAverage price per person
menusEvery menu section and dish, with descriptions and prices
payment_accepted, opening_hoursPractical booking info
is_bookable, has_active_promotion, best_promotion_discount_percentageBooking and offer status
is_insider, rate_distinction, michelinAwards and distinctions, where TheFork publishes them
main_photo_url, header_photos, restaurant_photos, customer_photosOfficial and customer photos
reviewsReviewer name, rating, review text, meal date, photos, likes

Output example

{
"id": "29b5df71-a3d9-4bdd-933f-76e8155f180b",
"legacy_id": 660609,
"slug": "l-imperatif",
"url": "https://www.thefork.com/restaurant/l-imperatif-r660609",
"name": "L'Imperatif",
"cuisine": "French",
"city_name": "Paris",
"street": "135 Boulevard Brune",
"zip_code": "75014",
"latitude": 48.8250292,
"longitude": 2.3183516,
"thefork_rating": 8.8,
"thefork_review_count": 6795,
"food_rating": 8.7,
"service_rating": 8.9,
"ambience_rating": 8.7,
"avg_price": 19.0,
"avg_price_currency": "EUR",
"is_bookable": true,
"has_active_promotion": true,
"best_promotion_discount_percentage": 50,
"payment_accepted": ["Credit Card", "Mastercard", "Visa", "Voucher"],
"menus": [
{
"name": "À la carte",
"menu_type": "A_LA_CARTE",
"sections": [
{
"name": "Entrées",
"items": [
{ "name": "Foie gras mi-cuit en terrine", "price": 15.9, "is_main_dish": false }
]
}
]
}
],
"reviews": [
{
"id": "45518763-e169-11ef-8d9e-0e8af7bd4d53",
"rating_value": 10,
"meal_date": "2025-02-01T17:00:00.000Z",
"review_body": "Excellent food and staff. Love this place and bring all my family and friends!",
"reviewer_name": "Martin G.",
"likes": 0
}
]
}

Use cases

  • Market research — benchmark restaurant pricing, ratings, and cuisine mix across a city or neighborhood
  • Lead generation — build a list of restaurants for a booking, POS, or marketing tool sales pipeline
  • Menu and price monitoring — track competitor menus and prices over time with a scheduled run
  • Review analysis — pull customer reviews at scale for sentiment analysis or reputation tracking
  • Site/app content — power a restaurant directory, recommendation app, or travel guide with structured data

How it works

  1. Enter a searchLocation (e.g. "Barcelona") or paste TheFork restaurant/city URLs into startUrls.
  2. Set optional filters: cuisine, price range, rating, top-rated only, or promotions only.
  3. Set maxRestaurants, maxReviews, and maxPhotos to control how much data comes back per run.
  4. Click Start. The actor resolves the location, pages through matching restaurants, and opens each restaurant's profile to collect ratings, menus, photos, and reviews.
  5. Download the results as JSON, CSV, Excel, HTML, or XML from the Dataset tab, or pull them via the Apify API / Python / JavaScript clients.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/thefork-scraper").call(run_input={
"searchLocation": "Barcelona",
"cuisineTagIds": ["436"],
"minRating": 8,
"maxRestaurants": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["thefork_rating"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/thefork-scraper').call({
searchLocation: 'Barcelona',
cuisineTagIds: ['436'],
minRating: 8,
maxRestaurants: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

How much does it cost to scrape TheFork?

TheFork Scraper uses pay-per-event pricing — you pay for what you extract, not for compute time.

EventPrice per eventPrice per 1,000
Restaurant extracted (includes full profile + first 50 reviews)$0.00299$2.99
Review beyond the first 50 per restaurant$0.00199$1.99

Scraping 100 restaurants costs about $0.30. The first 50 reviews per restaurant are included in that price at no extra charge — and since TheFork's restaurant page reliably exposes only around 20 recent reviews per restaurant, the review-beyond-50 charge rarely applies in practice. Paid Apify plans (Bronze/Silver/Gold) get lower per-event rates automatically.

Input / Output

The input form groups fields into Search by location, Or scrape specific URLs, Filters, and Limits, so first-time runs stay simple — just fill in a city and click Start. See the Input tab for the full schema, and the API tab for the JSON API spec.

Scraping publicly available data, like restaurant names, menus, and ratings shown on public TheFork pages, is generally legal, in line with rulings such as hiQ Labs v. LinkedIn. You are responsible for how you use the extracted data — do not scrape personal data or use it in ways that violate TheFork's terms of service or applicable data protection law (e.g. GDPR). Read more in Apify's guide to the legality of web scraping.

FAQ

Does this actor need a proxy? Yes — TheFork blocks non-residential and unrestricted-country traffic. A France-pinned RESIDENTIAL proxy is enabled by default in the input; you don't need to configure anything unless you want a different country.

Why do I only get around 20 reviews per restaurant? TheFork's restaurant page reliably renders about 20 of its most recent reviews. The actor pages for more up to maxReviews, and occasionally finds a few extra, but most restaurants will land around 20 regardless of a higher setting. You're only billed for reviews actually returned, so this never causes an overcharge.

Can I scrape just one restaurant? Yes — put its URL (e.g. https://www.thefork.com/restaurant/l-imperatif-r660609) in startUrls and leave searchLocation empty.

Does cuisineTagIds require an exact match? A restaurant matches if it has any of the selected cuisines — the filter is OR, not AND.

Can I run this on a schedule? Yes — use Apify's built-in Scheduler to run it daily, weekly, or on any cron interval for ongoing price or availability monitoring.

Something looks off or missing — where do I report it? Open an issue on the actor's Issues tab, or reach out via the actor's Apify Store page. Feedback shapes what gets fixed next.

Is there an API? Every Apify actor has a full REST API — see the API tab for ready-to-copy request examples in curl, Python, and JavaScript.