OpenTable Restaurant Emails & Leads | Menus, Reviews avatar

OpenTable Restaurant Emails & Leads | Menus, Reviews

Pricing

from $0.17 / 1,000 restaurant profile scrapeds

Go to Apify Store
OpenTable Restaurant Emails & Leads | Menus, Reviews

OpenTable Restaurant Emails & Leads | Menus, Reviews

[$0.20/1k] Get restaurant leads from OpenTable: public contact emails (enriched from each restaurant's website). Built for B2B outreach, CRM enrichment, AI agents and market research. Schedule it to keep your lead list fresh — pay only for data you get (PPE).

Pricing

from $0.17 / 1,000 restaurant profile scrapeds

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

14 days ago

Last modified

Features

Limited permissions

Share

OpenTable Scraper

OpenTable Scraper extracts restaurant data from OpenTable — the world's largest restaurant reservation platform. It collects restaurant profiles, menus (when reachable), diner reviews, and reservation availability, delivered as structured JSON.

Built on the Apify platform, it gives you API access, scheduling, monitoring, and one-click integration with your existing data pipeline. No login and no token is required — it works out of the box from Apify's cloud.

What does OpenTable Scraper do?

  • Search restaurants by location, cuisine, or name (e.g. "new york", "italian san francisco", "nobu") and rank them by relevance.
  • Scrape restaurant profiles: name, cuisines, price band, rating, review count, address, neighborhood, coordinates, photos, dining style, features, awards, description, and more.
  • Collect individual diner reviews — full review text, food/service/ambience/value ratings, noise level, reviewer name, VIP status, helpfulness votes, and review dates.
  • Fetch real-time availability slots (intermittently available from cloud IPs — best-effort).
  • Grab photos and map coordinates for map integration.

The actor uses an anonymous web session against OpenTable's public GraphQL API — plain JSON over HTTPS, no browser rendering — which keeps it fast and cheap (typically 1–3 seconds per restaurant).

Why use OpenTable Scraper?

  • Hospitality analytics — track ratings, review sentiment, and pricing across competitors.
  • Restaurant marketing agencies — build prospect lists with profile data and addresses.
  • Delivery / reservation aggregators — enrich your catalog with cuisine, rating, and location data.
  • Local lead-gen teams — generate qualified restaurant leads with verified addresses and coordinates.
  • Zero setup friction — because there is no token to paste and nothing to refresh, the actor can be scheduled and handed to non-technical teammates safely.

How to use OpenTable Scraper

  1. Open the OpenTable Scraper actor page on Apify.
  2. Click Try for free or Start.
  3. There is nothing to configure — no token, no login. Just enter a search.
  4. In the Input tab, type a search term (e.g. new york, italian san francisco, or nobu) or paste direct restaurant profile URLs into startUrls.
  5. Optionally adjust maxRestaurants, maxReviewsPerRestaurant, reservation dateTime and partySize, and toggle includeAvailability / includeReviews / includeMenus.
  6. Click Run and wait for the results. Download the dataset as JSON, HTML, CSV, or Excel.

Input

FieldTypeDescription
searchTermstringSearch query (location, cuisine, or restaurant name).
startUrlsarrayDirect OpenTable profile URLs (https://www.opentable.com/r/...).
maxRestaurantsintegerMax restaurant profiles to scrape (default 50, up to 1000).
maxReviewsPerRestaurantintegerMax individual reviews per restaurant (default 10, up to 200).
includeAvailabilitybooleanFetch real-time availability slots (default true).
includeReviewsbooleanInclude individual diner reviews (default true).
includeMenusbooleanInclude full menu data when SSR is reachable (default true).
dateTimestringReservation date/time for availability, e.g. 2026-09-20T19:00:00. Default: today 7 PM.
partySizeintegerParty size for availability lookups (default 2).

Output

Each run writes to four dedicated datasets so row types never mix:

DatasetContents
Default datasetOne restaurant row per profile (search profile data)
reviewsOne row per individual diner review
availabilityOne row per reservation slot
menusOne row per menu item (when SSR is reachable)

All datasets are downloadable independently as JSON, HTML, CSV, or Excel. Each run creates fresh copies in the Storage tab, and the Output tab exposes direct API links to each.

Restaurant example (default dataset)

{
"_type": "restaurant",
"restaurantId": 1191640,
"name": "Ci Siamo",
"url": "https://www.opentable.com/r/ci-siamo-new-york",
"primaryCuisine": "Italian",
"priceBand": "$50 and over",
"rating": 4.7,
"reviewCount": 585,
"neighborhood": "Manhattan West",
"address": {
"line1": "440 W 33rd St",
"line2": "Suite 100",
"city": "New York",
"state": "NY",
"postCode": "10001"
},
"diningStyle": "Casual Dining",
"latitude": 40.7525,
"longitude": -73.9989,
"photos": ["https://resizer.otstatic.com/v4/photos/87969224-2?width=640&height=360"],
"features": { "bar": true, "counter": false, "outdoor": true }
}

Review example (reviews dataset)

{
"_type": "review",
"restaurantId": 1191640,
"restaurantName": "Ci Siamo",
"reviewId": "OT-1191640-...",
"text": "Wow!! This has to be the best service I've ever experienced...",
"ratingOverall": 5,
"ratingFood": 5,
"ratingService": 5,
"ratingAmbience": 5,
"ratingValue": 5,
"noiseLevel": "QUIET",
"reviewerName": "Addy",
"reviewerMetro": "Mississippi",
"submittedDateTime": "2026-09-13T23:48:03Z"
}

You can download each dataset in various formats such as JSON, HTML, CSV, or Excel — either from the Output tab or the Storage section of the Actor.

Data tables

Default dataset — restaurant profiles

FieldDescription
restaurantId / name / urlRestaurant identity and profile link
primaryCuisine / priceBandCuisine and price range
rating / reviewCountOverall rating and total review count
address / neighborhoodStreet address and neighborhood name
latitude / longitudeMap coordinates
diningStyle / features / awardsRestaurant attributes
photosGallery image URLs

reviews dataset

FieldDescription
restaurantId / restaurantNameParent restaurant reference
reviewId / textReview identifier and full review text
ratingOverall / ratingFood / ratingService / ratingAmbience / ratingValueIndividual ratings
noiseLevelQuiet / Moderate / Loud
reviewerName / reviewerMetroDiner name and metro
submittedDateTime / dinedDateTimeReview and dining dates

availability dataset

FieldDescription
restaurantIdParent restaurant reference
dateTimeFull date-time of the slot
timeShort time string
typeSlot type (Standard / Experience)
FieldDescription
restaurantId / restaurantNameParent restaurant reference
menuTitle / sectionTitleMenu and section names
itemTitle / itemDescriptionMenu item details
price / currencyPrice and currency code

Cloud vs. local behavior

OpenTable uses Akamai WAF protection. From Apify cloud datacenter IPs:

  • ✅ Search + profiles — fully functional via GraphQL API
  • ✅ Reviews — fully functional via GraphQL API
  • ⚠️ Availability — may be intermittently blocked (returns gracefully without slots)
  • ⚠️ Menus / hours / phone / website — blocked from datacenter IPs (SSR pages return 403); set includeMenus: false for faster runs on Apify Cloud
  • 🌐 Geocoding — automatic fallback to OpenStreetMap Nominatim when OpenTable's SSR is blocked

When running on Apify with a Residential or Static proxy, full menu and profile data becomes available.

Pricing / Cost estimation

The actor runs on 256 MB memory and uses plain HTTPS (no browser), so it is very cheap:

  • A typical run of 50 restaurants with reviews costs well under 1 compute unit.
  • Free Apify users get a capped preview of 10 restaurants per run.
  • No paid proxy required — the anonymous web session works from Apify's datacenter IPs.

Tips / Advanced options

  • Search vs. direct URLs: use searchTerm to discover restaurants (location, cuisine, or a specific restaurant name); use startUrls to scrape a known list of profiles.
  • Multi-word search terms: the actor automatically resolves locations inside a query — "italian new york", "sushi chicago", and "carbone" all work.
  • Availability: set dateTime and partySize to match your use case. Availability is best-effort from cloud IPs and may require retries.
  • Scale: increase maxRestaurants for full-city crawls (up to 1000).
  • Speed up: disable includeMenus and includeAvailability on cloud runs to skip SSR requests that will fail anyway.
  • Schedule + monitoring: run it on a cron schedule and monitor failures with Apify's alerting.

FAQ, disclaimers, and support

Is this legal? Scraping publicly available data is generally permitted, but you are responsible for complying with OpenTable's Terms of Service and applicable laws.

Why no token? The actor opens an anonymous web session and uses the public GraphQL API that powers OpenTable's own search pages — no account data is accessed.

Known limitations:

  • Menu, hours, phone, and website data come from server-side rendered pages that are blocked by Akamai from datacenter IPs. With a clean residential proxy, these become available.
  • Availability slots may be intermittently blocked by Akamai rate limiting from datacenter IPs.
  • Available regions: primarily US restaurants (databaseRegion: NA).

For issues or feature requests, open a ticket in the Issues tab.