OpenTable Scraper — Ratings, Reviews & Cuisine avatar

OpenTable Scraper — Ratings, Reviews & Cuisine

Pricing

from $5.00 / 1,000 restaurant scrapeds

Go to Apify Store
OpenTable Scraper — Ratings, Reviews & Cuisine

OpenTable Scraper — Ratings, Reviews & Cuisine

Scrape OpenTable restaurants by city, cuisine or name. Returns rating, review count, price band, address, phone, coordinates and top review.

Pricing

from $5.00 / 1,000 restaurant scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Share

What is OpenTable Scraper — Ratings, Reviews & Cuisine?

OpenTable Scraper extracts OpenTable restaurant search results into a dataset, one row per restaurant, from a city, cuisine, neighborhood or restaurant name. Each row returns the restaurant name, cuisine, dining style, price band, overall rating, review count, recent reservation count, full address, phone, coordinates, a highlighted top review, dining features such as outdoor seating and takeout, photos, description and the OpenTable profile URL. Restaurant-tech sales teams, hospitality market researchers, local-guide publishers and AI agents use it to map a city's dining scene with no OpenTable login.

Why teams use this OpenTable scraper

  • Search the way diners do. searchTerms accepts Miami, Italian, Chicago, SoHo, New York or a name such as Carbone.
  • Popularity signals. overallRating, reviewCount and recentReservationCount show which restaurants are busy right now.
  • Price and style. priceBand, priceRange and diningStyle segment casual spots from fine dining.
  • Map-ready rows. latitude, longitude, addressLine1, city, state and postCode come on every row.
  • Feature flags. hasOutdoorSeating, hasBar, hasTakeout and maxPartySize answer practical diner questions.
  • Automatic paging. Results paginate until maxRestaurants per search term.

Best fit for restaurant discovery and market mapping on OpenTable: every Italian restaurant in Chicago, the top-rated spots in a neighborhood, or a contact list of restaurants that take online reservations. The Actor works from search and city listing pages and returns one profile-level record per restaurant.

Example workflow: from a cuisine and city to a sales territory

A restaurant-software sales rep starts with searchTerms set to ["Italian, Chicago", "Steakhouse, Chicago"] and maxRestaurants set to 200. The dataset returns each restaurant's name, neighborhood, phone, priceBand, overallRating and recentReservationCount. They sort by recentReservationCount to find the busiest dining rooms, plot latitude and longitude to split the city into territories, and export each territory's list to the CRM. A monthly schedule with the same input shows which restaurants are gaining momentum.

How to scrape OpenTable

  1. Enter one or more Search terms, such as Miami or Italian, Chicago, or paste OpenTable search URLs in Start URLs.
  2. Set Max restaurants (per term / URL), and optionally Party size, Reservation date and Reservation time.
  3. Click Start, then export the dataset as JSON, CSV or Excel, or read it through the API.

Input

{
"searchTerms": ["Italian, Chicago", "Steakhouse, Austin"],
"maxRestaurants": 200,
"partySize": 2
}

With a reservation context:

{
"searchTerms": ["SoHo, New York"],
"maxRestaurants": 50,
"partySize": 4,
"reservationDate": "2026-12-12",
"reservationTime": "19:30"
}
FieldTypeWhat it controls
searchTermsarrayCity, cuisine plus city, neighborhood or restaurant name, one per entry.
startUrlsarrayOpenTable search or listing URLs such as https://www.opentable.com/s/?term=miami.
maxRestaurantsintegerUnique restaurants per search term or URL. Default 50.
partySizeintegerNumber of diners, from 1 to 20. Default 2.
reservationDatestringOptional YYYY-MM-DD date that shapes OpenTable's availability-aware ranking.
reservationTimestringOptional HH:mm time, used with a date. Default 19:00.
proxyConfigurationobjectApify Residential proxy in the US by default.

Output

One dataset row per restaurant.

