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

Fetch Cat

Fetch Cat

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Security

Limited permissions

Share

Export public OpenTable restaurant profiles and diner reviews for reputation research and hospitality analytics. This OpenTable reviews scraper accepts numeric restaurant IDs, profile URLs, or a search URL and returns restaurant and review rows. ID-only lookups can return reviews with restaurant details left empty.

Quick start

  1. Supply a restaurant ID or a public opentable.com profile URL.
  2. Set a small total row limit and start the Actor.
  3. Open the dataset and export JSON, CSV, or Excel. Access restrictions can prevent results. A limit is a ceiling, not a guaranteed result count.
{
"restaurantIds": ["1204381"],
"maxReviewsPerRestaurant": 10,
"maxItems": 10
}

Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.

Ready-to-run examples

Choose a public example to see its settings before starting a run:

What you get

Restaurant and review rows linked by restaurantId, with available profile details, aggregate ratings and separate diner feedback. Numeric-ID review lookups can leave restaurant fields null when profiles are unreadable. Review tags and photos can be empty, and a shared row cap counts profiles as well as reviews.

Who is it for?

  • Restaurant operators reviewing exposed guest feedback with source context.
  • Hospitality analysts comparing available restaurant ratings and small review samples.
  • Reputation researchers preparing data for a separate sentiment or reporting workflow.
  • Data developers linking restaurant and review record types in their own datasets.

How you can use the data

  • Inspect the existing numeric-ID review target. Use restaurant ID 1204381 with small review and total-row caps. Keep reviewText, reviewRating, restaurantId and source link, without inferring profile details when an ID-only lookup cannot read them.
  • Compare two bounded restaurant samples. Use the existing 1204381 and 404046 IDs and retain recordType to separate restaurant summaries from diner reviews. A total of twenty-five rows does not mean twenty-five reviews, and earlier targets can consume the shared cap.
  • Collect a profile without reviews when readable. Use the existing Bestia Los Angeles URL, zero reviews and a one-row cap. The profile page must be accessible: numeric IDs alone do not guarantee a restaurant profile row.
  • Prepare your own feedback analysis. Join restaurantId and reviewId with public rating, text and available category scores. Reviews are requested newest first per restaurant, rather than globally sorted or date-filtered. Perform sentiment, comparison and repeat-export matching outside the Actor.

Input settings

SettingJSON keyPurpose
Restaurant URLsrestaurantUrlsPublic opentable.com profile URLs.
Restaurant IDsrestaurantIdsNumeric IDs for targeted review lookups.
Search URLsearchUrlDiscover profile links on one loaded public search page.
Reviews per restaurantmaxReviewsPerRestaurantUp to 500. Default 10. Use 0 with readable profile URLs for profiles only.
Dataset limitmaxItemsTotal restaurant and review rows. Form default 20, omitted API value 25.
Fail without rowsfailOnBlockedDefault true. Controls zero-row outcomes after target processing.
Connection settingsproxyConfigurationExisting proxy settings. Detailed choices and omission behavior are in input help.

At least one of restaurantUrls, restaurantIds, or searchUrl is required. They may be combined. IDs are not a guarantee of profile details.

Compare two restaurants

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

Collect a profile without reviews

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

This profile-only recipe depends on the profile page being readable. Use IDs with a positive review limit for review-only lookups.

Output data

Illustrative shape only, not an observed customer record. Omitted fields remain in the full dataset schema.

{
"recordType": "review",
"restaurantId": "1204381",
"restaurantUrl": "https://www.opentable.com/restaurant/profile/1204381",
"restaurantName": null,
"reviewId": "example-review-id",
"reviewText": "Example review text",
"reviewRating": 5,
"reviewTags": [],
"restaurantReplyText": null,
"photoUrls": [],
"page": 1,
"scrapedAt": "2026-10-25T10:00:00.000Z"
}

More output fields

The dataset contains restaurant and review rows linked 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

Missing scalar values are generally null. Review tags and photo URLs may be empty arrays. Restaurant rows have empty review fields. If a numeric-ID lookup cannot read a profile, review rows can still be saved with null restaurant details. Restaurant rows are saved only when profile data is available.

Download your results

Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.

See Apify's download and export guide for the available formats and field options.

Pricing

The start event is charged once when target processing begins. The result event applies to each saved restaurant or review row, with no paid error or status rows.

