DEV Community

Cover image for OpenTable Reviews API: Scrape Restaurant Reviews with Full Rating Breakdowns (2026)
Truffle Pig Data
Truffle Pig Data

Posted on

OpenTable Reviews API: Scrape Restaurant Reviews with Full Rating Breakdowns (2026)

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

  1. Open the OpenTable Reviews API and click Try for free.
  2. Paste a restaurant page URL or its OpenTable slug into restaurantIds, set maxResultsPerRestaurant.
  3. 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 }'
Enter fullscreen mode Exit fullscreen mode

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"])
Enter fullscreen mode Exit fullscreen mode

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)