OpenTable Scraper & API — Restaurants and Reviews
Pricing
from $7.00 / 1,000 restaurant scrapeds
OpenTable Scraper & API — Restaurants and Reviews
Scrape OpenTable restaurants and diner reviews by city, cuisine or URL: rating, price band, address, phone and website. USD 10 per 1,000 restaurants.
Pricing
from $7.00 / 1,000 restaurant scrapeds
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
1
Bookmarked
9
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
OpenTable Scraper works like an unofficial OpenTable API: give it a city, neighborhood, cuisine or restaurant URL and it returns structured OpenTable restaurant data (name, rating, review count, cuisine, price band, address, coordinates, phone and website) plus optional diner reviews. It is built for restaurant market researchers, hospitality sales teams and AI agents, and costs USD 10 per 1,000 restaurants on the FREE tier (USD 3 per 1,000 reviews when reviews are switched on), with no login or setup.
The Actor handles data access itself, so you only choose what to search for. Every run writes one dataset row per restaurant and a SUMMARY record that says whether the run delivered data, found nothing, or was blocked.
What restaurant data does OpenTable Scraper return?
Each dataset row is one OpenTable restaurant with up to 43 fields. Fields OpenTable does not show for a restaurant are null, never guessed.
| Field | What you get |
|---|---|
name, url, restaurantId | Restaurant name, OpenTable profile URL and numeric OpenTable ID |
description | The restaurant's own OpenTable description |
rating, reviewCount, totalReviewCount | Overall diner rating (1–5) and review counts |
ratingFood, ratingService, ratingAmbience, ratingValue, ratingNoise | Sub-ratings and noise level (filled from the profile page; see limits) |
primaryCuisine, cuisines | Main cuisine and all cuisine tags |
priceTier, priceRange | OpenTable price tier (1–4) and its label, for example $31 to $50 |
address, latitude, longitude | Street, city, state, postcode and coordinates |
neighborhood, metro | Neighborhood and metro area, for example TriBeCa, New York City |
phoneNumber, website | Contact phone and the restaurant's website or ordering link |
diningStyle, dressCode, hoursOfOperation, executiveChef | Dining style, dress code, opening hours and chef |
parkingInfo, publicTransit, crossStreet | Directions and parking notes |
features, hasPrivateDining, hasTakeout, hasDeliveryDirect | Bar, counter, high-top and outdoor seating, max party size, private dining, takeout, delivery |
paymentOptions, additionalDetails | Accepted cards and extra amenity tags |
imageUrl, photoUrls | Main photo and gallery photo URLs |
topReviewText, recentReservationCount | A highlighted review snippet and OpenTable's recent booking count |
reviews | Individual diner reviews when includeReviews is on, otherwise [] |
scrapedAt, sourceUrl | Extraction time and the search or profile page used |
Is there an official OpenTable API for restaurant data?
OpenTable's own APIs are aimed at restaurants and approved technology partners, for example to sync reservations. If you need public listing and review data for many restaurants, this Actor returns it through the Apify API (REST, JavaScript or Python) without a partner agreement. It reads only what OpenTable shows publicly: it does not book tables, return open time slots or access diner accounts.
How do I scrape OpenTable reviews?
Set includeReviews to true and choose maxReviewsPerRestaurant (1 to 500, default 20). The Actor opens each restaurant's profile page and pages through its reviews. Each review carries the review ID and text, dined and submitted dates, overall, food, service, ambience and value ratings, noise rating, the reviewer's public nickname, initials and city, VIP badge, approved-review count, and helpful-vote counts. You pay per review delivered, on top of the restaurant record.
When should I use OpenTable Scraper, and when not?
Use it when:
- you need OpenTable restaurants for a city, neighborhood or cuisine, for example
Italian Chicagoorsushi San Francisco; - you want OpenTable ratings, price bands and diner reviews for competitive or menu research;
- an AI agent needs fresh restaurant facts with a source URL.
Use another Actor when:
- the restaurant is not on OpenTable, or you need phone-and-website leads from maps: Google Maps Restaurant Scraper;
- you need Tripadvisor reviews and hospitality leads: Tripadvisor Review & Hospitality Leads;
- you need Yelp listings: Yelp Business Scraper;
- you need restaurants in Japan: Tabelog Japan Restaurant Scraper.
Do not use it to book tables, check live availability, or collect private diner data.
Input examples
Search a city with the default settings (this is the prefilled input):
{"searchTerms": ["New York"],"maxResults": 20}
Search two markets, keep only the two highest price tiers, and sort nearest first:
{"searchTerms": ["Italian Chicago", "sushi San Francisco"],"maxResults": 100,"priceBands": ["3", "4"],"sortBy": "distance"}
Scrape specific restaurants with up to 50 reviews each:
{"startUrls": [{ "url": "https://www.opentable.com/r/le-bernardin-new-york" },{ "url": "https://www.opentable.com/restaurant/profile/2508" }],"includeReviews": true,"maxReviewsPerRestaurant": 50}
startUrls accepts /r/<slug> pages, /restaurant/profile/<id> pages, older vanity URLs and OpenTable search URLs.
Output example
Two records from the default New York run on 2026-10-26, shortened:
[{"name": "Brooklyn Chop House - Downtown","url": "https://www.opentable.com/r/brooklyn-chop-house-new-york","restaurantId": 1017331,"rating": 4.2,"reviewCount": 3056,"primaryCuisine": "Steakhouse","priceTier": 3,"priceRange": "$31 to $50","address": { "line1": "150 Nassau St", "city": "New York", "state": "NY", "postCode": "10038" },"latitude": 40.7114624,"longitude": -74.0059409,"neighborhood": "TriBeCa","phoneNumber": "(212) 619-1200","diningStyle": "Fine Dining","features": { "bar": true, "outdoor": false, "reservationMaxPartySize": 6 },"recentReservationCount": 32,"reviews": []},{"name": "Chambers","url": "https://www.opentable.com/r/chambers-new-york","restaurantId": 145225,"rating": 4.9,"reviewCount": 959,"primaryCuisine": "American","priceTier": 4,"priceRange": "$50 and over","neighborhood": "TriBeCa","phoneNumber": "(212) 580-3572","diningStyle": "Casual Elegant","reviews": []}]
Use it from an AI assistant
OpenTable Scraper works from Claude, ChatGPT, Cursor or any other MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/opentable-scraper as a server, and the assistant can call the Actor and read the results. Example prompt: "Find 30 French restaurants on OpenTable in Chicago, list their rating, price range and phone number, and include the 10 newest reviews for the top three."
Run it with the Apify API
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/opentable-scraper').call({searchTerms: ['New York'],maxResults: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((r) => `${r.name} ${r.rating} ${r.priceRange}`));
Python (apify-client 3.x):
from apify_client import ApifyClientclient = ApifyClient(token="YOUR_APIFY_TOKEN")run = client.actor("muhammadafzal/opentable-scraper").call(run_input={"searchTerms": ["Italian Chicago"], "maxResults": 50, "includeReviews": True, "maxReviewsPerRestaurant": 10})for item in client.dataset(run.default_dataset_id).iterate_items():print(item["name"], item["rating"], len(item["reviews"]))
Pricing
You pay per restaurant saved and per review delivered. Apify platform usage is included in these prices.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|
| Restaurant scraped (primary) | $0.010 | $0.009 | $0.008 | $0.007 | $0.007 | $0.007 |
| Review scraped | $0.003 | $0.003 | $0.003 | $0.001 | $0.001 | $0.001 |
| Actor start | $0.00005 | $0.00005 | $0.00005 | $0.00005 | $0.00005 | $0.00005 |
The start fee is charged once per started GB of allocated memory; the default 256 MB counts as one.
Worked totals:
- Default run, 20 restaurants, no reviews: FREE
$0.00005 + 20 × $0.010 = $0.20005; GOLD$0.00005 + 20 × $0.007 = $0.14005. - 10 restaurants with 20 reviews each (200 reviews): FREE
$0.00005 + 10 × $0.010 + 200 × $0.003 = $0.70005; GOLD$0.00005 + 10 × $0.007 + 200 × $0.001 = $0.27005.
Set a maximum charge per run in Apify Console; the Actor stops cleanly when that limit is reached.
Limits and reliability
- Speed: the default 20-restaurant run took about 7 seconds at 256 MB; a 55-restaurant run took about 14 seconds.
- Search depth: OpenTable returns up to 50 restaurants per search page, and the Actor pages through up to 200 pages per search term.
- Search-only fields: in plain search mode, sub-ratings, hours, dress code, parking, transit, cross street, chef and payment options are usually
null. UsestartUrlsorincludeReviews: trueto load the full profile page for those fields. - Search context: searches use a party of 2 at 7 pm two weeks ahead, which OpenTable uses to rank results. The Actor does not return time slots.
- Timeout: the default run timeout is 180 seconds. Raise it for thousands of restaurants or many reviews.
- Outcomes:
SUMMARYreportsDATA,EMPTY,BLOCKEDorREJECTED, with delivered and charged counts. Empty, blocked and rejected runs charge no restaurant or review events. - Deduplication: a restaurant found by two searches is saved and charged once.
FAQ
Can I scrape OpenTable for free?
Apify's free plan includes monthly credit you can spend on this Actor. At FREE-tier prices, USD 1 covers about 100 restaurants without reviews.
Does it return OpenTable reservation availability?
No. It returns restaurant profiles, ratings and reviews. It does not check or book tables.
How many reviews can I get per restaurant?
Up to 500 per restaurant, set with maxReviewsPerRestaurant. Restaurants with fewer public reviews return fewer.
Why are some fields null?
Either OpenTable does not publish that detail for the restaurant, or the run used search mode, which does not open each profile page.
Can I filter by price?
Yes. priceBands takes OpenTable tier IDs "1" to "4". Each record's priceRange shows OpenTable's own label for the tier: in US searches "2" is $30 and under, "3" is $31 to $50 and "4" is $50 and over.
Can I export OpenTable data to CSV or Excel?
Yes. Open the run's dataset in Apify Console and export JSON, CSV, Excel, XML or HTML, or read it through the dataset API.
Does it work outside the United States?
It searches whatever OpenTable's site returns for your term, for example London or Toronto. Results depend on OpenTable's coverage in that city.
Related Actors
- Google Maps Restaurant Scraper: restaurants, phones and reviews from Google Maps.
- Tripadvisor Review & Hospitality Leads: Tripadvisor reviews and venue leads.
- Tabelog Japan Restaurant Scraper: restaurants in Japan.
- UK Food Hygiene Ratings Scraper: official hygiene ratings for UK food businesses.
- King Arthur Recipes Scraper: structured baking recipes.
Legal and responsible use
This Actor collects only information OpenTable shows publicly. Reviews contain diners' public nicknames and opinions; handle them under the privacy and data-protection rules that apply to you, and follow OpenTable's terms for your use case. Do not use the data to contact or profile individual diners.
Last verified: 2026-10-27