TheFork Restaurant Reviews Scraper - Multi-Language
Pricing
from $2.29 / 1,000 reviews
TheFork Restaurant Reviews Scraper - Multi-Language
Extract all reviews from any TheFork restaurant across 7 languages. Get ratings, review text, meal dates, reviewer details, photos, and restaurant replies. Automatic deduplication. Export as JSON, CSV, or Excel.
Pricing
from $2.29 / 1,000 reviews
Rating
5.0
(1)
Developer
ClearPath
Maintained by CommunityActor stats
2
Bookmarked
49
Total users
12
Monthly active users
13 hours
Issues response
13 hours ago
Last modified
Categories
Share
TheFork Review Scraper | All Reviews, All Languages (2026)
5,000 reviews in under 5 minutes, in every language TheFork holds them.
⚡ Measured on Apify: 5,159 reviews from 4 restaurants in one run, 4 minutes 32 seconds, duplicates across language buckets removed.
| Restaurant and review tools | |||
➤ You are here | Restaurants, menus and details | 5 platforms, one export | Restaurants and availability |
For Google Maps, Yelp and Tripadvisor feedback about the restaurant, use Place Review Aggregator. Collect TheFork reviews here as a separate dataset.
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
clearpath/thefork-restaurant-reviews on Apify. Call: ApifyClient("TOKEN").actor("clearpath/thefork-restaurant-reviews").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: restaurantUrl (string, one restaurant) or restaurantUrls (array of strings, several restaurants in one run; supply one of the two), reviewLanguage (string), sortBy (string: newest/highest_rating/lowest_rating), reviewsSince (string: ISO date/timestamp, or a relative "2 days" / "1 week" / "3 months" resolved at run time for schedules; only reviews posted on/after it), maxReviews (integer). Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/clearpath~thefork-restaurant-reviews/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Pricing: PPE $2.99/1k reviews. Get token: https://console.apify.com/account/integrations
Why This Actor?
The main TheFork Scraper returns reviews in the restaurant's default language only. Many restaurants have reviews in French, English, German, Italian, Spanish, Dutch, and Portuguese, but a single-language query misses most of them.
This actor solves that: it queries each language separately, collects all reviews, and deduplicates by review ID. One restaurant URL in, every review out.
Quick Start
All languages — just a URL, reviews from every language merged and deduplicated:
{"restaurantUrl": "https://www.thefork.com/restaurant/el-lago-r2406"}
Several restaurants — one run, one dataset, every row tagged with its restaurant:
{"restaurantUrls": ["https://www.thefork.com/restaurant/el-lago-r2406","https://www.thefork.fr/restaurant/l-imperatif-r660609","https://www.thefork.it/ristorante/migasa-r754554"],"maxReviews": 200}
Single language — filter to one language:
{"restaurantUrl": "https://www.thefork.fr/restaurant/el-lago-r2406","reviewLanguage": "fr","maxReviews": 200}
Highest-rated first — sort by rating instead of date:
{"restaurantUrl": "https://www.thefork.com/restaurant/el-lago-r2406","sortBy": "highest_rating","maxReviews": 50}
Daily monitoring — on a schedule, look back from each run:
{"restaurantUrl": "https://www.thefork.com/restaurant/el-lago-r2406","reviewsSince": "2 days"}
A relative value is resolved when the run starts, so the same scheduled input keeps working. For a one-off catch-up, give an exact moment instead:
{"restaurantUrl": "https://www.thefork.com/restaurant/el-lago-r2406","reviewsSince": "2026-06-10T00:00:00Z"}
Pricing
| Apify Plan | Price per 1,000 Reviews |
| Free | $2.99 |
| Starter | $2.79 |
| Scale | $2.49 |
| Business | $2.29 |
Free Users
New users get 10 free runs with up to 50 reviews per run to test the actor before subscribing. Upgrade your plan for unlimited results.
Use Cases
|
Sentiment Analysis Collect all reviews across languages for NLP analysis. Detect trends in food quality, service, and ambience over time. |
Competitor Monitoring Track what guests say about competing restaurants. Compare ratings, complaint patterns, and response rates. |
|
Reputation Management Export all reviews including restaurant replies. Identify unanswered negative reviews and response gaps. |
Market Research Analyze review volume and ratings across languages to understand tourist vs. local dining patterns. |
|
New Review Monitoring Schedule recurring runs with reviewsSince set to a relative window such as 2 days, which is resolved fresh on every run. The run stops as soon as it reaches older reviews, so you only collect (and pay for) genuinely new ones. Pipe new low ratings into alerts or a reputation dashboard.
| |
Parameters
| Parameter | Type | Description |
restaurantUrl | string | TheFork restaurant URL. Country-specific domains and localized paths such as /ristorante/ and /restaurante/ are supported. |
restaurantUrls | array | Several restaurant URLs in one run. Reviews land in a single dataset, each row carrying its own restaurant name, ID and coordinates. maxReviews then applies to each restaurant separately. |
reviewLanguage | string | "All languages" iterates every language and merges. Or pick one: en, fr, de, it, es, nl, pt. Default: all |
sortBy | string | Review order: newest, highest_rating, or lowest_rating. With "All languages", applied within each language. Default: newest |
reviewsSince | string | Only reviews posted on/after this point (UTC). Accepts a relative 2 days, 1 week, 3 months, 1 year, resolved when the run starts, or an exact 2026-06-10 / 2026-06-10T14:30:00Z. Stops early, so you only collect new reviews. Forces newest order. Default: empty (all) |
maxReviews | integer | Max reviews to collect across all languages. 0 = no limit. Default: 0 |
Output
Each review is a flat dataset item with 37 fields:
Restaurant details — name, ID, full address (street, city, zip, country) and exact coordinates, on every row, so each row stands on its own.
Restaurant rating summary — overall rating (1-10 scale), total review count, and the category scores for food, service, and ambience, plus the restaurant's TripAdvisor rating (1-5 scale) and review count when available. These restaurant-level fields are identical on every row, so a single review gives you the full summary. The summary is also written to the run's key-value store under OUTPUT, together with a per-language review breakdown, so it is available even for restaurants that have ratings but no written reviews.
Review data — rating (1-10 scale), review text, occasion (romantic, business, family, friends), meal date, creation date, status, restaurant reply, photos, likes
Reviewer data — first name, last name, username, avatar URL, total review count, member-since date
Output Example
{"restaurant_id": "61beac0c-ba99-45d2-b7e5-70e067c86be7","restaurant_name": "El Lago","restaurant_city": "Marbella","restaurant_country": "Spain","restaurant_address": "Urb. Elviria Hills, Avda. Las Cumbres s/n, 29604, Marbella","restaurant_street": "Urb. Elviria Hills, Avda. Las Cumbres s/n","restaurant_zip_code": "29604","restaurant_latitude": 36.4894,"restaurant_longitude": -4.9066,"restaurant_overall_rating": 9.5,"restaurant_overall_review_count": 367,"restaurant_food_rating": 9.6,"restaurant_service_rating": 9.6,"restaurant_ambience_rating": 9.4,"restaurant_review_count": 172,"restaurant_tripadvisor_rating": null,"restaurant_tripadvisor_review_count": null,"review_id": "ac9a66c7-25b1-11f0-b007-0e8af7bd4d53","created_at": "2025-04-30T10:55:48.569Z","updated_at": "2025-04-30T10:55:48.569Z","rating_value": 10,"meal_date": "2025-04-29T18:00:00.000Z","status": "PUBLISHED","occasion": "ROMANTIC","review_body": "Love this place & the serenity, excellent food & amazing champagne/wine list","restaurant_reply_body": null,"restaurant_reply_status": null,"reviewer_id": "0be0b618-0202-4c66-ab88-da0067ce7f61","reviewer_first_name": "Jose","reviewer_last_name": "T.","reviewer_username": "Jose T.","reviewer_avatar_url": null,"reviewer_review_count": 2,"reviewer_member_since": "2019-08-14T09:12:33.104Z","photos": [{"id": "a39a94be-7c2e-4c1f-9d33-5f0b9a2e77d1","title": null,"description": null,"image_url": "https://cdn.thefork.com/tf-lab/image/upload/f_auto,q_auto,w_800,c_limit/customer/61beac0c.../a39a94be.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/61beac0c.../a39a94be.jpg","created_ts": "2025-04-30T10:57:34.768Z","likes": 0}],"likes": 0,"language": "en"}
Run Summary
The same restaurant-level figures, plus how the reviews split across languages, are written to the key-value store under OUTPUT. With several restaurants it holds a restaurants list of these same objects, one per restaurant:
{"restaurant_id": "61beac0c-ba99-45d2-b7e5-70e067c86be7","restaurant_name": "El Lago","restaurant_city": "Marbella","restaurant_country": "Spain","restaurant_address": "Urb. Elviria Hills, Avda. Las Cumbres s/n, 29604, Marbella","restaurant_street": "Urb. Elviria Hills, Avda. Las Cumbres s/n","restaurant_zip_code": "29604","restaurant_latitude": 36.4894,"restaurant_longitude": -4.9066,"restaurant_overall_rating": 9.5,"restaurant_overall_review_count": 367,"restaurant_food_rating": 9.6,"restaurant_service_rating": 9.6,"restaurant_ambience_rating": 9.4,"restaurant_review_count": 172,"restaurant_tripadvisor_rating": null,"restaurant_tripadvisor_review_count": null,"reviews_by_language": {"all": 172,"en": 96,"es": 61,"fr": 11,"null": 4}}
API Integration
Python
from apify_client import ApifyClientclient = ApifyClient("your_token")run = client.actor("clearpath/thefork-restaurant-reviews").call(run_input={"restaurantUrl": "https://www.thefork.com/restaurant/el-lago-r2406","reviewLanguage": "all","maxReviews": 500,})for review in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{review['language']} | {review['rating_value']} | {review['review_body'][:80]}")
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'your_token' });const run = await client.actor('clearpath/thefork-restaurant-reviews').call({restaurantUrl: 'https://www.thefork.com/restaurant/el-lago-r2406',reviewLanguage: 'all',maxReviews: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`${items.length} reviews collected`);
More Zen Studio & Clearpath review scrapers
🔗 Review aggregators
Place reviews
Hotel reviews
Software reviews
📍 Individual review sources
-
Google Maps -
Swarm / Foursquare -
Yelp -
Tripadvisor- Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions 📍 Place discovery
-
Business leads- Fast Business Leads Scraper - Up to 1,000 in 30 Seconds 🍽️ Restaurant review tools
-
TheFork
Supported Languages
|
EN English |
FR French |
DE German |
IT Italian |
ES Spanish |
NL Dutch |
PT Portuguese |
The actor auto-detects which languages have reviews for each restaurant. Set reviewLanguage to "all" to iterate all of them, or pick a specific code.
Data Export
|
JSON NLP pipelines, APIs |
CSV Spreadsheets, reporting |
Excel Dashboards, presentations |
FAQ
Can I scrape more than one restaurant per run?
Yes. Put the URLs in restaurantUrls, one per line. Every review lands in the same dataset, tagged with its restaurant name, ID and coordinates, so a single export covers the whole set. maxReviews applies to each restaurant, so ten URLs with maxReviews: 100 give you up to 1,000 reviews.
What restaurant information comes with each review?
Whatever identifies and locates the restaurant: ID, name, full address, city, country and coordinates, repeated on every row so a single review is self-contained and rows group straight into a pipeline.
Everything else about the restaurant itself, menus and dish prices, photos, features, opening hours, Michelin data, comes from TheFork Restaurant Scraper and joins onto these rows on restaurant_id.
How is this different from the main TheFork Scraper?
The main scraper returns reviews in one language per restaurant (the domain's default). This actor iterates all 7 languages separately, collecting reviews that only appear in non-default language buckets. It also deduplicates automatically.
Are reviews deduplicated?
Yes. The same review can appear in multiple language buckets. The actor tracks review IDs and skips duplicates.
Do I need a TheFork account?
No. All data is publicly available.
How many reviews can I extract?
No limit. Set maxReviews to 0 for all reviews. Restaurants typically have between 50 and 5,000 reviews across all languages.
Can I use any TheFork domain?
Yes. URLs from thefork.com, thefork.fr, thefork.de, thefork.it, and thefork.es all work.
Support
|
Need help? Email max@mapa.slmail.me or open an issue in the Issues tab. |
Legal Compliance
Extracts publicly available review data from TheFork. Users must comply with applicable data protection regulations (GDPR, CCPA) and TheFork's terms of service.
Built by Clearpath