OpenTable Restaurants & Reviews Scraper avatar

OpenTable Restaurants & Reviews Scraper

Pricing

from $3.22 / 1,000 result saveds

Go to Apify Store
OpenTable Restaurants & Reviews Scraper

OpenTable Restaurants & Reviews Scraper

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

Pricing

from $3.22 / 1,000 result saveds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

OpenTable Reviews — Restaurants & API Scraper

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

FieldDescription
restaurantUrlsPublic OpenTable restaurant profile URLs.
restaurantIdsNumeric OpenTable restaurant IDs. This is the most reliable option when you already know the IDs.
searchUrlPublic OpenTable search-results URL used to discover restaurant profiles.
maxReviewsPerRestaurantMaximum reviews collected for each restaurant. Set to 0 for profile-only collection.
maxItemsMaximum total dataset rows across all targets.
failOnBlockedFail clearly when no valid rows can be produced instead of returning an empty successful run.
proxyConfigurationOptional Apify proxy configuration. The default uses US residential proxy access.

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

Output fields

The default dataset contains restaurant and review rows joined by restaurantId.

GroupFields
IdentityrecordType, restaurantId, restaurantUrl, restaurantName, scrapedAt
Restaurant ratingrating, reviewCount, priceRange
Restaurant detailscuisines, description, phone, website, imageUrl
Locationaddress, city, state, postalCode, country, neighborhood, latitude, longitude
ReviewreviewId, reviewText, reviewRating, foodRating, serviceRating, ambienceRating, valueRating, noiseLevel, dinedDate, submittedDate, reviewType, reviewTags, helpfulCount, helpfulDownCount, helpfulScore, restaurantReplyText, photoUrls, photoCount, page
ReviewerreviewerName, reviewerInitials, reviewerLocation, reviewerReviewCount, reviewerIsVip

Optional source fields are returned as null when OpenTable does not publish them for a record.

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}

Pricing

The Actor uses pay-per-event pricing: a small run-start event plus charges only for valid restaurant and review rows saved. See the live Pricing tab for exact current event prices before each run.

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.”

FAQ

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.

You are responsible for your use case, applicable laws, and website terms. Collect only public data and handle personal information responsibly.

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.