OpenTable Scraper avatar

OpenTable Scraper

Pricing

from $1.70 / 1,000 restaurants

Go to Apify Store
OpenTable Scraper

OpenTable Scraper

Collects OpenTable restaurant listings and reviews — ratings, price band, cuisine, location, contact details, and availability — by search query (with date, time, and party size) or OpenTable URLs. Optionally enriches each restaurant with full profile details and diner reviews.

Pricing

from $1.70 / 1,000 restaurants

Rating

0.0

(0)

Developer

Scraptivo

Scraptivo

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

OpenTable Scraper collects restaurant listings, profile details, and diner reviews from OpenTable — ratings, price band, cuisine, location, and contact details — and turns them into structured data for market research, lead generation, and competitor monitoring. Search by city or cuisine, paste an OpenTable search URL, or target a specific restaurant profile, then export results to JSON, CSV, or Excel. Use it to map local dining markets, track ratings, and build contact lists. Pay per event: $2 per 1,000 restaurants, with optional details and reviews billed separately.

What can you automate with OpenTable Scraper?

  • Map a city's dining scene — collect restaurant directories by location or cuisine with ratings, price band, and review counts.
  • Capture competitor intelligence — record hours, amenities, dress code, parking, website, and social links from profiles.
  • Mine diner reviews — collect overall, food, service, ambience, and value scores with text and dates, capped per restaurant when needed.
  • Search by availability — set reservation date, time, and party size so results reflect real availability.
  • Build lead lists — gather phone, email, and website details for outreach or partnerships.
  • Export anywhere — download structured data as JSON, CSV, or Excel, or stream it through the Apify API.

Who is this scraper for?

TeamWorkflow
Market researchersAnalyze restaurant supply, price bands, and rating distributions in any city
Competitive analystsTrack how competitors' ratings, reviews, and hours change over time
Lead-generation teamsBuild contact lists of restaurants for outreach or partnerships
Data teamsFeed structured restaurant data into CRMs, dashboards, or models

What data can you collect from OpenTable?

Data groupExample fieldsHow it helps
Identity & ratingsrestaurantId, name, url, rating, reviewCountMatch and deduplicate restaurants by their OpenTable ID
Locationneighborhood, city, state, postCode, address, latitude, longitudeMap restaurants and filter by geography
Offer & contactcuisine, priceBand, phone, website, diningStyleUnderstand the menu, price level, and how to reach them
Profile extrashoursOfOperation, amenities, hasTakeout, outdoorSeating, photosEnrich listings with full profile detail when enabled
Reviewsreviews[] with overall, food, service, ambience, valueCapture diner feedback when enabled

Profile and review fields are only returned when the matching input toggle is enabled.

