Opentable Restaurants Search Scraper avatar

Opentable Restaurants Search Scraper

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Opentable Restaurants Search Scraper

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

Stealth mode

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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"
]
}
FieldTypeDefaultDescription
urlsarray(see below)One or more OpenTable search result URLs to scrape. Add individually or via bulk edit.
max_items_per_urlinteger20Maximum number of restaurant records to collect per URL. Set higher (e.g., 200) for comprehensive searches.
ignore_url_failuresbooleantrueWhen 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 ParameterMeaning
dateTimeDesired reservation date and time (ISO 8601)
coversParty size
latitude / longitudeGeo-coordinates for location-based search
searchedLocationNameHuman-readable city or area name
metroIdOpenTable's internal metro area identifier
sortByResult 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

FieldMeaning
Restaurant IDOpenTable's unique internal identifier
NameRestaurant display name
TypeListing type classification
TypenameGraphQL type name from OpenTable's API
Primary CuisineMain cuisine category (e.g., French, Italian)
Dining StyleAmbiance descriptor (e.g., Casual Elegant, Bistro)
DescriptionShort editorial description of the restaurant

Location & Contact

FieldMeaning
AddressFull street address
NeighborhoodDistrict or area within the city
CoordinatesLatitude/longitude for mapping
Contact InformationPhone number or public contact details

Pricing & Offers

FieldMeaning
Price BandCost indicator (e.g., $, $$, $$$, $$$$)
OffersActive promotions or special dining deals
In Premium MarketplaceWhether the restaurant pays for premium placement
Campaign IDAssociated marketing campaign identifier

Availability & Booking

FieldMeaning
Slot DiscoveryAvailable reservation time slots for the queried date/party
Restaurant Availability TokenToken used to initiate a booking session
URLsDirect links to the restaurant's OpenTable profile

Reviews & Reputation

FieldMeaning
StatisticsAggregate ratings and review counts
Top ReviewExcerpt from the highest-rated or featured review
AwardsDining awards or recognition (e.g., OpenTable Diners' Choice)
Match RelevanceScore indicating how well the result matches the search query

Features & Flags

FieldMeaning
FeaturesAmenities such as outdoor seating, private events, parking
Private DiningWhether private dining rooms are available
Has TakeoutIndicates takeout availability
Delivery PartnersLinked delivery services (e.g., Uber Eats, DoorDash)
Order Online LinkDirect link for online ordering if supported
GroupsGroup booking eligibility
Just Added DetailsMetadata for newly listed restaurants
Is PinnedWhether the result is editorially pinned at the top
PhotosImage URLs associated with the listing

How to Use

  1. Run a search on OpenTable — Set your city, date, party size, and filters. Copy the full URL from your browser.
  2. Paste into urls — Add one or more search URLs to the array.
  3. Set max_items_per_url — Use 200 for dense city searches; lower values for quick tests.
  4. Run the scraper — Monitor progress in the run log.
  5. 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: true for 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.