OpenTable Scraper & API — Restaurants and Reviews avatar

OpenTable Scraper & API — Restaurants and Reviews

Pricing

from $7.00 / 1,000 restaurant scrapeds

Go to Apify Store
OpenTable Scraper & API — Restaurants and Reviews

OpenTable Scraper & API — Restaurants and Reviews

Scrape OpenTable restaurants and diner reviews by city, cuisine or URL: rating, price band, address, phone and website. USD 10 per 1,000 restaurants.

Pricing

from $7.00 / 1,000 restaurant scrapeds

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

1

Bookmarked

9

Total users

1

Monthly active users

8 days ago

Last modified

Share

OpenTable Scraper works like an unofficial OpenTable API: give it a city, neighborhood, cuisine or restaurant URL and it returns structured OpenTable restaurant data (name, rating, review count, cuisine, price band, address, coordinates, phone and website) plus optional diner reviews. It is built for restaurant market researchers, hospitality sales teams and AI agents, and costs USD 10 per 1,000 restaurants on the FREE tier (USD 3 per 1,000 reviews when reviews are switched on), with no login or setup.

The Actor handles data access itself, so you only choose what to search for. Every run writes one dataset row per restaurant and a SUMMARY record that says whether the run delivered data, found nothing, or was blocked.

What restaurant data does OpenTable Scraper return?

Each dataset row is one OpenTable restaurant with up to 43 fields. Fields OpenTable does not show for a restaurant are null, never guessed.

FieldWhat you get
name, url, restaurantIdRestaurant name, OpenTable profile URL and numeric OpenTable ID
descriptionThe restaurant's own OpenTable description
rating, reviewCount, totalReviewCountOverall diner rating (1–5) and review counts
ratingFood, ratingService, ratingAmbience, ratingValue, ratingNoiseSub-ratings and noise level (filled from the profile page; see limits)
primaryCuisine, cuisinesMain cuisine and all cuisine tags
priceTier, priceRangeOpenTable price tier (1–4) and its label, for example $31 to $50
address, latitude, longitudeStreet, city, state, postcode and coordinates
neighborhood, metroNeighborhood and metro area, for example TriBeCa, New York City
phoneNumber, websiteContact phone and the restaurant's website or ordering link
diningStyle, dressCode, hoursOfOperation, executiveChefDining style, dress code, opening hours and chef
parkingInfo, publicTransit, crossStreetDirections and parking notes
features, hasPrivateDining, hasTakeout, hasDeliveryDirectBar, counter, high-top and outdoor seating, max party size, private dining, takeout, delivery
paymentOptions, additionalDetailsAccepted cards and extra amenity tags
imageUrl, photoUrlsMain photo and gallery photo URLs
topReviewText, recentReservationCountA highlighted review snippet and OpenTable's recent booking count
reviewsIndividual diner reviews when includeReviews is on, otherwise []
scrapedAt, sourceUrlExtraction time and the search or profile page used

Is there an official OpenTable API for restaurant data?

OpenTable's own APIs are aimed at restaurants and approved technology partners, for example to sync reservations. If you need public listing and review data for many restaurants, this Actor returns it through the Apify API (REST, JavaScript or Python) without a partner agreement. It reads only what OpenTable shows publicly: it does not book tables, return open time slots or access diner accounts.

How do I scrape OpenTable reviews?

Set includeReviews to true and choose maxReviewsPerRestaurant (1 to 500, default 20). The Actor opens each restaurant's profile page and pages through its reviews. Each review carries the review ID and text, dined and submitted dates, overall, food, service, ambience and value ratings, noise rating, the reviewer's public nickname, initials and city, VIP badge, approved-review count, and helpful-vote counts. You pay per review delivered, on top of the restaurant record.

When should I use OpenTable Scraper, and when not?

Use it when:

  • you need OpenTable restaurants for a city, neighborhood or cuisine, for example Italian Chicago or sushi San Francisco;
  • you want OpenTable ratings, price bands and diner reviews for competitive or menu research;
  • an AI agent needs fresh restaurant facts with a source URL.

Use another Actor when:

Do not use it to book tables, check live availability, or collect private diner data.

Input examples

Search a city with the default settings (this is the prefilled input):

{
"searchTerms": ["New York"],
"maxResults": 20
}

Search two markets, keep only the two highest price tiers, and sort nearest first:

{
"searchTerms": ["Italian Chicago", "sushi San Francisco"],
"maxResults": 100,
"priceBands": ["3", "4"],
"sortBy": "distance"
}

Scrape specific restaurants with up to 50 reviews each:

{
"startUrls": [
{ "url": "https://www.opentable.com/r/le-bernardin-new-york" },
{ "url": "https://www.opentable.com/restaurant/profile/2508" }
],
"includeReviews": true,
"maxReviewsPerRestaurant": 50
}

startUrls accepts /r/<slug> pages, /restaurant/profile/<id> pages, older vanity URLs and OpenTable search URLs.

Output example

Two records from the default New York run on 2026-10-26, shortened:

