Tony Wang6 min de lecturaCómo scrapear Instacart en 2026 (API y Python)
Scrapea Instacart en 2026 — tiendas cercanas, precios en vivo y sugerencias de búsqueda en JSON — DIY, no-code o API estructurada.
La forma más rápida de scrapear Instacart en 2026 es llamar a una API estructurada que devuelve JSON normalizado — tiendas cercanas, precios de productos en vivo, sugerencias de búsqueda, categorías de departamentos y términos en tendencia — en lugar de parsear tú mismo las páginas renderizadas de Instacart. Las propias APIs de Instacart no cubren este vacío: están construidas para integraciones de apps y partners minoristas, no para acceso de terceros a los datos. Esta guía cubre los tres enfoques, qué devuelve cada uno, dónde falla el DIY y la realidad legal desde el principio.
¿Por qué scrapear Instacart?
Instacart agrupa miles de tiendas de comestibles, retail y farmacia en una sola plataforma de delivery, lo que hace que sus datos sean útiles para:
- Monitorear precios y disponibilidad de productos de supermercado — rastrear cómo cambian el precio, el estado de oferta y el nivel de stock de un producto en una tienda específica a lo largo del tiempo.
- Rastrear cobertura de tiendas y ETA de entrega — ver qué minoristas dan servicio a un código postal, si aceptan EBT y qué tan rápido entregan.
- Investigar búsquedas de productos y categorías — ver qué buscan los shoppers cerca de una ubicación y cómo organiza una tienda su taxonomía de departamentos.
- Investigación de market-basket y CPG — comparar el precio y las promociones del mismo producto entre tiendas y cadenas cercanas.
¿Es legal scrapear Instacart?
Opción 1: DIY en Python (y por qué falla)
Las páginas de tienda de Instacart se renderizan a partir de una API interna detrás de la propia app de JavaScript del sitio, así que un scraper DIY termina haciendo ingeniería inversa de esa API interna en lugar de parsear HTML limpio:
import requests
# Instacart's storefront pages call an internal API scoped to a
# specific postal code and store — there's no stable public endpoint
resp = requests.get("https://www.instacart.com/store/safeway/storefront")
Funciona en la demo y luego se rompe:
- No hay API pública para acceso de terceros a los datos. La Instacart Developer Platform (IDP) sirve para incrustar un enlace de checkout de Instacart comprable en otra app — devuelve una URL de landing page, no datos de productos. Instacart Connect es para partners minoristas que envían el inventario de su propia tienda a Instacart. Ninguna de las dos le da a un investigador externo acceso de lectura a los datos de Instacart.
- Todo está limitado por ubicación y tienda. El precio, la disponibilidad e incluso las sugerencias de búsqueda están atadas a un código postal y al
shop_idde una tienda específica — no existe una única respuesta de "catálogo de Instacart" que puedas obtener de una vez. robots.txty los Terms restringen explícitamente el scraping. Los Terms de Instacart prohíben el scraping/data mining automatizado, yrobots.txtbloquea la ruta de la API y la mayoría de las rutas de navegación/producto de la tienda para crawlers.- Esquema interno cambiante y defensas anti-bot. La forma de la respuesta de la API privada de la tienda cambia sin previo aviso, y las solicitudes automatizadas repetidas activan rate limits.
Opción 2: Herramientas no-code
Existen actors de marketplace "Instacart scraper" para extracciones puntuales del listado de una tienda o una sola búsqueda, pero heredan la misma fragilidad de la API interna que el DIY y cargan con la misma exposición ante los Terms.
Opción 3: Una API estructurada de Instacart
Para un flujo de trabajo repetible, una Instacart scraping API devuelve JSON normalizado para descubrimiento de tiendas, detalle de productos, búsqueda y categorías — sin necesidad de login, cookie ni cuenta de Instacart. Encuentra tiendas cerca de un código postal:
curl "https://api.crawlora.net/api/v1/instacart/stores?postal_code=94105" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"postal_code": "94105",
"stores": [
{
"shop_id": "9501",
"retailer_location_id": "53",
"retailer_id": "1",
"name": "Safeway",
"slug": "safeway",
"retailer_type": "Grocery - Traditional",
"service_type": "delivery",
"accepts_ebt": true,
"delivery_eta": "By 4:45am"
}
]
}
}
Una vez que tienes el shop_id y el slug de una tienda, las sugerencias de búsqueda también están limitadas por código postal — ya sea dentro de esa tienda o en todos los minoristas cercanos a la vez:
curl "https://api.crawlora.net/api/v1/instacart/search-nearby?postal_code=94105&q=milk" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"postal_code": "94105",
"query": "milk",
"suggestions": [
{ "term": "milk", "thumbnail_url": "https://d2lnr5mha7bycj.cloudfront.net/product-image/file/thumb_b4aaab37-66cf-46e3-9638-f37987fca803.jpg" },
{ "term": "almond milk", "thumbnail_url": "https://d2lnr5mha7bycj.cloudfront.net/product-image/file/thumb_example.jpg" }
]
}
}
Luego trae en Python el precio, stock y nutrición en vivo de un producto específico en esa tienda:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/instacart"
loc = {"shop_id": "9501", "store_slug": "safeway", "postal_code": "94105"}
stores = requests.get(f"{base}/stores", headers=h, params={"postal_code": "94105"}).json()["data"]["stores"]
item = requests.get(f"{base}/item", headers=h, params={
**loc,
"retailer_location_id": "53",
"product_id": "17830663",
}).json()["data"]
La respuesta de un item es JSON normalizado que puedes guardar directamente (campos reales):
{
"id": "items_53-17830663",
"product_id": "17830663",
"name": "Lucerne Blended Plain Yogurt",
"size": "32 oz",
"brand_name": "lucerne",
"price": {
"current_price": 2.99,
"regular_price": 3.99,
"on_sale": true,
"offer_label": "25% off",
"pricing_unit": "32 oz"
},
"available": true,
"stock_level": "inStock",
"dietary_labels": ["low_carb", "low_sugar"],
"nutrition": [
{ "label": "Protein", "value": "7", "unit": "g" },
{ "label": "Calories", "value": "150" }
]
}
Más allá de esto, la misma key llega a /instacart/departments (la taxonomía de categorías/subcategorías de una tienda, delimitada por shop_id/store_slug/postal_code), /instacart/search (sugerencias de autocompletado limitadas a una tienda vía shop_id/store_slug/q), y /instacart/trending (términos de búsqueda populares cerca de un postal_code, sin necesidad de tienda). Guarda una fila por producto por extracción, indexada por product_id y shop_id, y vuelve a ejecutarlo en un cronograma para rastrear cambios en current_price/on_sale.
Qué puedes recopilar
Datos públicos de la tienda: tiendas cercanas (shop_id, retailer_location_id, nombre, tipo de minorista, tipo de servicio, aceptación de EBT, ETA de entrega); detalle de productos en una tienda específica (nombre, marca, tamaño, precio actual/regular, estado de oferta y offer label, disponibilidad, nivel de stock, dietary labels, información nutricional); términos de búsqueda y sugerencia de autocompletado (dentro de una tienda o en todos los minoristas cercanos); la taxonomía de departamentos y subcategorías de una tienda; y términos de búsqueda en tendencia por código postal. Solo datos públicos de página de producto — no información personal de shoppers, clientes o pedidos.
Limitaciones y desafíos comunes
- No hay endpoint de enumeración del catálogo de productos. Search y search-nearby devuelven términos de sugerencia tipo typeahead, no una lista paginada de productos coincidentes con ids — resolver un
product_idpara/instacart/itemrequiere un SKU conocido u otro paso de descubrimiento, no una sola llamada de búsqueda. - Específico de la tienda, no de toda la cadena. Un
shop_idcorresponde a la tienda de un minorista en una ubicación — la misma cadena en otro código postal es unshop_iddistinto, con su propio precio y disponibilidad. - El precio es un blanco móvil.
current_priceyon_salecambian con frecuencia; trata cada extracción como una foto de un momento puntual y vuelve a ejecutarla en un cronograma para obtener datos de tendencia. - No hay un canal oficial para este caso de uso exacto. Las ofertas propias de desarrolladores de Instacart (IDP, Connect) resuelven la integración de apps y la sincronización de inventario de minoristas, no el acceso de lectura de terceros — planifica en torno a una API estructurada en lugar de esperar una oficial.
Dónde se usa esto
- Monitorear precios y disponibilidad de productos de supermercado — rastrear
current_price,on_saleystock_levelde un producto en una tienda específica a lo largo del tiempo. Ver el caso de uso ecommerce product intelligence. - Rastrear cobertura de tiendas y ETA de entrega — mapear qué minoristas dan servicio a un código postal y qué tan rápido entregan.
- Investigar búsquedas de productos y categorías — combinar
/instacart/trendingcon la taxonomía de departamentos para ver qué se busca frente a cómo organiza una tienda su catálogo.
Sources
Empieza a recopilar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o revisa si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de stores e item en el Playground, revisa el esquema en los API docs y consulta el pricing. Ver también how to scrape DoorDash y how to scrape Costco para patrones adyacentes de supermercado y delivery, how to scrape Uber Eats para el lado de delivery de restaurantes de ese mismo mercado on-demand, además de is web scraping legal.
Parte de nuestra how-to-scrape guide series — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Instacart tiene una API pública para scrapear datos de productos o precios?
No. La Instacart Developer Platform es para desarrolladores de apps que incrustan un enlace de checkout comprable (no devuelve datos de productos), e Instacart Connect es para partners minoristas que sincronizan su propio inventario con Instacart — ninguna de las dos le da a terceros acceso de lectura a los datos de la tienda de Instacart.
¿Cómo encuentro tiendas de Instacart cerca de una ubicación mediante una API?
Envía un código postal a /instacart/stores y recibe de vuelta las tiendas minoristas cercanas como JSON estructurado — nombre, shop_id, aceptación de EBT y ETA de entrega.
¿Puedo obtener precios en vivo de un producto de Instacart?
Sí — /instacart/item devuelve el precio actual de un producto en una tienda específica, si hay una oferta activa, el nivel de stock y la información nutricional como JSON estructurado, dado un shop_id y un product_id.
¿Por qué el mismo producto tiene precios distintos en los datos de Instacart?
El precio y la disponibilidad están limitados al shop_id de una tienda específica en un código postal específico, no a un catálogo nacional único — el mismo producto en dos tiendas distintas (o la misma cadena en dos códigos postales) puede devolver valores diferentes de price y stock_level.
¿El endpoint de búsqueda de Instacart devuelve una lista de productos coincidentes?
No — /instacart/search y /instacart/search-nearby devuelven términos de sugerencia de autocompletado (con thumbnails), no una lista paginada de ids de productos. Para resolver un product_id con el detalle completo hace falta un SKU conocido u otro paso de descubrimiento.
¿Es legal scrapear Instacart?
Los datos de un producto no tienen derechos de autor, y acceder a datos públicos no viola la CFAA según hiQ v. LinkedIn, pero los Terms of Service de Instacart prohíben explícitamente el scraping/data mining automatizado, y robots.txt excluye la ruta de la API y la mayoría de las rutas de navegación/producto de la tienda — trátalo como una restricción real, no como una formalidad.
¿La API de Instacart requiere una cuenta o login?
Quien llama no necesita cuenta ni login de Instacart — solo una API key.