OpenTable Restaurant Search API Scraper
Pricing
from $0.50 / 1,000 restaurant records
OpenTable Restaurant Search API Scraper
Search OpenTable restaurants by location (city/area/address or lat-lng) with an optional cuisine/keyword term, and export rich records (name, id, profile URL, cuisines, price band, rating, review count, neighbourhood, address, coordinates, photos).
Pricing
from $0.50 / 1,000 restaurant records
Rating
0.0
(0)
Developer
R.L.
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
OpenTable Restaurant Search Scraper π β Scrape OpenTable Restaurant Search.com ID, Name, Profile URL, Cuisines
OpenTable Restaurant Search Scraper β Search OpenTable restaurants by location (city/area/address or lat-lng) with an optional cuisine/keyword term, and export rich records (name, id, profile URL, cuisines, price band, rating, review count, neighbourhood, address, coordinates, photos). It reads OpenTable Restaurant Search's own API directly, so it's fast, reliable and complete β no flaky HTML parsing, no headless browser. Export to JSON, CSV, Excel, or an API.
β¨ Why use this OpenTable Restaurant Search Scraper?
- π’ No code required β set your input, click Start, download your data.
- β‘ Fast & accurate β reads OpenTable Restaurant Search's own private API and returns structured JSON, not scraped HTML.
- π§Ύ Rich, structured data β every field below, clean and ready to use.
- π Full pagination β collects results to your
maxItemscap. - πΈ Transparent pay-per-result pricing β pay only for the rows you get.
- π€ Export anywhere β JSON, CSV, Excel, XML, or pull it live via the Apify API.
π― What can you do with OpenTable Restaurant Search data?
- Market & competitor research β analyse OpenTable Restaurant Search property listings at scale.
- Price & availability monitoring β track changes over time.
- Data science & trend analysis β build clean datasets.
- Lead generation & enrichment β feed OpenTable Restaurant Search data into your own tools.
π₯ What data does the OpenTable Restaurant Search Scraper extract?
Each row includes: id, name, url, cuisines, priceBand, priceBandId, rating, reviewCount, neighborhood, neighborhoodId, metroId, address, city, state β¦and more. See the full Data table below.
π How to scrape OpenTable Restaurant Search.com (3 steps)
- Set your input β provide
locationorq(see the table below; defaults work out of the box). - Pick options β filters, a
proxyConfiguration, and amaxItemscap. - Run & export β click Start, then download the dataset as JSON/CSV/Excel or fetch it via the API.
π Deep scraping β details & reviews
Both are off by default and billed as separate pay-per-event surcharges, so a plain search run stays cheap.
| Option | Adds | Event |
|---|---|---|
| Include restaurant details | Phone number (raw digits + formatted), website, opening hours, dining style, dress code, parking, payment options, menu link, popular dishes, max party size, booking window, bookings in the last 24h | detail-row |
| Include diner reviews | Review text, author, posted/reservation dates, and per-category ratings β overall, food, service, ambience, value, noise | reviews-row |
Reviews are paged automatically to reviewsPerRestaurant and can be ordered by
newest, highest rated, lowest rated or recommended. Enrichment runs in
parallel (detailConcurrency, default 8) β 30 restaurants with both options take roughly
25 seconds rather than several minutes.
β οΈ Details need a US proxy
OpenTable geo-gates the restaurant-profile route. It does not return an error from a non-US IP β it simply hangs until the request times out. Measured on the Apify platform, same input, 5 restaurants:
| Proxy | Phones returned | Run time |
|---|---|---|
| Apify Proxy (default datacenter) | 3 / 5 | 133 s |
| Apify Proxy β RESIDENTIAL, country US | 5 / 5 | 24 s |
Residential US is therefore the default β details work out of the box, no configuration needed. It is not a speed penalty: a 100-record search-only run took 18.5 s on residential vs 16.1 s on datacenter, and used only 0.00012 GB of residential transfer (~860k records per 10 GB).
The difference is platform usage cost β that same run was $0.0028 residential vs $0.0004
datacenter. Search and reviews are not geo-gated, so for large search-only jobs switching
proxyConfiguration to a datacenter group is the cheaper choice; keep residential whenever
details are on.
βοΈ Input
| Field | Type | Default | Description |
|---|---|---|---|
location | string | New York, NY | City, area, or address to search around (e.g. "New York, NY", "San Francisco"). Resolved to coordinates at run time. |
q | string | β | Optional cuisine or keyword (e.g. "sushi", "Indian"). |
lat | number | β | Optional latitude override; skips the location lookup. |
lon | number | β | Optional longitude override; skips the location lookup. |
maxItems | integer | 100 | Maximum number of restaurants to return (0 = all pages). |
includeDetails | boolean | false | Fetch each restaurant's full profile: phone number, website, opening hours, dining style, dress code, parking, payment options, menu link and popular dishes. One extra request per restaurant, billed as a separate detail-row event. Requires a US proxy β this route is geo-gated and simply hangs from non-US IPs. |
includeReviews | boolean | false | Fetch diner reviews per restaurant β text, author, dates and the per-category ratings (food, service, ambience, value, noise). Billed as a separate reviews-row event. |
reviewsPerRestaurant | integer | 20 | How many reviews to fetch for each restaurant (paged automatically). Only used when reviews are enabled. |
reviewsSort | enum | newestReview | Which reviews come first. β one of newestReview, highestRating, lowestRating, recommended |
detailConcurrency | integer | 8 | How many restaurants to enrich in parallel (1-20). Raise for speed, lower to be gentler on the API and your proxy. |
proxyConfiguration | object | Apify Proxy | Route requests through Apify Proxy (defaults to RESIDENTIAL/US). Search works from any egress, but restaurant details are geo-gated to US IPs β enable Apify Proxy (RESIDENTIAL, country US) when using the details option. |
Example input
{"location": "New York, NY","maxItems": 100,"includeDetails": false,"includeReviews": false,"reviewsPerRestaurant": 20,"reviewsSort": "newestReview","detailConcurrency": 8,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
π€ Output
Each result is a JSON object like this:
{"id": "108541","name": "Sofi Restaurant","url": "https://www.opentable.com/restaurant/profile/108541","cuisines": ["Italian"],"priceBand": "$31 to $50","priceBandId": "3","rating": 4.7,"reviewCount": 159,"neighborhood": "South Loop","neighborhoodId": "82","metroId": "3","address": "616 South Dearborn","city": "Chicago","state": "IL","postalCode": "60605","country": "United States","latitude": 41.8737957,"longitude": -87.629455,"images": ["https://resizer.otstatic.com/v4/photos/67602167-3?width=105&height=105","https://resizer.otstatic.com/v4/photos/67602167-3?width=160&height=160","β¦+6 more"],"photosCount": 0,"description": "Born in Milan to a renowned restaurant family, Chef/Owner Maurizio Michi has always had a passion for cooking.\nThis Northern Italian Restaurant features clasβ¦","features": ["RESERVATION","ONLINE_WAITLIST","β¦+2 more"],"firstNextAvailableTime": "2026-08-22T16:30","phone": "3127535502","phoneFormatted": "(312) 753-5502","website": "http://www.sofichicago.com/","menuUrl": null,"hours": "MonβThu, Sun 4:00 pmβ10:00 pm\nFri, Sat 4:00 pmβ10:30 pm","diningStyle": "Casual Elegant","dressCode": "Business Casual","parkingInfo": "Street Parking","paymentOptions": ["AMEX","Discover","β¦+2 more"],"popularDishes": ["Gnocchi Genovese","Tagliatelle Bolognese","β¦+6 more"],"maxPartySize": 8,"maxAdvanceDays": 90,"isTakeoutEnabled": true,"hasGenderNeutralRestroom": true,"currencyCode": "USD","resosInLastDay": 24,"reviewsFetched": 3,"reviews": [{"β¦": "16 fields"},{"β¦": "16 fields"},"β¦+1 more"]}
π§Ύ Data table
| Field | Type | Description |
|---|---|---|
id | text | ID |
name | text | Name |
url | link | Profile URL |
cuisines | array | Cuisines |
priceBand | text | Price band |
priceBandId | text | Price band id |
rating | number | Rating |
reviewCount | number | Review count |
neighborhood | text | Neighbourhood |
neighborhoodId | text | Neighbourhood id |
metroId | text | Metro id |
address | text | Address |
city | text | City |
state | text | State |
postalCode | text | Postal code |
country | text | Country |
latitude | number | Latitude |
longitude | number | Longitude |
images | array | Photo URLs |
photosCount | number | Photos count |
description | text | Description |
features | array | Features |
firstNextAvailableTime | text | First next available |
phone | text | Phone |
phoneFormatted | text | Phone (formatted) |
website | link | Website |
menuUrl | link | Menu |
hours | text | Opening hours |
diningStyle | text | Dining style |
dressCode | text | Dress code |
parkingInfo | text | Parking |
paymentOptions | array | Payment options |
popularDishes | array | Popular dishes |
maxPartySize | number | Max party size |
maxAdvanceDays | number | Booking window (days) |
isTakeoutEnabled | text | Takeout |
hasGenderNeutralRestroom | text | Gender-neutral restroom |
currencyCode | text | Currency |
resosInLastDay | number | Bookings last 24h |
reviewsFetched | number | Reviews fetched |
reviews | array | Reviews |
π° Pricing β pay per result
This actor uses pay-per-event pricing: you pay only for the rows it delivers.
| You scrape | Price |
|---|---|
| Restaurant record | $0.50 per 1,000 rows |
| Restaurant details | $0.50 per 1,000 rows |
| Diner reviews | $0.50 per 1,000 rows |
π Use the OpenTable Restaurant Search Scraper via API
Run it programmatically with the Apify API:
curl -X POST "https://api.apify.com/v2/acts/opentable-api-scraper/runs?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"location": "New York, NY","maxItems": 100,"includeDetails": false,"includeReviews": false,"reviewsPerRestaurant": 20,"reviewsSort": "newestReview","detailConcurrency": 8,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}'
Or with the Apify CLI: apify call opentable-api-scraper -i input.json -o.
β FAQ
Do I need an account or API key for OpenTable Restaurant Search?
No. The actor talks to OpenTable Restaurant Search's public/mobile API for you β you only need an Apify account.
Do I need a proxy?
A proxy is recommended for reliable runs; set proxyConfiguration (Residential is safest for geo-restricted or bot-protected sites).
What export formats are supported?
JSON, CSV, Excel, XML, JSONL, RSS, or live via the Apify API and dataset endpoints.
Is scraping this legal?
You are responsible for how you use the data. Scrape only public property listing data and comply with OpenTable Restaurant Search.com's Terms and applicable law (e.g. GDPR/CCPA for personal data).
π οΈ How it works
The actor impersonates OpenTable Restaurant Search's official app/site and calls its private API the same way the app does, then normalises each response into the flat record above. No browser, no HTML scraping β just clean, structured data.
π Good to know
- Scrape only public property listing data and respect OpenTable Restaurant Search.com's Terms of Service and robots policy.
- For personal data, comply with GDPR/CCPA and applicable law β you are the data controller.
- Fields can be
nullwhen OpenTable Restaurant Search doesn't expose them for a given record.
β Found this useful?
Give the OpenTable Restaurant Search Scraper a star on Apify and check out my other apify-*-api-scraper actors.