OpenTable Restaurants & Reviews Scraper

Export public OpenTable restaurant profiles, ratings, and diner reviews for reputation monitoring, hospitality analytics, local SEO, and competitive research.

Data fields

FieldTypeDescription
recordTypestringValue exported as recordType.
restaurantIdstringValue exported as restaurantId.
restaurantUrlstringValue exported as restaurantUrl.
restaurantNamestring | nullValue exported as restaurantName.
ratingnumber | nullValue exported as rating.
reviewCountnumber | nullValue exported as reviewCount.
priceRangestring | nullValue exported as priceRange.
cuisinesarray | nullValue exported as cuisines.

Input preview

restaurantUrlsRestaurant URLs
restaurantIdsRestaurant IDs
searchUrlSearch URL
maxReviewsPerRestaurantMaximum reviews per restaurant
maxItemsMaximum dataset items
failOnBlockedFail when no rows are available

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Use this OpenTable reviews scraper and API to export public restaurant data for reputation monitoring, local SEO research, hospitality analytics, and competitive tracking. Provide restaurant IDs, profile URLs, or an OpenTable search URL and receive normalized, deduplicated records.

Input example

{
  "restaurantIds": ["1204381", "404046"],
  "maxReviewsPerRestaurant": 20,
  "maxItems": 40,
  "failOnBlocked": true
}

Output example

{
  "recordType": "review",
  "restaurantId": "1204381",
  "restaurantUrl": "https://www.opentable.com/restaurant/profile/1204381",
  "restaurantName": null,
  "reviewId": "OT-1204381-example",
  "reviewText": "Great food and attentive service.",
  "reviewRating": 5,
  "reviewType": "OPENTABLEVERIFIED",
  "reviewTags": ["Good for special occasions"],
  "helpfulCount": 3,
  "helpfulDownCount": 1,
  "helpfulScore": 2,
  "restaurantReplyText": "Thank you for dining with us.",
  "photoCount": 1,
  "page": 1,
  "scrapedAt": "2026-08-15T10:00:00.000Z"
}

Input settings

Field Description
restaurantUrls Public OpenTable restaurant profile URLs.
restaurantIds Numeric OpenTable restaurant IDs. This is the most reliable option when you already know the IDs.
searchUrl Public OpenTable search-results URL used to discover restaurant profiles.
maxReviewsPerRestaurant Maximum reviews collected for each restaurant. Set to 0 for profile-only collection.
maxItems Maximum total dataset rows across all targets.
failOnBlocked Fail clearly when no valid rows can be produced instead of returning an empty successful run.
proxyConfiguration Optional Apify proxy configuration. The default uses US residential proxy access.

At least one of restaurantUrls, restaurantIds, or searchUrl is required.

Input recipes

Monitor two restaurants

{"restaurantIds":["1204381","404046"],"maxReviewsPerRestaurant":25,"maxItems":50}

Collect a profile without reviews

{"restaurantUrls":[{"url":"https://www.opentable.com/r/bestia-los-angeles"}],"maxReviewsPerRestaurant":0,"maxItems":1}

Tips and limits

  • Use numeric restaurant IDs for dependable recurring review monitoring.
  • Keep maxItems low for the first run, then increase it after checking the output.
  • Public source availability varies by restaurant and region; some optional profile fields may be absent.
  • The Actor does not access reservations, diner accounts, private booking details, or login-only data.
  • If OpenTable denies all requested public pages, the default behavior is an explicit failed run rather than misleading empty output.

Who is it for?

  • Restaurant operators tracking guest sentiment and service trends.
  • Hospitality analytics teams comparing public ratings and review volume.
  • Local SEO teams collecting structured location and reputation signals.
  • Reputation-monitoring vendors feeding recurring public review exports into dashboards.

API usage

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~opentable-restaurants-reviews-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"restaurantIds":["1204381"],"maxReviewsPerRestaurant":10,"maxItems":10}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/opentable-restaurants-reviews-scraper').call({
  restaurantIds: ['1204381'], maxReviewsPerRestaurant: 10, maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/opentable-restaurants-reviews-scraper').call(run_input={
    'restaurantIds': ['1204381'], 'maxReviewsPerRestaurant': 10, 'maxItems': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use the returned dataset through client libraries, webhooks, Google Sheets, n8n, or other Apify integrations.

MCP and AI agents

Add the Apify MCP server from the command line:

claude mcp add --transport http apify https://mcp.apify.com/?tools=fetch_cat/opentable-restaurants-reviews-scraper

Or add it to an MCP client configuration:

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/opentable-restaurants-reviews-scraper"
    }
  }
}

Example prompts: “Export the 20 newest reviews for restaurant 1204381” or “Compare the ratings and recurring review themes for these OpenTable restaurant IDs.”

Support

Open an issue from the Actor's Apify Store page with a reproducible public target, expected result, and run ID. Do not include credentials or private customer data.

Common questions

Questions and answers reused from the canonical actor README.

How can I export public OpenTable restaurant reviews?

Supply one or more restaurantIds or restaurantUrls, set a total maxItems cap, and download the resulting dataset as JSON, CSV, Excel, or another supported format.

How can I monitor OpenTable ratings and reviews through an API?

Schedule the Actor or call its API regularly with the same restaurant IDs. Store the normalized review IDs, ratings, text, and timestamps to detect new feedback and rating changes.

Can I send OpenTable restaurant data to Google Sheets, n8n, or an AI agent?

Yes. Connect the Actor dataset through an Apify integration, webhook, API client, or MCP server to feed Google Sheets, n8n workflows, and AI agents.

Does the Actor remove duplicate reviews?

Yes. Reviews are deduplicated by their public reviewId within each restaurant run.

Is this an official OpenTable API?

No. This Actor exports information visible on public OpenTable surfaces and is not affiliated with OpenTable.