Tony Wang4 Min. LesezeitOpenTable-Restaurant- und Reservierungsdaten scrapen in 2026 (API & Python)
OpenTable-Restaurant-Suche, -Profile, -Menus, -Reviews und Live-Timeslots 2026 scrapen — DIY, No-Code oder eine strukturierte API — samt rechtlichen Grundlagen.
Am schnellsten scrapst du OpenTable-Restaurant- und Reservierungsdaten 2026, indem du eine strukturierte API aufrufst, die normalisiertes JSON zurückgibt — Restaurant-Profile, Menus, Gäste-Reviews und live buchbare Timeslots — statt OpenTables internen Booking-Flow zu reverse-engineeren. Dieser Guide behandelt alle drei Ansätze, was jeder liefert, wo jeder scheitert, und die rechtlichen Grundlagen.
Warum OpenTable scrapen?
OpenTable zentralisiert Restaurant-Discovery, Menus, Reviews und Live-Verfügbarkeit, was es nützlich macht für:
- Reservierungsverfügbarkeits-Monitoring — verfolge, wann bei einem schwer buchbaren Restaurant ein Tisch frei wird.
- Restaurant- & Hospitality-Marktforschung — Cuisine-, Preisband- und Standort-Abdeckung über eine Metro hinweg.
- Review- & Sentiment-Analyse — Kategorie-Ratings der Gäste (food, service, ambience, value, noise).
- Menu- & Preis-Benchmarking — vergleiche Gerichte und Preise über Restaurants hinweg.
Ist es legal, OpenTable zu scrapen?
Option 1: DIY in Python (und warum es scheitert)
OpenTables Restaurant-Pages und das Live-Verfügbarkeits-Widget werden von einer internen Booking-API gespeist, ein DIY-Scraper reverse-engineert also im Grunde diesen Flow:
import requests
# OpenTable's live-availability widget calls an internal booking API,
# not a documented public endpoint
resp = requests.get("https://www.opentable.com/s?term=dinner&latitude=37.7749&longitude=-122.4194")
Es funktioniert in der Demo und scheitert dann:
- Keine offizielle öffentliche API. OpenTable veröffentlicht keine Developer-API für Drittanbieter-Zugriff auf Search oder Verfügbarkeit, also gibt es keinen dokumentierten Endpoint und keinen Key — du replizierst die privaten Calls von Consumer-Site und -App.
- Echtzeit-Verfügbarkeit ist der schwierige Teil. Timeslots ändern sich, während Tische gebucht und wieder freigegeben werden, ein gescrapter Snapshot ist also innerhalb von Minuten veraltet — du musst in engem Takt neu pollen, genau das Load-Muster, das Anti-Bot-Systeme markieren.
- Anti-Bot-Abwehr. Wiederholte automatisierte Requests an Search- und Verfügbarkeits-Endpoints ziehen Rate-Limits und Blocks nach sich, was realistische Header, Proxys und ständige Pflege erfordert.
- Driftendes internes Schema. Die Response-Form der privaten Booking-API ändert sich ohne Vorwarnung und bricht replizierte Queries.
Option 2: No-Code-Tools
"OpenTable-Scraper"-Actors aus Marketplaces exportieren CSV/JSON und eignen sich für einmalige Abrufe, aber in einer In-Product-Pipeline sind sie umständlich — besonders für alles, was Live-Verfügbarkeit trackt — und erben dieselbe Fragilität der internen API.
Option 3: Eine strukturierte OpenTable-API
Für wiederholbare Workflows liefert eine OpenTable scraping API normalisiertes JSON, ohne dass du einen internen Booking-Flow pflegen musst. Suche nach Term, Location, Datum/Uhrzeit und Personenzahl — mit Live-Verfügbarkeit gleich inline:
curl "https://api.crawlora.net/api/v1/opentable/search?term=dinner&latitude=37.7749&longitude=-122.4194&party_size=2" \
-H "x-api-key: $CRAWLORA_API_KEY"
Löse dann eine Restaurant-id auf und hol dessen Profil, Menu und Reviews in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/opentable"
results = requests.get(f"{base}/search", headers=h,
params={"term": "dinner", "latitude": 37.7749, "longitude": -122.4194}).json()["data"]["results"]
rid = results[0]["id"]
restaurant = requests.get(f"{base}/restaurant", headers=h,
params={"restaurant_id": rid, "party_size": 2}).json()["data"]
menus = requests.get(f"{base}/restaurant/menus", headers=h,
params={"restaurant_id": rid}).json()["data"]["menus"]
reviews = requests.get(f"{base}/restaurant/reviews", headers=h,
params={"restaurant_id": rid, "page": 1}).json()["data"]["reviews"]
Eine Restaurant-Profil-Response ist normalisiertes JSON, das du direkt speichern kannst (echte Felder):
{
"code": 200,
"msg": "OK",
"data": {
"id": "131459",
"name": "El Gaucho Argentinian Steakhouse - Hai Ba Trung",
"city": "Ho Chi Minh city",
"dining_style": "Casual Dining",
"cuisines": [{ "id": "029cd931-...", "name": "Steak" }],
"timeslots": [{ "date_time": "2026-08-04T19:00", "available": true, "price_amount": null, "token": "..." }]
}
}
Reviews kommen mit Kategorie-Ratings zurück, nicht nur einem Gesamtscore:
{ "id": "OT-131459-908-...", "reservation_date": "2026-05-29T13:45", "author": "kim", "text": "Australian beef, top notch.", "recommended": true, "statistics": { "overall_rating": 5.0, "food": 5.0, "service": 5.0, "ambience": 5.0, "value": 4.0, "noise": 3.0 } }
Speichere eine Zeile pro Restaurant (oder pro Timeslot-Check, für Verfügbarkeits-Monitoring) und pulle nach einem Zeitplan neu, der dazu passt, wie schnell sich die Verfügbarkeit tatsächlich ändert.
Was du sammeln kannst
Öffentliche Felder: Restaurant-Search-Ergebnisse mit inline Live-Verfügbarkeit (id, name, location, cuisines, timeslots); Restaurant-Profil (location, hours, price band, dining style, dress code, features, review summary); Echtzeit buchbare Timeslots (date/time, availability, personenzahl-bezogener price); Menus (sections, items, prices); und Gäste-Reviews mit Kategorie-Ratings (overall, food, service, ambience, value, noise).
Grenzen und typische Herausforderungen
- Keine offizielle Developer-API. Drittanbieter-Zugriff auf Search und Verfügbarkeit bedeutet, OpenTables internen Booking-Flow zu scrapen, was eine strukturierte API hinter einem Key erledigt.
- Verfügbarkeit ist ein bewegliches Ziel. Timeslots spiegeln einen Zeitpunkt wider — um zu überwachen, „wird ein Tisch frei", pollst du nach Zeitplan, statt einem einzelnen Abruf zu vertrauen.
- Reviews sind personenbezogene Daten. Autorennamen, Review-Text und Metro-Location sind nach DSGVO/CCPA personenbezogen — sammle öffentliche, faktische Felder mit einer Rechtsgrundlage.
- Anti-Bot bei wiederholtem Polling. Häufige automatisierte Requests an dasselbe Restaurant ziehen Rate-Limits nach sich — eine strukturierte API fängt das hinter dem Key ab.
Wo das eingesetzt wird
- Reservierungsverfügbarkeits-Monitoring — alarmiere, wenn bei einem ausgebuchten Restaurant eine Stornierung reinkommt. Siehe den Use Case travel & hospitality research.
- Restaurant-Marktforschung — Cuisine-Dichte, Preisbänder und Abdeckung über eine Metro hinweg.
- Review- & Reputations-Monitoring — Kategorie-Sentiment der Gäste über die Zeit. Siehe den Use Case review & reputation monitoring.
Sources
Loslegen mit dem Sammeln
Probier es zuerst kostenlos aus: schick eine beliebige öffentliche URL durch den Free Web Scraper, oder prüfe mit dem Anti-Bot Checker, ob eine Site Bots blockiert — ohne Anmeldung.
Teste den Search-Endpoint im Playground, prüfe das Schema in den API docs und sieh dir das pricing an. Siehe auch how to scrape Yelp für lokale Business-Ratings, how to scrape TripAdvisor für Reise- und Venue-Reviews, mobile app APIs explained dafür, wie diese Daten tatsächlich fließen, und is web scraping legal.
Häufig gestellte Fragen
Hat OpenTable eine offizielle API?
Keine öffentliche Developer-API für Drittanbieter-Zugriff auf Search oder Verfügbarkeit. Das Sammeln von OpenTables Restaurant-, Menu-, Review- und Timeslot-Daten bedeutet also Scraping — was eine strukturierte API hinter einem Key erledigt und normalisiertes JSON liefert, ohne dass du einen internen Booking-Flow pflegen musst.
Wie aktuell sind die Verfügbarkeitsdaten?
Timeslots spiegeln einen Zeitpunkt wider und ändern sich, während Tische gebucht und wieder freigegeben werden. Für Monitoring-Use-Cases („alarmiere, wenn ein Tisch frei wird“) pollst du nach einem Zeitplan, der dazu passt, wie schnell sich die Verfügbarkeit tatsächlich ändert, statt einem einzelnen Snapshot zu vertrauen.
Wie adressiere ich ein OpenTable-Restaurant?
Restaurants werden über eine numerische OpenTable-id adressiert, die der Search-Endpoint zusammen mit denselben Location- und Live-Verfügbarkeits-Feldern wie der Restaurant-Detail-Endpoint zurückgibt.
Welche OpenTable-Daten kann ich sammeln?
Öffentliche Felder: Restaurant-Suche mit inline Live-Verfügbarkeit; Restaurant-Profil (location, hours, price band, dining style, features, review summary); Echtzeit buchbare Timeslots; Menus (sections, items, prices); und Gäste-Reviews mit Kategorie-Ratings (food, service, ambience, value, noise).
Sind OpenTable-Reviews personenbezogene Daten?
Ja. Autorennamen, Review-Text und Metro-Location sind personenbezogene Daten nach DSGVO/CCPA — sammle nur öffentliche, faktische Felder mit einer Rechtsgrundlage und veröffentliche Rezensenten-Identitäten nicht erneut.
Wie oft kann ich aktualisieren?
Ziehe die Daten nach Zeitplan innerhalb deines Plans und der Responsible-Use-Limits neu — enger getaktet für Live-Verfügbarkeits-Monitoring, lockerer für Review-/Sentiment-Tracking.