Tony Wang5 Min. LesezeitUber-Eats-Restaurant- und Menu-Daten scrapen in 2026 (API & Python)
Uber-Eats-Restaurant-Suche, -Menus und -Reviews 2026 scrapen — DIY, No-Code oder eine strukturierte API für öffentliche Daten — samt rechtlichen Grundlagen.
Am schnellsten scrapst du Uber-Eats-Restaurant- und Menu-Daten 2026, indem du eine strukturierte API aufrufst, die normalisiertes JSON zurückgibt — Restaurant-Suche, den Location-Browse-Feed, vollständige Store-Menus und einen Reviews-Snapshot — statt Uber Eats' interne API selbst zu reverse-engineeren. Dieser Guide behandelt alle drei Ansätze, was jeder liefert, wo jeder scheitert, und die rechtlichen Grundlagen.
Warum Uber Eats scrapen?
Uber Eats ist einer der größten Food-Delivery-Marktplätze weltweit, was es nützlich macht für:
- Restaurant- & Menu-Intelligence — verfolge Menu-Items, Preise und Verfügbarkeit über einen Markt hinweg.
- Delivery-Marktforschung — Cuisine-Abdeckung und Restaurant-Dichte nach Gegend, zusammen mit DoorDash für einen vollständigen Blick auf den Delivery-Markt.
- Review- & Reputations-Monitoring — verfolge das Rating und Review-Sentiment eines Restaurants über die Zeit.
- Wettbewerbs-Pricing — vergleiche Gerichtspreise für dieselbe Cuisine über nahegelegene Stores hinweg.
Ist es legal, Uber Eats zu scrapen?
Option 1: DIY in Python (und warum es scheitert)
Uber Eats rendert Restaurant-Suche und Store-Pages aus einer internen API, ein DIY-Scraper reverse-engineert also im Grunde diesen Flow:
import requests
# Uber Eats' consumer site calls an internal API, not a documented public endpoint
resp = requests.get("https://www.ubereats.com/feed?pl=...")
Es funktioniert in der Demo und scheitert dann:
- Keine offizielle öffentliche API. Uber Eats veröffentlicht keine Developer-API für Drittanbieter-Zugriff auf Search, Menu oder Reviews, also gibt es keinen dokumentierten Endpoint und keinen Key — du replizierst die privaten Calls der Consumer-App.
- UUID-adressierte Stores. Stores werden über eine UUID identifiziert, nicht über eine menschenlesbare id, jeder Workflow muss sie also zuerst per Search oder Feed auflösen, bevor er ein Menu oder Reviews abrufen kann.
- Standortgebundene Responses. Feed und Search-Ergebnisse sind auf eine Delivery-Koordinate bezogen, ein Scraper braucht also ein echtes Lat/Lng-Paar pro Request statt einer gecachten Response.
- Driftendes internes Schema. Die Response-Form des privaten App-Backends ändert sich ohne Vorwarnung und bricht replizierte Queries.
Option 2: No-Code-Tools
"Uber-Eats-Scraper"-Actors aus Marketplaces exportieren CSV/JSON und eignen sich für einmalige Abrufe, aber in einer geplanten Pipeline sind sie umständlich und erben dieselbe Fragilität der internen API.
Option 3: Eine strukturierte Uber-Eats-API
Für wiederholbare Workflows liefert eine Uber Eats scraping API normalisiertes JSON als credential-free öffentliche Daten — ohne Login, Key oder Cookie von Uber Eats. Suche Restaurants in der Nähe eines Standorts:
curl "https://api.crawlora.net/api/v1/ubereats/search?query=pizza&latitude=37.7749&longitude=-122.4194" \
-H "x-api-key: $CRAWLORA_API_KEY"
Löse dann eine Store-UUID auf und hol dessen Menu und Reviews-Snapshot in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/ubereats"
results = requests.get(f"{base}/search", headers=h,
params={"query": "pizza", "latitude": 37.7749, "longitude": -122.4194}).json()["data"]["restaurants"]
store_uuid = results[0]["storeUuid"]
store = requests.get(f"{base}/store/{store_uuid}", headers=h).json()["data"]
menu = requests.get(f"{base}/store/{store_uuid}/menu", headers=h).json()["data"]["sections"]
reviews = requests.get(f"{base}/store/{store_uuid}/reviews", headers=h).json()["data"]["reviews"]
Eine Search-Response ist normalisiertes JSON, das du direkt speichern kannst (echte Felder):
{
"code": 200,
"msg": "OK",
"data": {
"restaurants": [
{ "storeUuid": "259fe6e9-9e3a-429d-ae24-be5eda54ba64", "name": "Udupi Palace", "slug": "udupi-palace-mission", "rating": 4.5, "reviewCount": 2000, "deliveryEtaText": "20-30 min", "cuisineTags": ["Indian"], "currencyCode": "USD" }
]
}
}
Store-Detail liefert das vollständige Profil — Adresse, Telefon, Öffnungszeiten-Tagline und Preisbucket — und das Menu behält die Preise pro Item bei (echte Felder, Dollar nicht Cent):
{ "storeUuid": "259fe6e9-...", "storeTitle": "Udupi Palace", "sections": [{ "title": "Appetizers", "items": [{ "title": "Samosa", "description": "Crispy pastry with spiced potato filling", "price": 6.99, "isSoldOut": false }] }] }
Reviews kommen als Snapshot zurück — das aggregierte Rating plus eine Stichprobe aktueller geschriebener Reviews, keine vollständig paginierte Historie:
{ "storeUuid": "259fe6e9-...", "rating": 4.5, "reviewCount": 2000, "reviews": [{ "eaterName": "Jamie L.", "text": "Great food, quick delivery.", "formattedDate": "01/01/26" }] }
Lass den query-Parameter bei /ubereats/search weg (oder nutze /ubereats/feed), um den allgemeinen Location-Feed statt einer Keyword-Suche zu durchstöbern. Speichere eine Zeile pro Restaurant und ziehe die Daten nach Zeitplan neu.
Was du sammeln kannst
Öffentliche Felder: Restaurant-Search-Ergebnisse und Location-Feed (storeUuid, name, url, rating, review count, delivery ETA, cuisine tags, sponsored flag, currency); Store-Profil (address, phone, rating, price bucket, hours tagline, open/orderable status); vollständige Menus (sections, items, descriptions, prices, sold-out status); und ein Reviews-Snapshot (aggregate rating, count, sample review text).
Grenzen und typische Herausforderungen
- Keine offizielle API für beliebige Restaurant-Daten. Drittanbieter-Zugriff auf Search, Menu und Reviews bedeutet, Uber Eats' internes App-Backend zu scrapen, was eine strukturierte API hinter einem Key erledigt.
- Reviews sind ein Snapshot, kein vollständiger Feed. Der Reviews-Endpoint liefert dieselbe Stichprobe, die die Store-Page zeigt, nicht jede jemals hinterlassene Review — für lückenlose Review-Abdeckung behandle ihn als wiederkehrenden Pull statt als einmaligen Export.
- Alles ist standortbezogen. Menus, Pricing und Verfügbarkeit ändern sich nach Delivery-Koordinate — übergib einen echten Standort pro Request.
- Reviews sind personenbezogene Daten. Rezensentennamen und Review-Text sind nach DSGVO/CCPA personenbezogen — sammle öffentliche, faktische Felder mit einer Rechtsgrundlage.
Wo das eingesetzt wird
- Restaurant- & Menu-Intelligence — verfolge Pricing und Sortiment über einen Delivery-Markt hinweg. Siehe den Use Case ecommerce product intelligence.
- Review- & Reputations-Monitoring — verfolge das Rating und Sentiment eines Restaurants über die Zeit. Siehe den Use Case review & reputation monitoring.
- Delivery-Marktforschung — Cuisine-Dichte und Restaurant-Abdeckung nach Gegend, zusammen mit DoorDash für das vollständige Bild des Delivery-Markts.
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 DoorDash für die andere Seite des Delivery-Markts, how to scrape Yelp für lokale Business-Ratings, mobile app APIs explained dafür, wie diese Daten tatsächlich fließen, und is web scraping legal.
Häufig gestellte Fragen
Hat Uber Eats eine offizielle API?
Keine öffentliche Developer-API für Drittanbieter-Zugriff auf Search, Menu oder Reviews. Das Sammeln von Uber Eats' Restaurant-Daten bedeutet also, dessen interne API zu scrapen — was eine strukturierte API hinter einem Key erledigt und credential-freie öffentliche Daten ohne erforderlichen Login liefert.
Wie adressiere ich einen Uber-Eats-Store?
Stores werden über eine UUID (storeUuid) adressiert, nicht über eine numerische id — zurückgegeben von /ubereats/search oder /ubereats/feed. Löse sie zuerst auf und nutze sie dann mit den Store-, Menu- und Reviews-Endpoints.
Wie durchstöbere ich ohne Suchbegriff?
Lass den query-Parameter bei /ubereats/search weg, oder rufe direkt /ubereats/feed auf, um den allgemeinen Restaurant-Feed für einen Standort statt einer Keyword-Suche zu durchstöbern.
Welche Uber-Eats-Daten kann ich sammeln?
Öffentliche Felder: Restaurant-Search-Ergebnisse und der Location-Feed (rating, review count, delivery ETA, cuisine tags, currency); Store-Profil (address, phone, price bucket, hours, status); vollständige Menus (sections, items, prices, sold-out status); und ein Reviews-Snapshot (aggregate rating, count, sample review text).
Ist der Reviews-Endpoint eine vollständige Review-Historie?
Nein. Er liefert denselben On-Page-Snapshot, den die Store-Page zeigt — das aggregierte Rating plus eine Stichprobe aktueller Reviews, keinen vollständig paginierten Feed jeder jemals hinterlassenen Review.
Sind Uber-Eats-Reviews personenbezogene Daten?
Ja. Namen von Rezensenten (Eatern) und Review-Text sind personenbezogene Daten nach DSGVO/CCPA — sammle nur öffentliche, faktische Felder mit einer Rechtsgrundlage und veröffentliche Rezensenten-Identitäten nicht erneut.