How to use OpenTable Scraper

  1. Open the Actor on Apify.
  2. Add an OpenTable search URL or a search term (for example "Dresden" or "Italian in Berlin").
  3. Optionally set the reservation date, time, and party size.
  4. Enable listing details or reviews if you need deeper data.
  5. Run the Actor and export the dataset to JSON, CSV, or Excel.
{
"searchQueries": ["Dresden"],
"time": "19:00",
"partySize": 2,
"scrapeListingDetails": true,
"scrapeReviews": true,
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Example workflow

Build a weekly list of new restaurants in a city

  1. Run a city search every week for the areas you cover.
  2. Keep restaurants that are new or whose rating or review count changed.
  3. Send new records to Google Sheets or a CRM.
  4. Deduplicate using the stable restaurantId value.

Automate and integrate your results

  • Schedules — run daily to track ratings and review counts, or weekly for market research snapshots.
  • Webhooks — trigger a webhook on run completion to update a database, spreadsheet, or notification pipeline automatically.
  • Integrations — push results to Google Sheets, Make, Zapier, Slack, a CRM, or cloud storage, or call the Actor from the Apify API.
  • Deduplication — each restaurant is keyed by its restaurantId; deduplicate across runs on restaurantId.

Input reference

FieldTypeRequiredDefaultWhat it controls
startUrlsarrayoptionalOpenTable search or restaurant profile URLs (takes priority)
searchQueriesarrayoptionalLocation or restaurant search terms, e.g. "Dresden"
datestringoptionaltomorrowReservation date (YYYY-MM-DD) for availability search
timestringoptional19:00Preferred dining time in 24h HH:MM
partySizeintegeroptional2Number of diners (1–20)
scrapeListingDetailsbooleanoptionalfalseFetch full profile details (hours, amenities, photos)
scrapeReviewsbooleanoptionalfalseFetch diner reviews per restaurant
maxReviewsintegeroptional0Max reviews per restaurant (0 = all)
maxItemsintegeroptional0Maximum restaurants to collect (0 = unlimited)
proxyConfigurationobjectoptionalresidentialProxy settings for reliable OpenTable access

What is the difference between startUrls and searchQueries?

startUrls accepts exact OpenTable search or restaurant profile URLs and takes priority when provided. searchQueries are free-text terms such as "Dresden" or "Italian in Berlin", used when startUrls is empty.

Output example

{
"restaurantId": 227388,
"name": "Peter Pane - Dresden",
"url": "https://www.opentable.com/r/peter-pane-dresden-am-zwinger-dresden",
"cuisine": "Burgers",
"priceBand": "€30 and under",
"currencySymbol": "€",
"rating": 4.5,
"reviewCount": 515,
"recentReservationCount": 21,
"neighborhood": "Old Town",
"city": "Dresden",
"state": "SN",
"postCode": "01067",
"address": "Wilsdruffer Straße 14-16, Dresden, SN, 01067",
"latitude": 51.0515654,
"longitude": 13.7349184,
"phone": "0351 48676840",
"diningStyle": "Casual Dining",
"hasTakeout": true,
"outdoorSeating": false,
"photoUrl": "https://resizer.otstatic.com/v3/photos/92048640-2?width=320&height=320&webp=true",
"searchQuery": "Dresden",
"detailsFetched": false,
"reviewsFetched": false,
"reviews": null
}

How much does it cost to scrape OpenTable?

The Actor uses pay-per-event billing, so you pay only for the data you receive:

  • $2 per 1,000 restaurants — charged as a dataset-item event for every restaurant saved to the dataset.
  • $3 per 1,000 restaurants — charged as a listing-details event, only when scrapeListingDetails is enabled.
  • $2 per 1,000 restaurants — charged as a restaurant-reviews event, only when scrapeReviews is enabled.

A run also charges a one-time $0.00005 actor-start event. Higher Apify plans (Bronze, Silver, Gold) apply discounted per-event rates, up to 15% off. Use maxItems and maxReviews to control spend exactly.

Reliability and responsible use

  • Proxy — Apify Residential proxies are strongly recommended; the default configuration enables them.
  • Enrichment controls — listing details and reviews are only collected when their toggles are enabled, keeping listing-only runs faster and cheaper.
  • Conditional fields — profile and review fields are null unless the matching toggle is on.
  • Availability snapshots — reservation availability reflects the moment of the run; treat it as a point-in-time snapshot.
  • Lawful use — you are responsible for using collected data in line with OpenTable's terms and applicable laws.

Frequently asked questions

Can I collect reviews for a single restaurant?

Yes. Put the restaurant profile URL (https://www.opentable.com/r/...) in startUrls, set scrapeReviews to true, and optionally cap with maxReviews.

Can I schedule OpenTable Scraper to run automatically?

Yes. Use the Scheduler tab in Apify Console to run daily or weekly, and set up webhooks to push fresh data into your pipeline.

What counts as one result?

Each restaurant saved to the dataset bills one dataset-item event. Enabling details adds a listing-details event per restaurant; enabling reviews adds a restaurant-reviews event per restaurant.

Why did my run return no restaurants?

OpenTable may be limiting requests. Keep the default Apify Residential proxy enabled in proxyConfiguration, and retry with a different query or date.

How do I avoid duplicate records?

Deduplicate by restaurantId, which is stable across runs. You can also cap output with maxItems.

Do I need a proxy?

Yes. Residential proxies are strongly recommended for reliable OpenTable access; keep the default configuration enabled.

Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, a sample URL, the required fields, and expected volume so we can assess the request.