Los precios del supermercado son locales. Una docena de huevos puede tener un precio en una tienda de las afueras, otro en el centro de la ciudad y un tercero en una app de reparto que añade su propio recargo sobre el mismo lineal. Si fijas precios frente a rivales locales, revisas las promociones de una marca o sigues la inflación de los alimentos por región, necesitas precios de cada ciudad que te interesa, no una media nacional. Es una tarea central de la inteligencia de precios, y en alimentación es más difícil que en casi cualquier otro retail.
Esta guía explica dónde varían los precios del supermercado, cómo deciden las apps de reparto qué tienda ves y cómo montar una recogida que lea cada ciudad como lo haría un comprador local.
Dónde varían los precios del supermercado
Los supermercados rara vez tienen una única lista de precios. Las capas habituales son:
- Zonas de precios. Las cadenas agrupan sus tiendas en zonas según la competencia y los costes locales. Dos tiendas de la misma cadena, a pocos kilómetros, pueden estar en zonas distintas.
- Promociones por tienda. Los folletos semanales y las ofertas de fidelización suelen cambiar por región, y algunas ofertas solo valen en tiendas concretas.
- Recargos de las apps de reparto. Las apps de terceros pueden mostrar precios por encima del precio en tienda, además de tarifas de servicio y de envío que cambian según la zona y la hora del día.
- Disponibilidad. Un artículo puede estar en stock en una tienda y faltar en otra, lo que cambia lo que cuesta de verdad una cesta.
- Formatos y marcas propias. Una misma línea de producto puede venderse en tamaños distintos según la región, lo que oculta cambios de precio si no comparas precios por unidad.
Un único scraping nacional mezcla todo esto en una cifra engañosa. Necesitas la tienda, la ciudad y el canal asociados a cada precio que registras.
Cómo eligen tienda las apps de reparto y las webs de supermercado
La mayoría de las webs de supermercado no muestran el catálogo completo hasta saber dónde estás. Lo deciden más o menos en este orden:
- Una tienda o dirección guardada, en una cookie o en la cuenta.
- La dirección o el código postal que escribes en el selector de tienda o en la comprobación de reparto.
- La ubicación de tu IP, como primera suposición antes de que elijas nada.
Eso tiene una consecuencia práctica. La IP te lleva a la ciudad correcta y hace que la primera suposición caiga cerca de la tienda que buscas. La tienda exacta, hasta el código postal, la fija la dirección que le das a la web. Así que una configuración fiable hace las dos cosas: una IP residencial en la ciudad de destino y la tienda o dirección de entrega indicada en la misma sesión, para que nunca se contradigan. Nuestro artículo sobre cuándo importa la segmentación de proxies por ciudad explica por qué un desajuste entre la IP y la ubicación elegida puede cambiar lo que sirve una web.
Cómo definir la cesta
Antes de recoger nada, fija qué vas a comparar:
- Una cesta fija de 50 a 300 productos: básicos, tus productos más vendidos y los artículos que más promocionan tus rivales.
- Una clave de correspondencia para cada producto, como el código de barras (GTIN) cuando la web lo muestra; si no, una coincidencia de marca, nombre y tamaño que revisas a mano una vez.
- Precio por unidad (por kg, por litro, por unidad) junto al precio en lineal, para que los cambios de formato no parezcan cambios de precio.
- Una lista de tiendas por ciudad: qué tiendas y qué zonas de reparto representan esa ciudad para ti.
Mantén la cesta estable. Si la cambias cada semana, las tendencias se vuelven imposibles de leer.
Recogida ciudad por ciudad
Para cada ciudad, abre una sesión a través de proxies residenciales segmentados en esa ciudad, fija la tienda en la web y después lee la cesta. Mantén una sola IP durante toda la sesión con un ID de sesión sticky, para que la web no vea al comprador saltar de una ubicación a otra a mitad de camino.
customer-USERNAME-country-us-city-chicago-sid-chi-store-118-ttl-900:PASSWORD
El ID de sesión (sid) mantiene la misma salida durante el ttl en segundos. Usa un ID por tienda, para que cada visita a una tienda parezca un solo comprador. En un mercado grande, reparte el trabajo entre sus ciudades principales, por ejemplo Chicago, Dallas y Atlanta en las páginas de Estados Unidos, en lugar de leer todo el país desde un solo lugar.
Un bucle mínimo en Python tiene este aspecto:
import requests
GATEWAY = "p.shifter.io:443"
USER, PASS = "USERNAME", "PASSWORD"
def session_for(city, store_id):
s = requests.Session()
proxy = f"http://customer-{USER}-country-us-city-{city}-sid-{city}-{store_id}-ttl-900:{PASS}@{GATEWAY}"
s.proxies = {"http": proxy, "https": proxy}
return s
def read_basket(city, store_id, products):
s = session_for(city, store_id)
# 1. Set the store the way the site expects (store picker or address check).
s.post("https://grocer.example/api/store/select", json={"storeId": store_id}, timeout=30)
rows = []
for p in products:
r = s.get(f"https://grocer.example/api/product/{p['sku']}", timeout=30)
if r.status_code != 200:
rows.append({**p, "city": city, "store": store_id, "error": r.status_code})
continue
d = r.json()
rows.append({**p, "city": city, "store": store_id,
"price": d.get("price"), "unit_price": d.get("unitPrice"),
"promo": d.get("promotion"), "in_stock": d.get("available")})
return rows
Los endpoints son de ejemplo. Muchas webs de supermercado cargan los precios desde un endpoint JSON una vez fijada la tienda; leer ese endpoint es más ligero y más estable que analizar la página.
Cómo leer las apps de reparto
Las apps de reparto añaden dos cosas que debes registrar por separado: el precio del artículo en la app y las tarifas. Recoge:
- El precio del artículo en la app junto al precio en lineal de la web del propio supermercado, para medir el recargo.
- Las tarifas de servicio y de envío para un importe de cesta fijo, ya que las tarifas suelen depender del total del pedido.
- La hora de la recogida, porque las tarifas y la disponibilidad cambian a lo largo del día.
Compara lo comparable: misma tienda, misma cesta, misma hora.
Cómo mantener los datos limpios
- Guarda cada precio con ciudad, tienda, canal, hora y precio por unidad. Sin la tienda, no puedes explicar un cambio.
- Marca las promociones en lugar de incluirlas en la media. Una oferta de dos semanas no es una bajada de precio.
- Vigila los artículos que faltan. Un precio vacío suele ser una rotura de stock, que ya es una señal en sí misma.
- Comprueba los precios personalizados. Los precios de fidelización con sesión iniciada pueden diferir de los precios para invitados. Recoge como invitado salvo que lo que estudies sean los precios de fidelización. Nuestra guía para detectar precios geopersonalizados y dinámicos muestra cómo separar ambos.
- Recoge solo precios públicos, a un ritmo moderado, y respeta las condiciones de cada web.
Conclusión
Un precio de supermercado solo tiene sentido con su ciudad, su tienda y su canal. Fija una cesta, decide qué tiendas representan cada ciudad, entra en cada ciudad con una IP residencial situada allí, fija la tienda dentro de la web en la misma sesión y registra por separado los precios por unidad, las promociones y las tarifas. Hazlo cada semana para los básicos y cada día para los artículos en los que compites, y verás los movimientos de precios locales en cuanto ocurren, en lugar de una cifra nacional borrosa.