Tony Wang5 min de lecturaCómo scrapear datos de restaurantes y menús de Uber Eats en 2026 (API y Python)
Scrapea búsqueda, menús y reseñas de Uber Eats en 2026 — DIY, sin código o una API estructurada de datos públicos, con las bases legales.
La forma más rápida de scrapear datos de restaurantes y menús de Uber Eats en 2026 es llamar a una API estructurada que devuelve JSON normalizado — búsqueda de restaurantes, el feed de exploración por ubicación, menús completos de tiendas y un snapshot de reseñas — en lugar de hacer ingeniería inversa de la API interna de Uber Eats tú mismo. Esta guía cubre los tres enfoques, qué devuelve cada uno, dónde falla cada uno y las bases legales.
¿Por qué scrapear Uber Eats?
Uber Eats es uno de los mayores marketplaces de delivery de comida a nivel global, lo que lo hace útil para:
- Inteligencia de restaurantes y menús — rastrea artículos del menú, precios y disponibilidad en todo un mercado.
- Investigación del mercado de delivery — cobertura por tipo de cocina y densidad de restaurantes por área, junto con DoorDash para una visión completa del mercado de delivery.
- Monitoreo de reseñas y reputación — rastrea la calificación y el sentimiento de las reseñas de un restaurante a lo largo del tiempo.
- Precios competitivos — compara precios de platos de la misma cocina entre tiendas cercanas.
¿Es legal scrapear Uber Eats?
Opción 1: DIY en Python (y por qué falla)
Uber Eats renderiza la búsqueda de restaurantes y las páginas de tiendas desde una API interna, así que un scraper DIY en realidad hace ingeniería inversa de ese flujo:
import requests
# Uber Eats' consumer site calls an internal API, not a documented public endpoint
resp = requests.get("https://www.ubereats.com/feed?pl=...")
Funciona en la demo y luego falla:
- No hay API pública oficial. Uber Eats no publica una API para desarrolladores que permita a terceros acceder a búsqueda, menús o reseñas, así que no existe un endpoint documentado ni una key — estás replicando las llamadas privadas de la app de consumidor.
- Tiendas identificadas por UUID. Las tiendas se identifican mediante un UUID, no un id legible para humanos, así que todo flujo de trabajo tiene que resolverlo primero vía búsqueda o feed antes de poder obtener un menú o reseñas.
- Respuestas condicionadas por la ubicación. El feed y los resultados de búsqueda están acotados a una coordenada de entrega, así que un scraper necesita una lat/lng real por cada request en lugar de una respuesta cacheada.
- Esquema interno cambiante. La forma de la respuesta del backend privado de la app cambia sin previo aviso y rompe las queries replicadas.
Opción 2: Herramientas sin código
Los actores "Uber Eats scraper" de los marketplaces exportan CSV/JSON y sirven para extracciones puntuales, pero resultan incómodos en un pipeline programado y heredan la misma fragilidad de la API interna.
Opción 3: Una API estructurada de Uber Eats
Para flujos de trabajo repetibles, una Uber Eats scraping API devuelve JSON normalizado como datos públicos sin necesidad de credenciales — sin login, key ni cookie de Uber Eats. Busca restaurantes cerca de una ubicación:
curl "https://api.crawlora.net/api/v1/ubereats/search?query=pizza&latitude=37.7749&longitude=-122.4194" \
-H "x-api-key: $CRAWLORA_API_KEY"
Luego resuelve el UUID de una tienda y obtén su menú y el snapshot de reseñas en 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"]
Una respuesta de búsqueda es JSON normalizado que puedes almacenar directamente (campos reales):
{
"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" }
]
}
}
El detalle de la tienda devuelve el perfil completo — dirección, teléfono, un resumen de horario y el rango de precios — y el menú conserva el precio por artículo (campos reales, en dólares, no en centavos):
{ "storeUuid": "259fe6e9-...", "storeTitle": "Udupi Palace", "sections": [{ "title": "Appetizers", "items": [{ "title": "Samosa", "description": "Crispy pastry with spiced potato filling", "price": 6.99, "isSoldOut": false }] }] }
Las reseñas vuelven como un snapshot — la calificación agregada más una muestra de reseñas recientes escritas, no un historial totalmente paginado:
{ "storeUuid": "259fe6e9-...", "rating": 4.5, "reviewCount": 2000, "reviews": [{ "eaterName": "Jamie L.", "text": "Great food, quick delivery.", "formattedDate": "01/01/26" }] }
Omite el parámetro query en /ubereats/search (o usa /ubereats/feed) para explorar el feed general de la ubicación en lugar de una búsqueda por palabra clave. Guarda una fila por restaurante y vuelve a extraer los datos con una periodicidad fija.
Qué puedes recopilar
Campos públicos: resultados de búsqueda de restaurantes y el feed por ubicación (storeUuid, name, url, rating, review count, delivery ETA, cuisine tags, sponsored flag, currency); perfil de la tienda (address, phone, rating, price bucket, hours tagline, open/orderable status); menús completos (sections, items, descriptions, prices, sold-out status); y un snapshot de reseñas (aggregate rating, count, sample review text).
Limitaciones y retos habituales
- No hay API oficial para datos arbitrarios de restaurantes. El acceso de terceros a búsqueda, menú y reseñas implica scrapear el backend interno de la app de Uber Eats, algo que una API estructurada gestiona detrás de una sola key.
- Las reseñas son un snapshot, no un feed completo. El endpoint de reseñas devuelve la misma muestra que muestra la página de la tienda, no cada reseña que se haya dejado alguna vez — para una cobertura exhaustiva de reseñas, trátalo como una extracción recurrente en lugar de una exportación única.
- Todo está acotado por la ubicación. Los menús, precios y disponibilidad cambian según la coordenada de entrega — pasa una ubicación real en cada request.
- Las reseñas son datos personales. Los nombres de quienes reseñan y el texto de las reseñas son personales bajo el RGPD/CCPA — recopila campos públicos y factuales con una base legal.
Dónde se usa esto
- Inteligencia de restaurantes y menús — rastrea precios y surtido en todo un mercado de delivery. Consulta el caso de uso ecommerce product intelligence.
- Monitoreo de reseñas y reputación — rastrea la calificación y el sentimiento de un restaurante a lo largo del tiempo. Consulta el caso de uso review & reputation monitoring.
- Investigación del mercado de delivery — densidad de cocinas y cobertura de restaurantes por área, junto con DoorDash para el panorama completo del mercado de delivery.
Fuentes
Empieza a recopilar
Pruébalo primero, gratis: ejecuta cualquier URL pública en el Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba el endpoint de búsqueda en el Playground, revisa el esquema en la documentación de la API y consulta los precios. Consulta también how to scrape DoorDash para el otro lado del mercado de delivery, how to scrape Yelp para calificaciones de negocios locales, mobile app APIs explained para entender cómo fluyen realmente estos datos, y is web scraping legal.
Parte de nuestra how-to-scrape guide series — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Uber Eats tiene una API oficial?
No hay una API pública para desarrolladores que permita el acceso de terceros a búsqueda, menú o reseñas. Recopilar los datos de restaurantes de Uber Eats implica entonces scrapear su API interna — algo que una API estructurada resuelve detrás de una sola key y que entrega datos públicos sin necesidad de credenciales ni login.
¿Cómo identifico una tienda de Uber Eats?
Las tiendas se identifican mediante un UUID (storeUuid), no un id numérico — devuelto por /ubereats/search o /ubereats/feed. Resuélvelo primero y luego úsalo con los endpoints de store, menu y reviews.
¿Cómo explorar sin un término de búsqueda?
Omite el parámetro query en /ubereats/search, o llama directamente a /ubereats/feed, para explorar el feed general de restaurantes de una ubicación en lugar de una búsqueda por palabra clave.
¿Qué datos de Uber Eats puedo recopilar?
Campos públicos: resultados de búsqueda de restaurantes y el feed por ubicación (rating, review count, delivery ETA, cuisine tags, currency); perfil de la tienda (address, phone, price bucket, hours, status); menús completos (sections, items, prices, sold-out status); y un snapshot de reseñas (aggregate rating, count, sample review text).
¿El endpoint de reseñas es un historial completo?
No. Devuelve el mismo snapshot en la página que muestra la página de la tienda — la calificación agregada más una muestra de reseñas recientes, no un feed totalmente paginado de cada reseña que se haya dejado alguna vez.
¿Las reseñas de Uber Eats son datos personales?
Sí. Los nombres de quienes reseñan (eaters) y el texto de las reseñas son datos personales bajo el RGPD/CCPA — recopila solo campos públicos y factuales con una base legal, y no vuelvas a publicar identidades de quienes reseñan.