OpenTable Scraper - Restaurants, Phones, Reviews & Tables
Pricing
from $0.18 / 1,000 restaurants
OpenTable Scraper - Restaurants, Phones, Reviews & Tables
Scrape OpenTable restaurants by city, keyword, coordinates or URL: name, cuisine, price band, address, coordinates, phone, rating, reviews, bookings today. Add bookable times, profile details (website, hours, menus, chef), diner reviews and website emails. Deep search past the ~1,000 cap.
Pricing
from $0.18 / 1,000 restaurants
Rating
0.0
(0)
Developer
Scrapers Delight
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
What does OpenTable Scraper do?
OpenTable Scraper exports restaurants from OpenTable - the reservation network most sit-down restaurants in the US, UK, Canada, Ireland, Germany, Mexico, Japan and Australia list on. Give it a city, a neighbourhood, coordinates, a cuisine keyword or OpenTable URLs, and each row is one restaurant: name, cuisine, price band, full address, coordinates, phone, rating, review count and how many times it was booked today. Restaurant suppliers, delivery and POS sales teams, hospitality analysts and local-marketing agencies use it to build restaurant lead lists and market maps.
- ๐ฝ๏ธ Every restaurant OpenTable lists for a place - and with Deep search, past OpenTable's ~1,000-per-search cap (New York: 990 โ 2,311; London: 999 โ 2,796).
- ๐ Contact data in every row - phone on 99% of restaurants, street address and coordinates on 100%.
- ๐ Bookable times for a date, time and party size (OpenTable's own availability, 50 restaurants per call).
- ๐งพ Restaurant details - website, opening hours, all cuisines, chef, dress code, parking, payment options, food / service / ambience / value ratings, noise, popular dishes, private dining, and full menus with prices.
- โญ Diner reviews - text, five ratings, noise, dates, diner, VIP, helpful votes and the restaurant's reply; newest, highest, lowest or OpenTable's recommended order; filter by date, rating, VIP or a word ("birthday").
- ๐ง Emails from each restaurant's own website (found for 50% of restaurants in our test runs).
- ๐ Any OpenTable market - opentable.com, .co.uk, .ca, .ie, .de, .com.au, .com.mx, .jp and more, picked from the place you type.
- ๐ No login, no cookies, no API key, no browser - fast and cheap.
What data can you get from OpenTable?
๐ท๏ธ Name, restaurantId, OpenTable URL | ๐ Cuisine, all cuisines | ๐ฒ priceBand ($$-$$$$), priceRange |
๐ address, city, state, postalCode | ๐บ๏ธ latitude, longitude, neighborhood | ๐ phone, phoneFormatted |
โญ rating, reviewCount | ๐ฅ recentReservationCount (booked today) | ๐ท diningStyle, dressCode |
๐ website, ๐ง email, facebookUrl | ๐ hours | ๐จโ๐ณ executiveChef |
๐ฅ ratingFood, ratingService, ratingAmbience, ratingValue, noiseLevel | ๐ menus (sections, dishes, prices) | ๐ฒ popularDishes |
๐
isAvailable, availableTimes | ๐ฅ hasPrivateDining, privateDiningCapacity | ๐ต hasTakeout, deliveryPartners, orderOnlineLink |
๐ช hasBar, hasOutdoor, hasHighTop, hasCounter | ๐
awards (e.g. MICHELIN) | ๐ฌ reviews / review rows |
How to scrape OpenTable with OpenTable Scraper
- Create a free Apify account (it comes with free monthly credit).
- Open OpenTable Scraper and type one or more places, e.g.
Chicago, ILorLondon. - Optional: add a cuisine or keyword, filters, Bookable times, Restaurant details, Reviews or Find emails.
- Click Start.
- Download the restaurants as JSON, CSV, Excel or HTML, or read them through the API.
โฌ๏ธ Input
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (restaurants by place), restaurants (the URLs / ids / names you list), reviews (one row per review). |
locations | array | - | Places as you would type them on OpenTable: "Chicago, IL", "London", "SoHo, New York", "Paris, France". |
searchTerms | array | - | Cuisine or keyword: "sushi", "steakhouse", "brunch". Empty = every restaurant. |
latitude, longitude | number | - | Search around exact coordinates. |
startUrls | array | - | OpenTable restaurant pages (/r/โฆ, /<name>, /restaurant/profile/<id>) or search pages (/s?โฆ) from any OpenTable site. |
restaurantIds | array | - | OpenTable restaurant ids, e.g. "108541". |
restaurantNames | array | - | "Name, City", e.g. "Nobu Fifty Seven, New York". A name OpenTable does not match is reported, never guessed. |
maxResults | integer | 100 | Most rows the run delivers. |
maxResultsPerSearch | integer | 0 | Cap per place ร keyword (0 = none). |
deepSearch | boolean | false | Search the area in map tiles to get past OpenTable's ~1,000 per search. |
sortBy | string | best | best, rating, distance, newest. |
priceBands | array | - | 2 = $$ ($30 and under), 3 = $$$ ($31-$50), 4 = $$$$ ($50 and over). |
awardTags, tableCategories, occasions, onlyJustAdded | - | OpenTable's own filters: awards (MICHELIN), seating (bar, counter, highTop, outdoor), occasions (ROMANTIC, BRUNCH), new restaurants. | |
searchRadiusMiles | integer | 0 | OpenTable's search radius (also the area Deep search covers). |
onlyBookable | boolean | false | Only restaurants with tables around the date / time / party size below. |
cuisines, minRating, minReviews, withPhoneOnly, wheelchairAccessible | - | Refine filters, applied before anything is charged. | |
includeAvailability | boolean | false | Bookable times around date (or daysAhead, default tomorrow), time (default 19:00), partySize (default 2), plus availabilityDays more days. |
includeDetails | boolean | false | Read each restaurant's OpenTable profile (website, hours, chef, ratingsโฆ). |
includeMenus | boolean | false | Add OpenTable-hosted menus (turns on details). |
includeReviews | boolean | false | Add reviews; maxReviewsPerRestaurant (20), reviewsSort, reviewsSince, reviewsMinRating, reviewsVipOnly, reviewsKeyword. |
includeEmails | boolean | false | Emails from each restaurant's own website (turns on details); verifyEmailDomain checks the domain takes mail. |
domain | string | auto | OpenTable country site; auto picks it from the place. |
proxyConfiguration | object | - | Optional. The actor uses Apify's own connection and switches to Apify RESIDENTIAL by itself when OpenTable refuses it. |
Input JSON
{"locations": ["Chicago, IL", "London"],"searchTerms": ["steakhouse"],"priceBands": ["3", "4"],"maxResults": 200,"includeDetails": true,"includeReviews": true,"maxReviewsPerRestaurant": 10}
Places, keywords and OpenTable's 1,000-restaurant window
OpenTable answers a search with the restaurants nearest the place's centre - about 750 to 1,000 of them. Type the place the way OpenTable's own search box knows it; the run log and RUN_SUMMARY show what each place was read as (Chicago, IL โ Chicago, London โ London, United Kingdom, New York โ New York City). For a whole metro, switch on Deep search: the area is cut into map tiles, each searched on its own, and every restaurant is delivered once.
Restaurants and reviews you already know
mode: restaurants takes OpenTable URLs, ids or "Name, City" and returns each restaurant from its profile page (details included). mode: reviews returns one row per review for the restaurants you list - or for every restaurant a search finds.
โฌ๏ธ Output
A restaurant from a real run (Austin, TX, 100 restaurants):
{"restaurantId": "1280941","name": "Aba - Austin","url": "https://www.opentable.com/r/aba-austin","cuisine": "Mediterranean","priceBand": "$$$$","priceRange": "$50 and over","neighborhood": "South Congress","address": "1011 S Congress Ave","city": "Austin","state": "TX","postalCode": "78704-1779","latitude": 30.2534769,"longitude": -97.7478877,"phoneFormatted": "(737) 273-0199","rating": 4.8,"reviewCount": 2165,"recentReservationCount": 188,"diningStyle": "Casual Dining","hasPrivateDining": true,"maxPartySize": 8,"searchTotalResults": 378}
With Restaurant details (Denver, CO):
{"name": "Champagne Tiger","website": "https://www.champagnetiger.com/","hours": "Brunch\nFriโSun 10:00 amโ3:30 pm\nDinner\nWed, Thu 4:30 pmโ9:00 pm","cuisines": ["French", "American"],"executiveChef": "Chef Josh Hood","dressCode": "Casual Dress","parking": "Private Lot","paymentOptions": ["AMEX", "Discover", "Mastercard", "Visa"],"ratingFood": 4.8, "ratingService": 4.8, "ratingAmbience": 4.8, "ratingValue": 4.7,"noiseLevel": 2,"reviewTags": ["Lively", "Great for brunch", "Good for groups"]}
A review row (mode: reviews, lowest rated first):
{"reviewId": "OT-1017331-256954-150259237775","restaurantName": "Brooklyn Chop House - Downtown","rating": 1, "ratingFood": 2, "ratingService": 1, "ratingAmbience": 2, "ratingValue": 2,"dinedAt": "2026-07-09T12:00:00-04:00","reviewerName": "John","reviewerMetro": "New York City","text": "We were 3 and the only table new guests seated at 12:39. Main course came out at 1:20. Never coming back!"}
Fields and how often they are filled
Measured on 5,107 restaurants (New York + London, deep search) for search fields, 90 restaurants (Denver + Austin) for details, 60 for emails, 200 reviews:
| Field | Filled | Field | Filled |
|---|---|---|---|
| name, URL, cuisine, price band, neighbourhood, address, city, postal code, coordinates, review count | 100% | website, hours, cuisines, dress code, parking, category ratings, noise | 100% |
| phone | 99% | amenities | 98% |
| rating | 96% | payment options | 88% |
booked today (recentReservationCount) | 83% (99% in Austin) | cross street | 82% |
state | 82% (UK addresses often have none) | executive chef | 70% |
| featured review excerpt | 92% | popular dishes | 54% |
| online-ordering link | 18% | Facebook page | 44% |
| delivery partners | 9% | menus | 26% |
| awards | 2% (all restaurants), 100% with the MICHELIN filter | email (website or profile) | 50% with Find emails |
Reviews: text, ratings, dates and diner on 100% of reviews; restaurant replies on 15%; VIP flag on 35%.
Use cases
- ๐ Food & beverage suppliers - a list of every upscale Italian restaurant in a metro with phone, address and chef.
- ๐ณ POS, payments and reservation-software sales - restaurants with their booking volume (
recentReservationCount) to prioritise outreach. - ๐ Hospitality market research - cuisine and price-band mix, ratings and availability by neighbourhood.
- ๐๏ธ Local marketing agencies - prospect lists with website, email and Facebook page.
- ๐ Reputation monitoring - new and low-rated reviews per restaurant, on a schedule.
- ๐ท Wine & spirits distributors - private-dining venues with capacity and contact details.
How much does it cost to scrape OpenTable?
Pay per result, no start fee:
| Event | Price | When |
|---|---|---|
| Restaurant | $0.00018 per restaurant ($0.18 per 1,000) | every restaurant row |
| Bookable times | $0.00027 per restaurant | each restaurant OpenTable answered availability for (Bookable times on) |
| Restaurant details | $0.00045 per restaurant | each restaurant whose profile page was read (details, menus, emails, wheelchair filter or restaurants mode) |
| Review | $0.00045 per review | each review delivered |
| Email found | $0.045 per restaurant | each restaurant delivered with at least one email (Find emails on) |
| Run | Cost |
|---|---|
| 20 restaurants (the prefilled demo) | $0.0036 |
| 100 restaurants | $0.018 |
| 1,000 restaurants | $0.18 |
| 100 restaurants with details | $0.063 |
| 100 restaurants with 20 reviews each | $0.918 |
A search that finds nothing costs nothing, and a restaurant found by two of your searches is delivered and charged once.
Integrations, API, scheduling & MCP
- Schedule a run (daily new restaurants in a city, weekly low-rated reviews) and get the results by webhook, email, Slack or Google Sheets.
- Connect Make, Zapier or n8n with the Apify integration.
- Call it from code with the Apify API -
apify-clientfor Python and JavaScript. - AI agents can run it through the Apify MCP server.
More restaurant scrapers
- Tripadvisor Scraper - restaurants, hotels and attractions with reviews.
- Restaurantji Scraper - restaurant leads with phones and cuisine.
- MenuPix Restaurant Scraper - restaurants with phone, website and address.
- New Liquor License Monitor - restaurants and bars about to open.
- UK Food Business Leads (FHRS) - every UK food business with its hygiene rating.
- More on our profile.
Limits & empty runs
- ~750-1,000 restaurants per search is OpenTable's own window; use Deep search, more places or keywords for more.
- Bookable times depend on OpenTable answering its availability call. It limits that call per connection: in our tests it answered every time on some connections and refused others for a while. Restaurants it refuses come without times and are not charged for them; after three refused calls in a row the run stops asking. Rows always carry
recentReservationCount(bookings today). - A date search pages less cleanly than OpenTable's normal search (849 rows โ 801 unique in New York): every restaurant is delivered once, but a few may be missed - leave "Only restaurants with tables" off for complete lists.
- Restaurant details read one page per restaurant, so they are slower (about 1 second each, 4 in parallel).
- An empty run means OpenTable has no restaurant for that place and filter; it is listed in
RUN_SUMMARYand costs nothing.
FAQ
How much does OpenTable Scraper cost?
$0.18 per 1,000 restaurants, with optional add-ons priced per result (see the table above). There is no start fee.
How many restaurants can OpenTable Scraper get?
As many as OpenTable lists. One search returns up to ~1,000; Deep search returned 2,311 for New York and 2,796 for London in our tests.
Does OpenTable Scraper get phone numbers and emails?
Yes. Phone is in 99% of rows. With Find emails it reads each restaurant's own website and found an email for 50% of restaurants in our test runs.
Can OpenTable Scraper check table availability?
Yes, with Bookable times: the times OpenTable offers around your date, time and party size, for up to 7 days. You are charged only for restaurants OpenTable answered for.
Can OpenTable Scraper get reviews?
Yes - inside each restaurant row (Reviews) or one row per review (mode: reviews), with order, date, rating, VIP and keyword filters.
Does OpenTable Scraper work outside the US?
Yes. Type the place with its country ("Paris, France", "Toronto", "London"); the matching OpenTable site is picked automatically.
Can I schedule OpenTable Scraper?
Yes. Use Apify schedules; daysAhead keeps a scheduled availability check on "7 days from today".
Can I use OpenTable Scraper with the API or Python?
Yes - every run can be started and read through the Apify API or apify-client.
Can AI agents use OpenTable Scraper through MCP?
Yes, through the Apify MCP server.
Do I need an OpenTable account, login or API key?
No. The actor reads what OpenTable shows any visitor.
Why did my OpenTable Scraper run return no results?
OpenTable had no restaurant for the place and filters (RUN_SUMMARY lists the search and how the place was read). Check the spelling, add the country, or remove a filter. Nothing is charged for an empty search.
Your feedback
Missing a field or found a bug? Open an issue on the Issues tab - we read every one.