Preço de supermercado é local. Uma caixa de ovos pode ter um preço em uma loja de bairro, outro no centro da cidade e um terceiro em um app de delivery que soma a própria margem à mesma gôndola. Se você precifica contra concorrentes locais, confere as promoções de uma marca ou acompanha a inflação de alimentos por região, precisa dos preços de cada cidade que importa para você, não de uma média nacional. Esse é um trabalho central de inteligência de preços, e ele é mais difícil para supermercados do que para a maior parte do varejo.
Este guia explica onde os preços de supermercado variam, como os apps de delivery decidem qual loja você vê e como montar uma coleta que lê cada cidade do jeito que um cliente local lê.
Onde os preços de supermercado variam
Supermercados raramente trabalham com uma única tabela de preços. As camadas mais comuns são:
- Zonas de preço. As redes agrupam as lojas em zonas conforme a concorrência e os custos locais. Duas lojas da mesma rede, a poucos quilômetros uma da outra, podem estar em zonas diferentes.
- Promoções por loja. Encartes semanais e ofertas de fidelidade costumam mudar por região, e algumas ofertas valem só em lojas selecionadas.
- Margens dos apps de delivery. Apps de terceiros podem mostrar preços acima do preço de gôndola da loja, mais taxas de serviço e de entrega que mudam conforme a área e o horário.
- Disponibilidade. Um item pode estar em estoque em uma loja e em falta em outra, o que muda quanto uma cesta realmente custa.
- Tamanhos de embalagem e marcas próprias. A mesma linha de produtos pode vir em tamanhos diferentes por região, o que esconde mudanças de preço se você não comparar o preço por unidade.
Uma única coleta nacional mistura tudo isso em um número enganoso. Você precisa da loja, da cidade e do canal associados a cada preço que registra.
Como apps de delivery e sites de supermercado escolhem a loja
A maioria dos sites de supermercado não mostra o catálogo completo enquanto não sabe onde você está. Eles decidem mais ou menos nesta ordem:
- Uma loja ou endereço salvo, a partir de um cookie ou da conta.
- O endereço ou CEP que você digita no seletor de loja ou na consulta de entrega.
- A localização do seu IP, como primeiro palpite antes de você escolher qualquer coisa.
Isso tem uma consequência prática. O IP leva você à cidade certa e faz o primeiro palpite cair perto da loja que você quer. A loja exata, até o nível do CEP, é definida pelo endereço que você informa ao site. Então uma configuração confiável faz as duas coisas: um IP residencial na cidade de destino e a loja ou o endereço de entrega informado na mesma sessão, para que os dois nunca entrem em conflito. Nosso artigo sobre quando a segmentação de proxy por cidade importa explica por que uma divergência entre o IP e o local escolhido pode mudar o que um site entrega.
Montando a cesta
Antes de coletar qualquer coisa, defina o que você vai comparar:
- Uma cesta fixa de 50 a 300 produtos: itens básicos, os seus campeões de venda e os itens que os concorrentes mais promovem.
- Uma chave de correspondência para cada produto, como o código de barras (GTIN) quando o site o exibe, ou então uma correspondência por marca, nome e tamanho que você confere manualmente uma vez.
- Preço por unidade (por kg, por litro, por unidade) ao lado do preço de gôndola, para que mudanças de embalagem não pareçam mudanças de preço.
- Uma lista de lojas por cidade: quais lojas e quais áreas de entrega representam aquela cidade para você.
Mantenha a cesta estável. Mudá-la toda semana torna as tendências impossíveis de ler.
Coletando cidade por cidade
Para cada cidade, abra uma sessão por meio de proxies residenciais segmentados para aquela cidade, defina a loja no site e depois leia a cesta. Mantenha um único IP durante toda a sessão com um ID de sessão fixa, para que o site não veja o cliente pular de um lugar para outro no meio do caminho.
customer-USERNAME-country-us-city-chicago-sid-chi-store-118-ttl-900:PASSWORD
O ID de sessão (sid) mantém a mesma saída por até o ttl em segundos. Use um ID por loja, para que cada visita a uma loja pareça um único cliente. Em um mercado grande, distribua o trabalho entre as principais cidades, por exemplo Chicago, Dallas e Atlanta nas páginas dos Estados Unidos, em vez de ler o país inteiro a partir de um só lugar.
Um loop mínimo em Python fica assim:
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
Os endpoints aqui são exemplos. Muitos sites de supermercado carregam os preços a partir de um endpoint JSON depois que a loja é definida; ler esse endpoint é mais leve e mais estável do que fazer o parsing da página.
Lendo apps de delivery
Os apps de delivery acrescentam duas coisas que você precisa registrar separadamente: o preço do item no app e as taxas. Registre:
- O preço do item no app ao lado do preço de gôndola no site do próprio supermercado, para medir a margem.
- As taxas de serviço e de entrega para um valor de cesta fixo, já que as taxas costumam depender do total do pedido.
- O horário da coleta, porque taxas e disponibilidade mudam ao longo do dia.
Compare coisas equivalentes: mesma loja, mesma cesta, mesmo horário.
Mantendo os dados limpos
- Guarde cada preço com cidade, loja, canal, horário e preço por unidade. Sem a loja, você não consegue explicar uma mudança.
- Marque as promoções em vez de incluí-las na média. Uma oferta de duas semanas não é uma redução de preço.
- Fique de olho nos itens ausentes. Um preço vazio muitas vezes é um item em falta, o que já é um sinal por si só.
- Verifique preços personalizados. Preços de fidelidade com login podem ser diferentes dos preços para visitantes. Colete como visitante, a menos que o preço de fidelidade seja o que você estuda. Nosso guia para detectar preços geopersonalizados e dinâmicos mostra como separar os dois.
- Colete apenas preços públicos, em um ritmo educado, e respeite os termos de cada site.
Resumindo
Um preço de supermercado só significa algo com a cidade, a loja e o canal associados. Defina uma cesta, decida quais lojas representam cada cidade, entre em cada cidade por um IP residencial localizado lá, defina a loja dentro do site na mesma sessão e registre preços por unidade, promoções e taxas separadamente. Rode a coleta toda semana para os itens básicos e todo dia para os itens em que você compete, e você vai ver os movimentos de preço locais enquanto acontecem, em vez de um número nacional borrado.