OpenTable Restaurant Emails & Leads | Menus, Reviews
Pricing
from $0.17 / 1,000 restaurant profile scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
14 days ago
Last modified
Categories
Features
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
- Open the OpenTable Scraper actor page on Apify.
- Click Try for free or Start.
- There is nothing to configure — no token, no login. Just enter a search.
- In the Input tab, type a search term (e.g.
new york,italian san francisco, ornobu) or paste direct restaurant profile URLs intostartUrls. - Optionally adjust
maxRestaurants,maxReviewsPerRestaurant, reservationdateTimeandpartySize, and toggleincludeAvailability/includeReviews/includeMenus. - Click Run and wait for the results. Download the dataset as JSON, HTML, CSV, or Excel.
Input
| Field | Type | Description |
|---|---|---|
searchTerm | string | Search query (location, cuisine, or restaurant name). |
startUrls | array | Direct OpenTable profile URLs (https://www.opentable.com/r/...). |
maxRestaurants | integer | Max restaurant profiles to scrape (default 50, up to 1000). |
maxReviewsPerRestaurant | integer | Max individual reviews per restaurant (default 10, up to 200). |
includeAvailability | boolean | Fetch real-time availability slots (default true). |
includeReviews | boolean | Include individual diner reviews (default true). |
includeMenus | boolean | Include full menu data when SSR is reachable (default true). |
dateTime | string | Reservation date/time for availability, e.g. 2026-09-20T19:00:00. Default: today 7 PM. |
partySize | integer | Party size for availability lookups (default 2). |
Output
Each run writes to four dedicated datasets so row types never mix:
| Dataset | Contents |
|---|---|
| Default dataset | One restaurant row per profile (search profile data) |
reviews | One row per individual diner review |
availability | One row per reservation slot |
menus | One 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
| Field | Description |
|---|---|
restaurantId / name / url | Restaurant identity and profile link |
primaryCuisine / priceBand | Cuisine and price range |
rating / reviewCount | Overall rating and total review count |
address / neighborhood | Street address and neighborhood name |
latitude / longitude | Map coordinates |
diningStyle / features / awards | Restaurant attributes |
photos | Gallery image URLs |
reviews dataset
| Field | Description |
|---|---|
restaurantId / restaurantName | Parent restaurant reference |
reviewId / text | Review identifier and full review text |
ratingOverall / ratingFood / ratingService / ratingAmbience / ratingValue | Individual ratings |
noiseLevel | Quiet / Moderate / Loud |
reviewerName / reviewerMetro | Diner name and metro |
submittedDateTime / dinedDateTime | Review and dining dates |
availability dataset
| Field | Description |
|---|---|
restaurantId | Parent restaurant reference |
dateTime | Full date-time of the slot |
time | Short time string |
type | Slot type (Standard / Experience) |
menus dataset
| Field | Description |
|---|---|
restaurantId / restaurantName | Parent restaurant reference |
menuTitle / sectionTitle | Menu and section names |
itemTitle / itemDescription | Menu item details |
price / currency | Price 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: falsefor 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
searchTermto discover restaurants (location, cuisine, or a specific restaurant name); usestartUrlsto 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
dateTimeandpartySizeto match your use case. Availability is best-effort from cloud IPs and may require retries. - Scale: increase
maxRestaurantsfor full-city crawls (up to 1000). - Speed up: disable
includeMenusandincludeAvailabilityon 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.