Opentable Restaurants Search Scraper
Pricing
from $1.50 / 1,000 results
Opentable Restaurants Search Scraper
Scrape OpenTable restaurant search results effortlessly. Extract names, cuisines, availability slots, reviews, pricing, coordinates, and 30+ fields per restaurant — perfect for market research, travel apps, and food industry analysis.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Stealth mode
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
OpenTable Restaurant Search Scraper: Extract Paris & Global Dining Data
What Is OpenTable?
OpenTable is one of the world's largest online restaurant reservation platforms, operating across major cities globally. It surfaces rich data per restaurant — availability slots, pricing tiers, cuisine types, awards, and user reviews — making it a valuable source for food industry intelligence. Manually collecting this data is impractical at scale. The OpenTable Restaurant Search Scraper automates extraction directly from search result pages.
Overview
The OpenTable Scraper targets OpenTable's restaurant search URLs and returns a structured dataset for every listing on the page. Typical use cases include:
- Travel & hospitality apps building curated local dining guides
- Market researchers analyzing restaurant density, pricing, and cuisine trends by neighborhood
- Data journalists investigating the dining landscape in specific cities
- Aggregator platforms pulling live availability and offer data
Input Format
The scraper accepts three configuration parameters:
{"ignore_url_failures": true,"max_items_per_url": 200,"urls": ["https://www.opentable.com/s?dateTime=2026-05-28T19%3A00%3A00&covers=2&latitude=48.86182320277778&longitude=2.336352640046296&searchedLocationName=Paris&shouldUseLatLongSearch=true&metroId=3408&sortBy=web_conversion"]}
| Field | Type | Default | Description |
|---|---|---|---|
urls | array | (see below) | One or more OpenTable search result URLs to scrape. Add individually or via bulk edit. |
max_items_per_url | integer | 20 | Maximum number of restaurant records to collect per URL. Set higher (e.g., 200) for comprehensive searches. |
ignore_url_failures | boolean | true | When true, the scraper continues if a URL fails rather than stopping the entire run. Recommended for bulk jobs. |
Building a Valid Search URL
OpenTable search URLs encode several useful parameters:
| URL Parameter | Meaning |
|---|---|
dateTime | Desired reservation date and time (ISO 8601) |
covers | Party size |
latitude / longitude | Geo-coordinates for location-based search |
searchedLocationName | Human-readable city or area name |
metroId | OpenTable's internal metro area identifier |
sortBy | Result ordering (e.g., web_conversion, distance) |
Tip: Build your URL directly from OpenTable's search interface, then copy it from the browser address bar.
Output Format
Sample output
{"restaurant_id": 357597,"name": "Nolinski","type": "GuestCenter","slot_discovery": "on","urls": {"profile_link": {"link": "https://www.opentable.com/r/nolinski-paris","__typename": "PageLink"},"__typename": "RestaurantUrls"},"price_band": {"price_band_id": 2,"currency_symbol": "€","name": "€30 and under","__typename": "PriceBand"},"neighborhood": {"name": "Palais-Royal","__typename": "Neighborhood"},"statistics": {"recent_reservation_count": 4,"reviews": {"all_time_text_review_count": 13,"ratings": {"overall": {"rating": 4.7,"__typename": "ReviewStatisticsRating"},"__typename": "ReviewStatisticsRatings"},"show_reviews": true,"__typename": "ReviewStatistics"},"__typename": "RestaurantStatistics"},"primary_cuisine": {"name": "French","__typename": "Cuisine"},"campaign_id": null,"features": {"subtype": null,"bar": false,"counter": false,"high_top": false,"outdoor": false,"reservation_max_party_size": 10,"__typename": "RestaurantFeatures"},"in_premium_marketplace": false,"restaurant_availability_token": "eyJ2IjozLCJtIjoxLCJwIjowLCJzIjowLCJuIjowfQ","groups": [{"id": 332845,"rids": null,"off_discovery_restaurant_ids": null,"always_off_discovery_restaurant_ids": null,"__typename": "RestaurantGroup"}],"awards": null,"typename": "Restaurant","is_pinned": false,"private_dining": {"has_private_dining": false,"has_enhanced_private_dining": false,"__typename": "PrivateDining"},"photos": {"gallery": {"photos": [{"thumbnails": [{"url": "https://resizer.otstatic.com/v4/photos/76953713-2?width=640&height=360","__typename": "Thumbnail"}],"pid": 76953713,"__typename": "GalleryPhoto"},{"thumbnails": [{"url": "https://resizer.otstatic.com/v4/photos/93306588-1?width=640&height=360","__typename": "Thumbnail"}],"pid": 93306588,"__typename": "GalleryPhoto"},{"thumbnails": [{"url": "https://resizer.otstatic.com/v4/photos/93306584-1?width=640&height=360","__typename": "Thumbnail"}],"pid": 93306584,"__typename": "GalleryPhoto"},{"thumbnails": [{"url": "https://resizer.otstatic.com/v4/photos/93306586-1?width=640&height=360","__typename": "Thumbnail"}],"pid": 93306586,"__typename": "GalleryPhoto"},{"thumbnails": [{"url": "https://resizer.otstatic.com/v4/photos/93306585-1?width=640&height=360","__typename": "Thumbnail"}],"pid": 93306585,"__typename": "GalleryPhoto"},{"thumbnails": [{"url": "https://resizer.otstatic.com/v4/photos/76953665-2?width=640&height=360","__typename": "Thumbnail"}],"pid": 76953665,"__typename": "GalleryPhoto"}],"__typename": "GalleryPhotos"},"profile_v3": {"url": "//resizer.otstatic.com/v3/photos/76953713-2","xsmall": {"url": "//resizer.otstatic.com/v3/photos/76953713-2?width=105&height=105&webp=true","width": 105,"__typename": "Thumbnail"},"small": {"url": "//resizer.otstatic.com/v3/photos/76953713-2?width=160&height=160&webp=true","width": 160,"__typename": "Thumbnail"},"legacy": {"url": "//resizer.otstatic.com/v3/photos/76953713-2?width=208&height=208&webp=true","width": 208,"__typename": "Thumbnail"},"medium": {"url": "//resizer.otstatic.com/v3/photos/76953713-2?width=320&height=320&webp=true","width": 320,"__typename": "Thumbnail"},"wide_medium": {"url": "//resizer.otstatic.com/v3/photos/76953713-2?width=320&height=180&webp=true","width": 320,"__typename": "Thumbnail"},"wide_mlarge": {"url": "//resizer.otstatic.com/v3/photos/76953713-2?width=480&height=270&webp=true","width": 480,"__typename": "Thumbnail"},"__typename": "RestaurantProfilePhotoV3"},"__typename": "RestaurantPhotos"},"just_added_details": {"just_added": false,"__typename": "JustAddedDetails"},"offers": [],"dining_style": "Casual Elegant","coordinates": {"latitude": 48.8654978,"longitude": 2.3347863,"__typename": "GeographicCoordinates"},"address": {"line1": "16 Av. de l'Opéra","line2": "","city": "Paris","state": "Ile-de-France","post_code": "75001","__typename": "Address"},"description": "An intimate, timeless address. Corduroy banquettes, honey-coloured wood, oiled Versailles parquet flooring, Sienna yellow marble, brass, golden light... Everything comes together and brings us together, as if by magic. A softness that continues as soon as night falls in the subdued light of candles<br /><br />Philip Chronopoulos celebrates the richness and finesse of French gastronomy by revisiting emblematic, comforting dishes such as pot-au-feu, poultry and macaroni gratin with morel mushrooms. The plated desserts, meanwhile, evoke memories of childhood with finesse, sublimating familiar flavours thanks to the chef's delicate expertise.<br />","top_review": {"highlighted_text": "The food, venue and service were all excellent. It’s a little pricey but well worth it. I would definitely come back.","__typename": "ReviewWithHighlights"},"match_relevance": null,"has_takeout": false,"contact_information": {"phone_number": "0142861010","formatted_phone_number": "01 42 86 10 10","__typename": "RestaurantContactInformation"},"delivery_partners": [],"order_online_link": null,"from_url": "https://www.opentable.com/s?dateTime=2026-05-28T19%3A00%3A00&covers=2&latitude=48.86182320277778&longitude=2.336352640046296&searchedLocationName=Paris&shouldUseLatLongSearch=true&originCorrelationId=ec23bce4-acb8-4be7-9e1b-b02a4dbe3f15&corrid=3403c841-8265-4547-99f0-54fa84193d81&metroId=3408&queryUnderstandingType=none&showMap=true&sortBy=web_conversion"}
Each restaurant record contains 30+ fields:
Identity & Classification
| Field | Meaning |
|---|---|
Restaurant ID | OpenTable's unique internal identifier |
Name | Restaurant display name |
Type | Listing type classification |
Typename | GraphQL type name from OpenTable's API |
Primary Cuisine | Main cuisine category (e.g., French, Italian) |
Dining Style | Ambiance descriptor (e.g., Casual Elegant, Bistro) |
Description | Short editorial description of the restaurant |
Location & Contact
| Field | Meaning |
|---|---|
Address | Full street address |
Neighborhood | District or area within the city |
Coordinates | Latitude/longitude for mapping |
Contact Information | Phone number or public contact details |
Pricing & Offers
| Field | Meaning |
|---|---|
Price Band | Cost indicator (e.g., $, $$, $$$, $$$$) |
Offers | Active promotions or special dining deals |
In Premium Marketplace | Whether the restaurant pays for premium placement |
Campaign ID | Associated marketing campaign identifier |
Availability & Booking
| Field | Meaning |
|---|---|
Slot Discovery | Available reservation time slots for the queried date/party |
Restaurant Availability Token | Token used to initiate a booking session |
URLs | Direct links to the restaurant's OpenTable profile |
Reviews & Reputation
| Field | Meaning |
|---|---|
Statistics | Aggregate ratings and review counts |
Top Review | Excerpt from the highest-rated or featured review |
Awards | Dining awards or recognition (e.g., OpenTable Diners' Choice) |
Match Relevance | Score indicating how well the result matches the search query |
Features & Flags
| Field | Meaning |
|---|---|
Features | Amenities such as outdoor seating, private events, parking |
Private Dining | Whether private dining rooms are available |
Has Takeout | Indicates takeout availability |
Delivery Partners | Linked delivery services (e.g., Uber Eats, DoorDash) |
Order Online Link | Direct link for online ordering if supported |
Groups | Group booking eligibility |
Just Added Details | Metadata for newly listed restaurants |
Is Pinned | Whether the result is editorially pinned at the top |
Photos | Image URLs associated with the listing |
How to Use
- Run a search on OpenTable — Set your city, date, party size, and filters. Copy the full URL from your browser.
- Paste into
urls— Add one or more search URLs to the array. - Set
max_items_per_url— Use200for dense city searches; lower values for quick tests. - Run the scraper — Monitor progress in the run log.
- Export — Download results as JSON, CSV, or XLSX.
Best practices:
- Each unique search URL (different date, location, or party size) counts as a separate item in
urls. - If scraping multiple cities, add one URL per city rather than running separate jobs.
- Use
ignore_url_failures: truefor any batch run to avoid interruptions from occasional timeouts.
Use Cases & Business Value
- Restaurant discovery apps: Pre-populate curated city guides with live availability and ratings
- Competitive analysis: Compare pricing bands and cuisine distribution across neighborhoods
- Event planning tools: Find restaurants with private dining and group booking support
- Academic research: Study urban dining patterns, award distribution, or delivery adoption rates
Conclusion
The OpenTable Restaurant Search Scraper turns any OpenTable search page into a rich, structured dataset in minutes. With 30+ fields spanning availability, pricing, location, reviews, and features, it provides the depth needed for serious food industry analysis or application development. Configure your search URL, set your limits, and start collecting.