OpenTable Scraper — Ratings, Reviews & Cuisine
Pricing
from $5.00 / 1,000 restaurant scrapeds
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. HTTP-only, MCP-ready.
Pricing
from $5.00 / 1,000 restaurant scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape OpenTable restaurants by city, cuisine, neighborhood, or restaurant name and export a clean, structured dataset: rating, review count, price band, cuisine, full address, phone, coordinates, neighborhood, top review, photos, and dining features. HTTP-only, no login, no cookies — built to be called by AI agents (MCP-ready) and by data teams alike.
What it does
Give it a search term like Miami, Italian, Chicago, or a restaurant name like Carbone, and the actor returns every matching restaurant with the fields you need for lead generation, market research, competitor tracking, or review analysis. One page = 50 restaurants; the actor auto-paginates to your maxRestaurants cap (a large metro can exceed 800 restaurants).
When to use it
- Local lead generation — build restaurant contact lists (name, phone, address, neighborhood) for a city or cuisine.
- Market & competitor research — pull an entire metro's dining scene with ratings, review counts, and price tiers.
- Review & sentiment monitoring — track rating and review-count movement plus a highlighted top-review snippet per restaurant.
- Geo / mapping datasets — every record ships with latitude/longitude and a full postal address.
- AI agents — a single natural tool call: search term in, structured JSON out.
When NOT to use it: this actor does not scrape individual restaurant reservation-availability time slots or full review threads (those pages are bot-protected). Search individual restaurants by name to get their profile record.
Output
One record per restaurant. Example:
| Field | Example |
|---|---|
name | Saltie Girl |
primaryCuisine | Seafood |
priceBand / priceRange | $31 to $50 / 3 |
overallRating / reviewCount | 4.6 / 2271 |
neighborhood | Back Bay |
addressLine1, city, state, postCode | 279 Dartmouth Street, Boston, MA, 02116 |
latitude, longitude | 42.3512, -71.0776 |
phone | +16172670691 |
topReview | "Fabulous, as always! Great food and service…" |
recentReservationCount | 230 |
profileUrl | https://www.opentable.com/r/saltie-girl-back-bay-boston |
Also included per record: diningStyle, currency, hasBar, hasOutdoorSeating, hasCounter, hasHighTop, maxPartySize, hasTakeout, inPremiumMarketplace, awards[], offers[], photoUrls[], description, searchTerm, resultPosition, scrapedAt.
{"restaurantId": 52135,"name": "Saltie Girl","primaryCuisine": "Seafood","priceBand": "$31 to $50","overallRating": 4.6,"reviewCount": 2271,"neighborhood": "Back Bay","city": "Boston","state": "MA","latitude": 42.3511566,"longitude": -71.0775679,"phone": "+16172670691","topReview": "Fabulous, as always! Great food and service…","profileUrl": "https://www.opentable.com/r/saltie-girl-back-bay-boston"}
Pricing
Pay-per-event.
| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Restaurant scraped | $0.005 per unique restaurant |
A 500-restaurant city pull costs roughly $2.50. You are charged only for unique restaurants actually returned. Pay-per-usage (compute + proxy) is also available for very large jobs — pick whichever billing suits you at run time.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
searchTerms | string[] | ["New York"] | City, cuisine, neighborhood, or restaurant name — one per line. |
startUrls | array | — | OpenTable search/listing URLs (e.g. /s/?term=miami). Not /r/ detail pages. |
maxRestaurants | integer | 50 | Cap per term / URL. Auto-paginates (50/page). |
partySize | integer | 2 | Covers, 1–20. |
reservationDate | string | — | Optional YYYY-MM-DD to bias toward availability. |
reservationTime | string | 19:00 | Optional HH:mm; only used with a date. |
proxyConfiguration | object | Residential US | Recommended — OpenTable blocks datacenter IPs. |
Example input
{"searchTerms": ["Italian, Chicago", "Steakhouse, Austin"],"maxRestaurants": 200,"partySize": 2,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }}
Using it via API
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~opentable-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{ "searchTerms": ["Miami"], "maxRestaurants": 100 }'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/opentable-scraper').call({searchTerms: ['San Francisco'],maxRestaurants: 150,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
AI agents & MCP
This actor is MCP-ready. In AI frameworks, expose it through the Apify MCP server as apify--opentable-scraper. Input is a single search term; output is structured JSON per restaurant — ideal for restaurant-discovery, lead-enrichment, and local-market agents.
Reliability
OpenTable resets datacenter and non-browser TLS connections at the edge. This actor impersonates a real Chrome TLS/HTTP-2 fingerprint (impit) and runs over Apify Residential proxies, parsing OpenTable's own embedded page state — no brittle HTML selectors. If OpenTable blocks a request, the actor retires the session and retries; if everything is blocked, the run fails honestly rather than returning an empty dataset silently.
FAQ
Can I get email addresses? OpenTable does not publish restaurant emails; you get phone, address, and website-derived profile URL. Pair with a contact-enrichment actor for emails.
Can I scrape one specific restaurant? Yes — put its name (and city) in searchTerms; it will be returned as a record. Direct /r/ profile URLs are bot-protected and not supported.
Does party size / date filter results? They contextualize OpenTable's availability-aware ranking; they do not hard-filter restaurants out.
Which countries? Any OpenTable market — search by the local city name. Proxy country defaults to US; change it for other regions.
Legal
This actor collects only publicly available information from OpenTable search result pages. Use the data in compliance with OpenTable's Terms of Service, applicable laws (including GDPR/CCPA where relevant), and only for legitimate purposes. You are responsible for how you use scraped data. This actor is not affiliated with or endorsed by OpenTable.