[
{
"name": "Brooklyn Chop House - Downtown",
"url": "https://www.opentable.com/r/brooklyn-chop-house-new-york",
"restaurantId": 1017331,
"rating": 4.2,
"reviewCount": 3056,
"primaryCuisine": "Steakhouse",
"priceTier": 3,
"priceRange": "$31 to $50",
"address": { "line1": "150 Nassau St", "city": "New York", "state": "NY", "postCode": "10038" },
"latitude": 40.7114624,
"longitude": -74.0059409,
"neighborhood": "TriBeCa",
"phoneNumber": "(212) 619-1200",
"diningStyle": "Fine Dining",
"features": { "bar": true, "outdoor": false, "reservationMaxPartySize": 6 },
"recentReservationCount": 32,
"reviews": []
},
{
"name": "Chambers",
"url": "https://www.opentable.com/r/chambers-new-york",
"restaurantId": 145225,
"rating": 4.9,
"reviewCount": 959,
"primaryCuisine": "American",
"priceTier": 4,
"priceRange": "$50 and over",
"neighborhood": "TriBeCa",
"phoneNumber": "(212) 580-3572",
"diningStyle": "Casual Elegant",
"reviews": []
}
]

Use it from an AI assistant

OpenTable Scraper works from Claude, ChatGPT, Cursor or any other MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/opentable-scraper as a server, and the assistant can call the Actor and read the results. Example prompt: "Find 30 French restaurants on OpenTable in Chicago, list their rating, price range and phone number, and include the 10 newest reviews for the top three."

Run it with the Apify API

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/opentable-scraper').call({
searchTerms: ['New York'],
maxResults: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((r) => `${r.name} ${r.rating} ${r.priceRange}`));

Python (apify-client 3.x):

from apify_client import ApifyClient
client = ApifyClient(token="YOUR_APIFY_TOKEN")
run = client.actor("muhammadafzal/opentable-scraper").call(
run_input={"searchTerms": ["Italian Chicago"], "maxResults": 50, "includeReviews": True, "maxReviewsPerRestaurant": 10}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["name"], item["rating"], len(item["reviews"]))

Pricing

You pay per restaurant saved and per review delivered. Apify platform usage is included in these prices.

EventFREEBRONZESILVERGOLDPLATINUMDIAMOND
Restaurant scraped (primary)$0.010$0.009$0.008$0.007$0.007$0.007
Review scraped$0.003$0.003$0.003$0.001$0.001$0.001
Actor start$0.00005$0.00005$0.00005$0.00005$0.00005$0.00005

The start fee is charged once per started GB of allocated memory; the default 256 MB counts as one.

Worked totals:

  • Default run, 20 restaurants, no reviews: FREE $0.00005 + 20 × $0.010 = $0.20005; GOLD $0.00005 + 20 × $0.007 = $0.14005.
  • 10 restaurants with 20 reviews each (200 reviews): FREE $0.00005 + 10 × $0.010 + 200 × $0.003 = $0.70005; GOLD $0.00005 + 10 × $0.007 + 200 × $0.001 = $0.27005.

Set a maximum charge per run in Apify Console; the Actor stops cleanly when that limit is reached.

Limits and reliability

  • Speed: the default 20-restaurant run took about 7 seconds at 256 MB; a 55-restaurant run took about 14 seconds.
  • Search depth: OpenTable returns up to 50 restaurants per search page, and the Actor pages through up to 200 pages per search term.
  • Search-only fields: in plain search mode, sub-ratings, hours, dress code, parking, transit, cross street, chef and payment options are usually null. Use startUrls or includeReviews: true to load the full profile page for those fields.
  • Search context: searches use a party of 2 at 7 pm two weeks ahead, which OpenTable uses to rank results. The Actor does not return time slots.
  • Timeout: the default run timeout is 180 seconds. Raise it for thousands of restaurants or many reviews.
  • Outcomes: SUMMARY reports DATA, EMPTY, BLOCKED or REJECTED, with delivered and charged counts. Empty, blocked and rejected runs charge no restaurant or review events.
  • Deduplication: a restaurant found by two searches is saved and charged once.

FAQ

Can I scrape OpenTable for free?

Apify's free plan includes monthly credit you can spend on this Actor. At FREE-tier prices, USD 1 covers about 100 restaurants without reviews.

Does it return OpenTable reservation availability?

No. It returns restaurant profiles, ratings and reviews. It does not check or book tables.

How many reviews can I get per restaurant?

Up to 500 per restaurant, set with maxReviewsPerRestaurant. Restaurants with fewer public reviews return fewer.

Why are some fields null?

Either OpenTable does not publish that detail for the restaurant, or the run used search mode, which does not open each profile page.

Can I filter by price?

Yes. priceBands takes OpenTable tier IDs "1" to "4". Each record's priceRange shows OpenTable's own label for the tier: in US searches "2" is $30 and under, "3" is $31 to $50 and "4" is $50 and over.

Can I export OpenTable data to CSV or Excel?

Yes. Open the run's dataset in Apify Console and export JSON, CSV, Excel, XML or HTML, or read it through the dataset API.

Does it work outside the United States?

It searches whatever OpenTable's site returns for your term, for example London or Toronto. Results depend on OpenTable's coverage in that city.

This Actor collects only information OpenTable shows publicly. Reviews contain diners' public nicknames and opinions; handle them under the privacy and data-protection rules that apply to you, and follow OpenTable's terms for your use case. Do not use the data to contact or profile individual diners.

Last verified: 2026-10-27