Diner reviews on OpenTable are unusually rich: every one carries separate scores for food, service, ambience, value, and even noise, from a diner who verifiably sat at a table. Getting them out in bulk is the annoying part. I'll cover the manual route and its failure points, then the shortcut I actually use: the OpenTable Reviews API on Apify, which returns restaurant reviews as structured JSON, one row per review.
Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.
Does OpenTable have a public API?
Not for this. OpenTable's official APIs serve restaurant and booking partners, and they are about reservations, not review exports. There is no endpoint where an analyst can request the review history of an arbitrary restaurant. So in practice an OpenTable reviews API means a scraper you consume like an API: pass a restaurant, get its reviews back as JSON.
What the OpenTable Reviews API returns
The OpenTable Reviews API returns each review as structured JSON: the full text, the dined and submitted dates, the diner's public profile, and the complete rating breakdown.
| Field | Example | Notes |
|---|---|---|
content |
Service was slow but the duck... |
Full review text |
rating |
{ "overall": 4, "food": 5, "service": 3, "ambience": 4, "value": 4, "noise": 2 } |
The six-way breakdown is the differentiator |
dined_at |
2026-06-21 |
When the diner actually visited |
submitted_at |
2026-06-23 |
When the review was posted |
user |
{ "name": "SarahM", "number_of_reviews": 41, "location": "Chicago" } |
Public reviewer profile |
review_id |
123456789 |
Stable key, with restaurant_id and position alongside |
Switch on includeRestaurantSummary and you also get a summary row per restaurant: overall ratings, review counts, and the star-by-star histogram.
Who this is for
Hospitality analysts benchmarking a restaurant group's locations, operators monitoring their own guest feedback next to competitors', and data folks who want labeled multi-dimension review data for sentiment work.
The manual way, and where it breaks
Scraping OpenTable yourself means a headless browser, scroll-driven pagination, and markup that was not designed for you. The rating breakdown hides in component state rather than clean HTML, reviewer profiles need extra requests, and the layout changes whenever OpenTable ships a redesign. For one restaurant it is an evening project; for a fifty-restaurant watchlist it becomes a part-time job.
The faster way: run the OpenTable Reviews API
Apify Console
- Open the OpenTable Reviews API and click Try for free.
- Paste a restaurant page URL or its OpenTable slug into
restaurantIds, setmaxResultsPerRestaurant. - Run it and export JSON, CSV, or Excel.
REST
curl -X POST "https://api.apify.com/v2/acts/johnvc~opentable-reviews-api/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "restaurantIds": ["r/central-park-boathouse-new-york-2"], "maxResultsPerRestaurant": 50, "includeRestaurantSummary": true }'
Endpoint reference: the Apify API docs.
Scrape OpenTable reviews in Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("johnvc/opentable-reviews-api").call(
run_input={
"restaurantIds": ["r/central-park-boathouse-new-york-2"],
"maxResultsPerRestaurant": 50,
}
)
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
rating = review.get("rating") or {}
print(rating.get("overall"), rating.get("noise"), review["dined_at"])
The noise score alone has settled arguments for me; no other review site hands you that as a field.
Get recent reviews for one restaurant
The single-venue starting point: Get recent OpenTable reviews for one restaurant pulls the latest feedback for one place.
Monitor a whole watchlist of restaurants
Monitor OpenTable reviews for a list of restaurants batches many venues in one run. Ready-made city watchlists exist too, including San Francisco, London, and Dubai.
Export reviews to a spreadsheet
For the no-code crowd: Export OpenTable reviews to CSV and export to a spreadsheet land the same rows where a GM will actually read them.
Build a sentiment analysis dataset
Analyze OpenTable reviews for sentiment analysis shows the dataset shape for NLP work, where the per-dimension ratings act as free labels.
Feed reviews to Claude via MCP
The Actor is MCP-ready, so through Apify's MCP server it becomes a tool that Claude, Claude Code, or Cursor can call: ask for a restaurant's recent reviews and let the model summarize themes across food, service, and value in one pass. You can read more about Claude at claude.ai.
FAQ about scraping OpenTable reviews
What does the OpenTable reviews scraper cost?
You pay per review collected, so a 50-review pull costs 50 review events and nothing more. maxResultsPerRestaurant caps each venue before the run starts, and new Apify accounts include free platform credit to test with.
Can the scraper cover every restaurant in a city?
It works from a list of restaurants rather than a city name, and the watchlist pattern covers this well: build the list once, then run it as one batch. The prebuilt city tasks above are exactly that pattern for six metros.
Can my AI agent call this OpenTable scraper over MCP?
Yes. Add it through Apify's MCP server and it is a callable tool for Claude, Claude Code, and Cursor, which turns review monitoring into a prompt instead of a pipeline.
Can I schedule the scraper for weekly review monitoring?
Yes. Save your watchlist as a task, attach a weekly Apify schedule, and each run appends the newest reviews per venue. Set it up from the OpenTable Reviews API page.
What are the scraper's limits?
It reads public reviews only, up to 500 per restaurant per run, and it does not touch reservations, availability, or anything behind a diner's private account. If a restaurant is not on OpenTable, there is nothing to collect.
More from Truffle Pig Data
Restaurant intelligence pairs well across sources. These related Actors return the same kind of structured JSON: the Yelp Reviews API for the other big review corpus, the Yelp Search API for finding venues to watch, and the Yelp Place API for per-venue detail.
Wrapping up
Six rating dimensions per review is a dataset, not a comments section. Point the OpenTable Reviews API at your restaurants and start reading them that way.
Top comments (0)