OpenTable Restaurants Scraper avatar

OpenTable Restaurants Scraper

Pricing

from $0.99 / 1,000 restaurants

Go to Apify Store
OpenTable Restaurants Scraper

OpenTable Restaurants Scraper

Extract OpenTable restaurant listings: cuisine, price, rating, address, phone, coordinates, photos, and delivery/private-dining info. Scrape by metro area, search filters, or a single restaurant URL.

Pricing

from $0.99 / 1,000 restaurants

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

OpenTable Restaurants Scraper

OpenTable Restaurants Scraper extracts restaurant listing data from OpenTable — cuisine, price, rating, address, phone, coordinates, and photos — for a metro area, a filtered search, or a single restaurant.

Pull cuisine, price band, rating, review count, address, phone, coordinates, photos, and takeout/private-dining/delivery-partner flags for every restaurant in a city, a filtered search, or a single OpenTable profile.

ParseBird OpenTable Suite   •  Restaurant & review data
OpenTable Reviews Scraper
Ratings, review text & reviewer profiles
OpenTable Restaurants Scraper
You are here

Copy to your AI assistant

Use the Apify actor "parsebird/opentable-restaurants-scraper" via the ApifyClient to scrape OpenTable restaurant listings. Example: client.actor("parsebird/opentable-restaurants-scraper").call(run_input={"startUrls": [{"url": "https://www.opentable.com/metro/las-vegas-restaurants"}], "results_wanted": 50, "max_pages": 5}). Inputs: startUrls (array of {url}, an OpenTable metro/city page, a search results page like opentable.com/s?term=..., or a single restaurant profile URL — takes priority over the filter fields below), location (string, city/neighborhood/landmark/restaurant name, used only when startUrls is empty), date (YYYY-MM-DD, must be set with time), time (24-hour HH:MM, must be set with date), people (integer, party size 1-20), sort (enum: recommended/distance/rating/price/name/newest), results_wanted (integer, default 20, max restaurants across all Start URLs), max_pages (integer, default 3, max search-result pages per search URL, up to 50 restaurants per page — metro pages are always fetched once), proxyConfiguration (object, defaults to Apify's Unblocker proxy group, required — OpenTable blocks Datacenter and Residential proxies). Output fields per restaurant include restaurantId, name, url, cuisine, price, rating, reviewCount, recentReservationCount, address, phoneNumber, neighborhood, description, latitude, longitude, profileImage, galleryImages, hasTakeout, hasPrivateDining, deliveryPartners, awards, sourceUrl, sourceType, and scrapedAt. Full API spec: https://apify.com/parsebird/opentable-restaurants-scraper/api. Get an API token at https://console.apify.com/settings/integrations.

What does OpenTable Restaurants Scraper do?

OpenTable Restaurants Scraper is a listing-extraction tool for OpenTable. Give it a metro/city page, a search URL, filter criteria, or a single restaurant profile, and it returns structured restaurant data — cuisine, price, rating, contact details, coordinates, and photos — ready for a spreadsheet, map, or lead list.

  • 🏙️ Scrape a whole metro/city page, a filtered search, or a single restaurant profile in one run
  • 🔎 Search by location, date, time, party size, and sort order without building a URL yourself
  • 📄 Automatic pagination on search result pages (up to 50 restaurants per page)
  • 📍 Full contact and location data: address, phone, latitude/longitude, and neighborhood
  • 📸 Profile photo and gallery photo URLs
  • 🍽️ Takeout, private-dining, and delivery-partner flags
  • ⚙️ Runs on Apify's infrastructure with scheduling, API access, and integrations

Input parameters

ParameterTypeRequiredDefaultDescription
startUrlsarray of {url}NoLas Vegas metro URLOpenTable metro/city pages, search result pages, or a single restaurant profile URL. Takes priority over the filters below.
locationstringNo—City, neighborhood, landmark, or restaurant search term. Only used when Start URLs is empty.
datestringNo—Reservation date (YYYY-MM-DD). Use with time.
timestringNo—Reservation time, 24-hour HH:MM. Use with date.
peopleintegerNo—Party size, 1 to 20.
sortenumNorecommendedrecommended, distance, rating, price, name, or newest.
results_wantedintegerNo20Maximum number of restaurant listings to collect in this run, across all Start URLs.
max_pagesintegerNo3Maximum search-result pages to fetch per search URL. Each page can hold up to 50 restaurants.
proxyConfigurationobjectNoUnblocker (US)Proxy settings. OpenTable's Akamai bot protection blocks Datacenter and Residential proxies — Unblocker is required.

Metro page collection

{
"startUrls": [{ "url": "https://www.opentable.com/metro/las-vegas-restaurants" }],
"results_wanted": 50,
"max_pages": 5
}

Multiple search URLs

{
"startUrls": [
{ "url": "https://www.opentable.com/s?metroId=10&term=Las%20Vegas" },
{ "url": "https://www.opentable.com/s?metroId=511&term=New%20York" }
],
"results_wanted": 100,
"max_pages": 3
}
{
"location": "Las Vegas",
"date": "2026-09-15",
"time": "19:00",
"people": 2,
"sort": "rating",
"results_wanted": 20,
"max_pages": 3
}

Single restaurant profile

{
"startUrls": [{ "url": "https://www.opentable.com/r/tao-asian-bistro-las-vegas" }],
"results_wanted": 1
}

What data can you extract from OpenTable?

FieldDescription
restaurantId, name, urlIdentifiers and profile link
cuisine, price, rating, reviewCount, recentReservationCountCategory and popularity signals
address, phoneNumber, neighborhood, latitude, longitudeContact and location
description, profileImage, galleryImagesMarketing content and photos
hasTakeout, hasPrivateDining, deliveryPartners, awardsFeature flags and recognitions
sourceUrl, sourceType, scrapedAtMetadata for auditing and reconciling rows

Output example

{
"restaurantId": 5056,
"name": "TAO Asian Bistro - Las Vegas",
"url": "https://www.opentable.com/r/tao-asian-bistro-las-vegas",
"price": "$50 and over",
"cuisine": "Contemporary Asian",
"neighborhood": "The Venetian and Palazzo",
"rating": 4.6,
"reviewCount": 13898,
"recentReservationCount": 196,
"description": "TAO Asian Bistro invites you into a world of bold Pan-Asian flavors and captivating ambiance.",
"address": "3377 S. Las Vegas Blvd., Suite 2025, Las Vegas, NV, 89109",
"phoneNumber": "+17023888338",
"latitude": 36.1215,
"longitude": -115.1726,
"profileImage": "https://resizer.otstatic.com/v3/photos/29631200-1?width=320&height=180&webp=true",
"hasTakeout": true,
"hasPrivateDining": true,
"sourceUrl": "https://www.opentable.com/metro/las-vegas-restaurants",
"sourceType": "locationLanding",
"scrapedAt": "2026-09-27T10:30:00.000Z"
}

Download results as JSON, CSV, Excel, HTML, or XML from the Apify Console, or pull them programmatically through the Apify API.

How to scrape OpenTable restaurants

  1. Open OpenTable Restaurants Scraper on the Apify Store and click Try for free.
  2. Paste a metro/city URL, a search URL, or a restaurant profile URL into Start URLs — or leave it empty and fill in Location, Date/Time, Party size, and Sort by instead.
  3. Set Max restaurants and Max search pages.
  4. Click Start and wait for the run to finish.
  5. Open the Dataset tab to view, filter, and export the scraped restaurants.

How it works

  1. For each Start URL, the Actor checks whether it's a restaurant profile, a search results page, or a metro/city page — or builds a search URL from Location/Date/Time/People/Sort when no URL is given.
  2. Restaurant profile URLs are fetched once each, reading the full profile data OpenTable embeds in the page.
  3. Search result pages paginate automatically (up to 50 restaurants per page) until max_pages or results_wanted is reached. Metro/city pages are fetched once, since they don't paginate.
  4. When a run has more than one metro/search URL, restaurant collection round-robins across them so the budget is shared rather than spent entirely on the first URL.
  5. Every restaurant is written as one dataset row, deduplicated by restaurant ID across the whole run.

How much does it cost to scrape OpenTable restaurants?

OpenTable Restaurants Scraper uses pay-per-event pricing — you're charged only for restaurants actually saved to your dataset.

PlanPrice per restaurantPrice per 1,000
Free$0.00129$1.29
Bronze$0.00119$1.19
Silver$0.00109$1.09
Gold$0.00099$0.99

Collecting 500 restaurants on the Free plan costs about $0.65. Apify's monthly platform usage credits apply to this Actor like any other.

Using the API

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/opentable-restaurants-scraper").call(run_input={
"startUrls": [{"url": "https://www.opentable.com/metro/las-vegas-restaurants"}],
"results_wanted": 100,
"max_pages": 5,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["cuisine"], item["rating"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/opentable-restaurants-scraper').call({
startUrls: [{ url: 'https://www.opentable.com/metro/las-vegas-restaurants' }],
results_wanted: 100,
max_pages: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Schedule recurring runs to track new openings and rating changes week over week, or connect it to Zapier/Make through Apify's integrations.

Scraping publicly available data — like restaurant listings shown on a public OpenTable page — is generally considered legal, and courts have repeatedly upheld this for public web pages. This Actor only collects listing data OpenTable already displays to any visitor; it never accesses private diner accounts or reservation details. You are responsible for how you use the collected data and for complying with OpenTable's terms of service and applicable law in your jurisdiction. See Apify's blog post on the legality of web scraping for more detail.

FAQ

Why does the Actor need Unblocker proxies specifically? OpenTable's Akamai bot protection blocks Apify's Datacenter and Residential proxy groups outright. Unblocker is the only proxy group that reliably loads OpenTable pages, so it's the required default.

Does max_pages do anything on a metro/city URL? No. Metro and city pages show a fixed, curated set of restaurants and don't paginate — the Actor fetches them once regardless of max_pages. max_pages only affects search result pages (opentable.com/s?...).

Do date, time, and people filter which restaurants come back? They're passed through to OpenTable's search as reservation context, but the restaurant list itself is driven mainly by location and sort. This Actor returns restaurant listing data, not live table availability.

What happens if I provide both Start URLs and Location? Start URLs take priority — Location, Date, Time, People, and Sort are only used when Start URLs is empty.

Can I scrape just one restaurant? Yes. Pass its profile URL (e.g. opentable.com/r/tao-asian-bistro-las-vegas) as a Start URL with results_wanted: 1.

Can I schedule recurring runs? Yes. Use Apify's Scheduler to run this Actor daily, weekly, or at any interval.

Does this Actor have an API? Yes — every Apify Actor is automatically available as an API. See the API tab for the full spec, or use the Python/JavaScript examples above.

Something not working? Report it on the Actor's Issues tab in Apify Console — OpenTable occasionally changes its site, and prompt reports help keep this Actor maintained.