The total cap counts profiles and reviews, while the per-restaurant review cap limits that restaurant's reviews. Neither is a total spending guarantee. See the live Pricing tab for current rates and discounts.

Tips for best results

  • Use known numeric IDs for a small review lookup. Profile metadata can remain unavailable even when reviews are returned.
  • Keep recordType when importing rows. A restaurant row is not another diner review.
  • Allow room in the shared cap for later targets. Input order and available profile rows affect coverage.
  • Use readable profile URLs for profile-only work. Zero reviews does not force an inaccessible profile to exist.
  • Inspect status and dataset together after failures. A retained profile can coexist with a failed review lookup.

Limits and caveats

Only public opentable.com targets are accepted. No reservations, diner accounts, private booking details, login-only access or booking management is provided. This is not an official or affiliated OpenTable API.

Numeric IDs, profile URLs and one loaded public search page can contribute targets. Search discovery does not guarantee every result page or a complete restaurant inventory. IDs can return reviews with null restaurant details. Restaurant rows are saved only when profile information is available, and profile-only collection needs a readable profile URL.

Reviews are requested newest first per restaurant and targets follow input order. No global sort, date filter, persisted incremental state or cross-run history is provided. Review IDs are deduplicated within each processed restaurant URL. Public fields can be null, review arrays empty and profile rows have empty review fields.

A total cap counts both restaurant and review records and can stop before later targets. Useful rows are preserved when another target fails, while failed review lookup can leave only a profile row. Successful status does not prove all targets completed.

With failOnBlocked true, zero saved rows cause failure. False permits an empty result after target failures but does not bypass setup errors. Failed access is not proof of privacy or deletion. Review run messages and actual dataset rows before interpreting empty or partial coverage. Repeat-export comparison and reporting require your own workflow.

Automation and integrations

Save your settings for next time

Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.

Run on a schedule

Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.

Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.

Send results to your other tools

Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.

For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.

API usage

Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.

The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.

For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.

cURL

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

Node.js

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})
print(client.dataset(run['defaultDatasetId']).list_items().items)

API usage notes

This starts an asynchronous run. Use the returned run ID to check completion and defaultDatasetId to retrieve results.

MCP and AI agents

You can ask your AI assistant to collect data with OpenTable Restaurants & Reviews Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.

Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.

Easier setup with an Apify plugin

If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.

Use Apify AI in Console

Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's OpenTable Restaurants & Reviews Scraper. You can describe the data you want and ask questions about the results.

Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.

Choose your assistant

Connect just this scraper

To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:

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

Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.

Use Apify's general server

Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use OpenTable Restaurants & Reviews Scraper by Fetch Cat, or give it the identifier fetch_cat/opentable-restaurants-reviews-scraper.

Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.

Example requests

  • “Use Fetch Cat’s OpenTable Restaurants and Reviews Scraper to collect reviews for restaurant ID 1204381 with up to 3 reviews and a five-row total cap. Keep record types and source links, leaving unreadable restaurant fields unknown.”
  • “Retrieve restaurant IDs 1204381 and 404046 with up to 2 reviews per restaurant and a six-row total cap. Keep their samples separate and flag incomplete targets without claiming a global newest-review order.”
  • “Collect the public profile at https://www.opentable.com/r/bestia-los-angeles with reviews set to zero and a one-row cap. Report unavailable profile access rather than fabricating a restaurant record or making a reservation.”

Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.

Pay with x402

If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.

Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.

Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.

Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.

Other ways for agents to pay

Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.

FAQ

How can I export public OpenTable restaurant reviews?

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

Is this an official OpenTable API?

No. This is an Apify Actor for public OpenTable data, not an official OpenTable API or an affiliated product. It does not provide booking or reservation management.

Does the Actor remove duplicate reviews?

Reviews are deduplicated by reviewId within each processed restaurant URL. There is no cross-run history or automatic incremental update tracking.

Why are restaurant fields empty or results incomplete?

Profile access and available source fields vary. ID lookups may return reviews without profile details. A total row cap may stop before later restaurants are processed. Check run messages and dataset contents together. The default zero-row behavior is failure, not proof of a private or deleted restaurant.

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

Yes. Use Apify dataset exports, integrations, API clients, or the hosted MCP server. Compare stable review IDs in your own workflow when checking later exports. The Actor does not compute changes for you.

Support and feedback

For custom additions or integrations, email hello@fetchcat.dev.

Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.

Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.

Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.

Made with care for curious people, AI agents and the possibilities in data. ♥