TheFork Restaurant Scraper - Reviews, Prices & Menus
Pricing
from $2.00 / 1,000 restaurants
TheFork Restaurant Scraper - Reviews, Prices & Menus
Scrape restaurants from TheFork — name, cuisine, price level, average price, rating & reviews, address, geo-coordinates, photos, MICHELIN distinction, deals and amenities. Paste a city/search or restaurant URL. One row per restaurant, optional detail enrichment. JSON/CSV out.
Pricing
from $2.00 / 1,000 restaurants
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
TheFork Restaurant Scraper 🍽️
Extract restaurants from TheFork at scale — name, cuisine, price level, average price, rating & review count, full address, geo-coordinates, photos, MICHELIN distinction, deals, payment methods and amenities. Paste a city / search page to harvest every restaurant, or a restaurant page for a single detailed row. Optional detail enrichment adds the full description, chef, weekly opening hours, food requirements, MICHELIN link, parking & transport.
One flat row per restaurant. Clean JSON / CSV / Excel out. No login, no browser automation, no cookies to manage.

Why use this scraper
- Paste-a-URL simple. Copy any TheFork city, cuisine, area or restaurant URL from your browser and drop it in. It's auto-classified — no config puzzles.
- Everything on the card, already structured. ~25 fields per restaurant straight from the search page (rating, price, cuisine, geo, photos, MICHELIN, deals) — no detail fetch required.
- Optional deep enrichment. Flip one toggle to add description, chef name, weekly opening hours, dietary options, MICHELIN guide link, parking and transport notes.
- Residential-grade delivery. Runs through a rotating residential pool that clears TheFork's bot protection reliably — fast pure-HTTP, no headless browser tax.
- Fails loud, never silent. If every request is blocked, the run errors instead of quietly returning zero rows.
What it scrapes
| Category | Fields |
|---|---|
| Identity | restaurantId, uuid, name, slug, restaurantUrl |
| Dining | cuisine, priceRangeLevel (1–4), averagePrice, currency |
| Reputation | rating (out of 10), reviewsCount, reviewSummary |
| Location | street, locality, zipCode, country, formattedAddress, latitude, longitude |
| Media | mainPhotoUrl, photos[] |
| Signals | michelin, distinctions[], deals[], paymentAccepted[], tags[], hasLoyaltyProgram, isBookable |
| Detail (opt-in) | description, chefName, foodRequirements[], openingHours{}, michelinUrl, parking, transport, monthlyReviewsCount |
Supported inputs
Paste any mix into startUrls — they're auto-classified:
- City / search pages —
https://www.thefork.com/restaurants/london-c665790(also cuisine, area and tag pages under/restaurants/...). Paginated into a restaurant list. - Restaurant pages —
https://www.thefork.com/restaurant/the-lanesborough-grill-r597933. Scraped as one fully-detailed row.
Works across TheFork's country sites (.com, .co.uk, .fr, .es, .it, …).
Use cases
- Market & competitor research — map cuisine mix, price levels and ratings across a city or neighbourhood.
- Lead lists for food-tech / suppliers — geo-located restaurant directories with contact-ready addresses.
- Review & reputation monitoring — track rating and review-count movements over time.
- MICHELIN / fine-dining datasets — filter to distinctions for premium segmentation.
- Real-estate & location analytics — restaurant density and quality as a neighbourhood signal.
How it works
- You paste TheFork city/search and/or restaurant URLs.
- Each search page is fetched and paginated (
?p=N); the embedded__NEXT_DATA__JSON yields ~25 fully-structured restaurant objects per page. - Each restaurant page is parsed from its Apollo state into a single rich row.
- With Scrape restaurant detail pages on, every search result is enriched from its own detail page.
- Rows are de-duplicated by restaurant id and streamed to the dataset.
Requests go through a rotating residential proxy pool with automatic retry on bot-protection challenges — a blocked IP is swapped for a fresh one and the request re-tried.
Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | London city page | TheFork search/city and/or restaurant URLs. |
scrapeDetails | boolean | false | Also fetch each restaurant's detail page for description, chef, hours, dietary, MICHELIN link, parking & transport. |
maxItems | integer | 1000 | Hard cap on rows for the whole run (one paid restaurant event each). |
maxItemsPerSearch | integer | 2000 | Cap per search / city URL. |
maxConcurrency | integer | 6 | Parallel requests (keep 4–8). |
maxRequestRetries | integer | 15 | Per-request retry budget on bot-protection challenges. |
proxy | object | Residential (GB) | Proxy for free-tier runs; paid runs use a built-in residential pool. |
Output sample
{"rowType": "restaurant","restaurantId": "597933","uuid": "7d024fe6-2cd1-4754-92f0-fa05bba8c9ea","name": "The Lanesborough Grill","slug": "the-lanesborough-grill","restaurantUrl": "https://www.thefork.com/restaurant/the-lanesborough-grill-r597933","cuisine": "British","priceRangeLevel": 4,"averagePrice": 85,"currency": "GBP","rating": 9.6,"reviewsCount": 1002,"street": "London","locality": "London","zipCode": "SW1X 7TA","country": "United Kingdom","formattedAddress": "London, SW1X 7TA, London","latitude": 51.5023626,"longitude": -0.1524159,"mainPhotoUrl": "https://cdn.thefork.com/tf-lab/image/upload/restaurant/7d024fe6-…jpg","photos": ["https://cdn.thefork.com/…", "…"],"michelin": true,"distinctions": ["MICHELIN", "TOPHOST"],"deals": ["Yums x2"],"paymentAccepted": ["Apple Pay", "Credit Card", "Mastercard", "Visa"],"hasLoyaltyProgram": true,"isBookable": true,"reviewSummary": "The Lanesborough Grill, located in a stunning historical building near Knightsbridge, offers a delightful dining experience…","chefName": "Shay Cooper","foodRequirements": ["Gluten free", "Vegan dishes", "Vegetarian dishes"],"openingHours": { "mon": ["07:00-10:30", "14:30-16:00", "18:30-21:30"] },"michelinUrl": "https://guide.michelin.com/gb/en/…","sourceMode": "search","scrapedAt": "2026-07-06T03:25:12.197Z"}
FAQ
Do I need a TheFork account or API key? No. Just paste URLs.
How do I get a city URL? Search your city on thefork.com and copy the URL from the address bar (it looks like /restaurants/london-c665790).
How many restaurants per city? TheFork exposes up to ~2,100 restaurants per geography (86 pages × 25). Use maxItemsPerSearch to cap.
What's the difference between the two modes? Search/city pages already carry ~25 fields per restaurant with no extra fetch. Turn on Scrape restaurant detail pages for the full description, chef, opening hours and dietary info (about 2× the requests).
Which currencies? Prices come back in each restaurant's local currency (currency field), e.g. GBP, EUR.
Is it reliable against bot protection? Yes — the actor uses residential IPs with automatic rotation and retry, and fails loudly rather than returning empty results.
Support
Found a missing field or a page that won't parse? Open an issue on the actor's Issues tab with the exact URL — most fixes ship the same week.
⚠️ Disclaimer
This scraper collects only publicly available information from TheFork restaurant listing and search pages. It does not access private data, user accounts, or anything behind a login. Use the output responsibly and in compliance with TheFork's Terms of Service and applicable laws (including data-protection regulations such as GDPR). You are responsible for how you use the extracted data.
SEO keywords
thefork scraper, thefork restaurant scraper, thefork data extraction, restaurant data scraper, thefork api, scrape thefork restaurants, restaurant listings scraper, michelin restaurants dataset, restaurant ratings scraper, thefork uk scraper, restaurant geo data, dining data extraction, thefork london restaurants, restaurant reviews data, food-tech lead lists