Tony Wang5 min de lecturaCómo hacer scraping de datos de restaurantes y menús de DoorDash en 2026 (API y Python)
Scrapea la búsqueda, menús y reviews de restaurantes de DoorDash en 2026 — DIY, sin código o una API estructurada, con los aspectos legales.
La forma más rápida de hacer scraping de datos de restaurantes y menús de DoorDash en 2026 es llamar a una API estructurada que devuelve JSON normalizado — búsqueda de pickup, menús de tiendas, detalles de items, información de fulfillment y reviews — en lugar de hacer ingeniería inversa del backend de la app móvil de DoorDash por tu cuenta. Esta guía cubre los tres enfoques, qué devuelve cada uno, dónde se rompe cada uno y los aspectos legales básicos.
¿Por qué hacer scraping de DoorDash?
DoorDash centraliza el descubrimiento de restaurantes, los menús y la logística de entrega/pickup para una gran parte del mercado estadounidense de food delivery, lo que lo hace útil para:
- Inteligencia de restaurantes y menús — rastrea items de menú, precios y disponibilidad en un mercado.
- Investigación del mercado de delivery — cobertura por tipo de cocina, elegibilidad para DashPass y mezcla de pickup vs. delivery por zona.
- Monitoreo de reviews y reputación — rastrea la calificación y el volumen de reviews de un restaurante a lo largo del tiempo.
- Pricing competitivo — compara precios de platos de la misma cocina entre tiendas cercanas.
¿Es legal hacer scraping de DoorDash?
Opción 1: DIY en Python (y por qué se rompe)
El sitio web y la app de DoorDash renderizan la búsqueda, los menús y las reviews a partir de una API interna protegida por defensas anti-bot:
import requests
# DoorDash's public search page calls an internal API behind anti-bot defenses
resp = requests.get("https://www.doordash.com/search/store/pizza/?lat=37.7825&lng=-122.461")
Funciona en la demo y luego se rompe:
- Sin API pública oficial. DoorDash no publica una API para desarrolladores que permita el acceso de terceros a la búsqueda, los menús o las reviews, así que no hay un endpoint ni una key documentados — estás replicando las llamadas privadas de la app de consumidor.
- Respuestas restringidas por ubicación. La disponibilidad, el pricing y los menús están todos delimitados a una ubicación de delivery/pickup, así que un scraper necesita un par de coordenadas real por request y no puede cachear una respuesta entre mercados.
- Defensas anti-bot. Los requests automatizados repetidos a los endpoints de búsqueda y tienda generan rate limits y bloqueos, lo que requiere headers realistas, proxies y mantenimiento constante.
- Schema interno cambiante. La forma de la respuesta del backend privado de la app cambia sin aviso y rompe las queries replicadas.
Opción 2: Herramientas sin código
Los actors de "scraper de DoorDash" 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 DoorDash
Para workflows repetibles, una DoorDash scraping API llama al mismo flujo anónimo de invitado móvil de Android que usa la propia app de DoorDash y devuelve JSON normalizado — sin necesidad de cuenta, cookie ni token de DoorDash. Busca restaurantes con pickup cerca de una ubicación:
curl "https://api.crawlora.net/api/v1/doordash/search?query=pizza&latitude=37.7825&longitude=-122.461" \
-H "x-api-key: $CRAWLORA_API_KEY"
Luego resuelve un store id y obtén su menú, información de fulfillment y reviews en Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/doordash"
loc = {"latitude": 37.7825, "longitude": -122.461}
results = requests.get(f"{base}/search", headers=h,
params={"query": "pizza", **loc}).json()["data"]["results"]
store_id = results[0]["storeId"]
menu = requests.get(f"{base}/store/{store_id}/menu", headers=h, params=loc).json()["data"]
reviews = requests.get(f"{base}/store/{store_id}/reviews", headers=h, params=loc).json()["data"]
fulfillment = requests.get(f"{base}/store/{store_id}/fulfillment", headers=h, params=loc).json()["data"]
Una respuesta de búsqueda es JSON normalizado que puedes guardar directamente (campos reales):
{
"code": 200,
"msg": "OK",
"data": {
"query": "pizza",
"results": [
{ "storeId": "123", "name": "Pizza Place", "url": "https://www.doordash.com/store/pizza-place-123/", "tags": ["Pizza"], "asapAvailable": true, "pickupAvailable": true, "dashPassEligible": true, "distance": "1.2 mi", "address": { "city": "San Francisco", "region": "CA" } }
]
}
}
Los precios de los menús preservan el propio formato de visualización de DoorDash:
{ "storeId": "26282644", "name": "Eats", "sections": [{ "title": "Popular Items", "items": [{ "name": "ShackBurger", "price": "$8.99" }] }] }
Más allá de la búsqueda, la misma key da acceso a /doordash/search/autocomplete (sugerencias de autocompletado), /doordash/search/filters (categorías de cocina y opciones de filtro para una ubicación), /doordash/search/items (búsqueda por plato entre comercios cercanos), /doordash/explore y /doordash/feed (exploración basada en ubicación sin query — la misma vista que muestra la app antes de que escribas algo), /doordash/store/{id}/info (tarjeta de dirección/teléfono) y /doordash/store/{id}/item/{item_id} (detalle de un item de menú individual). Guarda una fila por tienda o item y vuelve a extraer según un calendario.
Qué puedes recopilar
Campos públicos: resultados de búsqueda de pickup (store id, name, url, tags, distance, address, flags de ASAP/DashPass/pickup); sugerencias de autocompletado; categorías de cocina y filtros; búsqueda a nivel de item entre comercios; menús de tienda (sections, items, precios como strings de visualización); detalle de item individual; métodos de fulfillment y ventanas de entrega; información de contacto de la tienda (address, phone, coordinates); y reviews de la tienda (calificación promedio, cantidad, texto de la review).
Limitaciones y desafíos comunes
- Sin API oficial para datos arbitrarios de restaurantes. El acceso de terceros a la búsqueda, los menús y las reviews implica hacer scraping del backend interno de la app de DoorDash, algo que una API estructurada maneja detrás de una sola key.
- Todo está delimitado por ubicación. Los menús, el pricing y la disponibilidad cambian según la coordenada de delivery/pickup — pasa una ubicación real por request en lugar de una sola cacheada.
- Las reviews son datos personales. Los nombres de reviewers y el texto de las reviews son datos personales bajo el RGPD/CCPA — recopila campos públicos y factuales con una base legal.
- Los precios y los menús cambian. Vuelve a extraer según un calendario en lugar de confiar en una captura puntual para investigación de precios.
Dónde se usa esto
- Inteligencia de restaurantes y menús — rastrea el pricing y el surtido en un mercado de delivery. Consulta el caso de uso ecommerce product intelligence.
- Monitoreo de reviews 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 tipos de cocina, cobertura de DashPass y mezcla de pickup vs. delivery por zona.
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 los API docs y consulta el pricing. Consulta también how to scrape Uber Eats para el otro lado del mercado de delivery, how to scrape Instacart para el equivalente en delivery de supermercado, how to scrape OpenTable para el lado de reservas presenciales de los mismos datos de restaurantes, 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.
Preguntas frecuentes
¿DoorDash tiene una API oficial?
No hay una API pública para desarrolladores que permita el acceso de terceros a la búsqueda, los menús o las reviews. Por eso, recopilar datos de restaurantes de DoorDash implica hacer scraping de su backend interno de app — algo que una API estructurada maneja detrás de una key, llamando al mismo flujo anónimo de invitado móvil de Android que usa la app.
¿Cómo identifico una tienda de DoorDash?
Las tiendas se identifican con un store id numérico, devuelto por /doordash/search, /doordash/explore o /doordash/feed. Además, cada endpoint de tienda y búsqueda necesita una latitude/longitude, ya que los menús y la disponibilidad dependen de la ubicación.
¿Puedo buscar por un plato específico en lugar de por un restaurante?
Sí. /doordash/search/items busca platos o items de menú entre comercios cercanos y devuelve los items coincidentes junto con el store id de su tienda y la distancia — separado del /doordash/search basado en restaurantes.
¿Qué datos de DoorDash puedo recopilar?
Campos públicos: resultados de búsqueda de pickup y sugerencias de autocompletado; categorías de cocina y filtros; búsqueda a nivel de item; menús de tienda con precios en formato de visualización; detalle de items de menú individuales; métodos de fulfillment y ventanas de entrega; información de contacto de la tienda; y reviews de tienda (calificación, cantidad, texto).
¿Las reviews de DoorDash son datos personales?
Sí. Los nombres de reviewers y el texto de las reviews son datos personales bajo el RGPD/CCPA — recopila solo campos públicos y factuales con una base legal, y no vuelvas a publicar la identidad de los reviewers.
¿Con qué frecuencia puedo actualizar los datos?
Los menús, el pricing y la disponibilidad cambian, así que vuelve a extraer según un calendario dentro de tu plan y de los límites de uso responsable, en lugar de hacer polling continuo.