FieldWhat it contains
restaurantId, name, profileUrlOpenTable ID, name and profile URL
primaryCuisine, diningStyleCuisine and dining style
priceBand, priceRange, currencyPrice band text, numeric tier and currency symbol
overallRating, reviewCountAverage rating and number of reviews
recentReservationCountRecent bookings count shown on OpenTable
neighborhood, addressLine1, city, state, postCodeLocation
latitude, longitudeCoordinates
phoneRestaurant phone
topReviewHighlighted review snippet
hasBar, hasOutdoorSeating, hasCounter, hasHighTop, hasTakeoutDining features
maxPartySize, inPremiumMarketplaceLargest bookable party and marketplace flag
awards, offersAwards and special offers when the restaurant lists them
photoUrls, descriptionPhoto links and the restaurant's own description
searchTerm, resultPosition, scrapedAtThe search, rank within it, and collection time
{
"restaurantId": 1021789,
"name": "Posto 31",
"profileUrl": "https://www.opentable.com/r/posto-31-la-grange-park",
"primaryCuisine": "Italian",
"diningStyle": "Casual Dining",
"priceBand": "$31 to $50",
"priceRange": 3,
"currency": "$",
"overallRating": 4.8,
"reviewCount": 1814,
"recentReservationCount": 15,
"neighborhood": "La Grange",
"addressLine1": "1017 E 31st St",
"city": "La Grange Park",
"state": "IL",
"postCode": "60526",
"latitude": 41.8347758,
"longitude": -87.8630124,
"phone": "7084697233",
"topReview": "It was a lovely evening to sit out at the patio. Our food was amazing. Our server was helpful and friendly.",
"hasBar": false,
"hasOutdoorSeating": true,
"hasCounter": false,
"hasHighTop": false,
"maxPartySize": 6,
"hasTakeout": true,
"inPremiumMarketplace": false,
"awards": [],
"offers": [],
"photoUrls": ["https://resizer.otstatic.com/v4/photos/25754670-1?width=640&height=360"],
"description": "Posto 31 strives for the harmony among quality-driven food, professional service, nuanced craft cocktails and the comfort of a neighborhood gathering place.",
"searchTerm": "Italian, Chicago",
"resultPosition": 1,
"scrapedAt": "2026-10-01T12:39:54.996Z"
}

Pricing

This Actor uses Pay per event plus Apify platform usage. You pay one Restaurant scraped event for each unique restaurant returned and one Actor Start event per run. Platform usage, including residential proxy traffic, is billed separately by Apify. maxRestaurants caps the events for each search term.

Worked example in words: two search terms capped at fifty restaurants each, with no overlap, cost one hundred Restaurant scraped events plus one Actor Start event, plus platform usage. Check the live Pricing tab on this page for current event prices.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~opentable-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["Miami"], "maxRestaurants": 100}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("khadinakbar/opentable-scraper").call(run_input={
"searchTerms": ["San Francisco"],
"maxRestaurants": 150,
})
for r in client.dataset(run["defaultDatasetId"]).iterate_items():
print(r["name"], r["primaryCuisine"], r["overallRating"], r["neighborhood"])

Use with AI agents (MCP)

Connect the Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP and ask:

Find the 30 highest-rated Italian restaurants in Chicago on OpenTable with outdoor seating. Return name, neighborhood, price band, rating, phone and profile link.

The agent sends Italian, Chicago in searchTerms, reads rows from the dataset, filters on hasOutdoorSeating, and sorts by overallRating. Each row keeps profileUrl, resultPosition and scrapedAt for citation, and maxRestaurants sets the cost scope up front.

Best results

Starting situationHelpful actionExpected outcome
A whole metroSearch by city and raise maxRestaurantsA full dining-scene dataset
A specific cuisineUse Cuisine, City, for example Sushi, SeattleFocused, relevant rows
One known restaurantSearch its name and city, for example Carbone, New YorkIts profile-level record
Markets outside the USSearch by the local city name and set the proxy country to matchLocal OpenTable results
Date-specific planningAdd reservationDate and partySizeRanking shaped by availability for that booking
Momentum trackingSchedule monthly and compare recentReservationCountRestaurants gaining or losing bookings

Builder's note

I built this Actor on OpenTable's own embedded search data with plain HTTP, so runs stay light while each row carries more than a listing card shows, such as reservation counts and dining features. I designed the input around one search box because that is how people already look for restaurants: a city, a cuisine, a neighborhood or a name. I found that recentReservationCount is the most useful signal for sales and market work, so it sits next to rating and review count on every row.

FAQ

Can I get restaurant emails?

OpenTable lists phone numbers and addresses on these pages. Email addresses are outside what OpenTable publishes here.

Can I scrape one specific restaurant?

Yes. Put its name and city in searchTerms and it is returned as a record.

Do party size and date filter the results?

They shape OpenTable's availability-aware ranking and keep every restaurant in the results.

Which countries are covered?

Any OpenTable market. Search by the local city name and set the proxy country to match the region.

Responsible use

This Actor collects publicly available restaurant information from OpenTable search pages. Use the data in line with OpenTable's terms of service and applicable laws such as the GDPR and CCPA, and only for legitimate purposes. OpenTable is a trademark of its owner; this independent Actor is not affiliated with or endorsed by OpenTable.