# Raspagem de Preços de Supermercado: Dados em Nível de Loja e CEP em Escala

Os preços de supermercado são hiperlocais: o mesmo item custa valores diferentes por loja e CEP. Capturar isso significa solicitações geograficamente direcionadas e correspondência de UPC. Aqui está como construir um conjunto de dados de preços em nível de loja que se sustenta.

A precificação de supermercado é um dos conjuntos de dados mais hiperlocais da web. A mesma caixa de cereal pode custar $4,29 em uma rede e $5,19 em outra a poucos quilômetros de distância, e as plataformas de entrega oferecem preços diferentes dependendo da loja e do código postal que você definir. Essa variabilidade é exatamente o motivo pelo qual os dados são valiosos — para marcas de CPG acompanhando a execução no varejo, para ferramentas de comparação, para qualquer pessoa medindo a inflação na prateleira. Mas isso também significa que você não pode simplesmente raspar um preço nacional; você tem que capturar preços por loja e por CEP, o que é um problema de direcionamento geográfico e correspondência de produtos. Este guia cobre como coletar preços de supermercado em nível de loja, corresponder produtos por UPC e construir um índice de cesta que se sustenta. É informação geral, não aconselhamento jurídico — respeite os termos de cada site.

## Por que a diferença é a oportunidade

Os números fazem o caso. Quando a Consumer Reports encomendou uma comparação de cestas entre redes em seis cidades representativas dos EUA, a diferença entre a loja mais barata e a mais cara em cada cidade superou 33% — e aumentou ainda mais quando clubes de armazém e mercearias especializadas foram incluídos. Os preços dos alimentos subiram 25,5% entre dezembro de 2020 e dezembro de 2024, de acordo com dados do Bureau of Labor Statistics analisados pelo Fed de St. Louis, com o café sozinho subindo cerca de 20% ano a ano. Índices semanais que rastreiam isso são extraídos de mais de 150.000 lojas. Um conjunto de dados que captura quem é o mais barato, onde, e como isso muda semana a semana é genuinamente difícil de montar manualmente — o que o torna defensável uma vez que você o automatiza.

## A localização controla o preço, então controla a solicitação

A técnica principal: para ver os preços locais de uma loja, você deve se apresentar como um comprador na área dessa loja. Na maioria dos sites de supermercado e entrega, os preços só são resolvidos uma vez que você define um CEP de entrega ou escolhe uma loja específica, e o site vincula isso à sua sessão e, muitas vezes, à localização do seu IP. Portanto, a solicitação tem duas partes móveis — a loja/CEP que você define no payload e um IP de saída que está na mesma região para que o site confie na localização. Um IP residencial na área metropolitana alvo é o que desbloqueia o preço local correto; um IP de datacenter em outro estado pode lhe dar uma visão padrão ou bloqueada.

```python
import httpx

# A residential exit in the target region unlocks that region's prices
def region_proxy(state):
    return f"http://USER-country-us-region-{state}:PASS@residentialpremium.quantumproxies.io:8080"

HEADERS = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
    "accept": "application/json",
}

def fetch_store_price(store_api_url, zip_code, state):
    # Many stores accept the ZIP as a cookie/param that scopes pricing
    r = httpx.get(
        store_api_url,
        params={"zipCode": zip_code},
        headers={**HEADERS, "cookie": f"store_zip={zip_code}"},
        proxy=region_proxy(state),
        timeout=30,
    )
    return r.json()
```

![Duas cestas de supermercado na mesma cidade: a loja convencional mais barata contra a mais cara, que custa 33% a mais em uma comparação da Consumer Reports em seis cidades dos EUA; o quadro acrescenta o panorama geral: preços dos alimentos 25,5% mais altos de dezembro de 2020 a dezembro de 2024, café cerca de 20% mais caro, índices semanais de 150.000+ lojas.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335218/blog/generated/qp-b9-092-diag1.png)
*Uma cesta pode custar um terço a mais em uma rede do que em outra na mesma cidade — capturar essa diferença é o objetivo principal.*

## Leia o JSON de hidratação, não o preço renderizado

Os sites modernos de supermercado são fortemente renderizados no cliente e — como a maioria dos grandes aplicativos de comércio eletrônico — eles incorporam os dados do produto como JSON na página em vez de apenas pintá-los na tela. Procure um payload de hidratação (frequentemente em uma tag `<script>` como `__NEXT_DATA__` ou um objeto de estado específico da loja) que carrega o preço, status de estoque e, crucialmente, o UPC ou GTIN. Ler esse JSON é muito mais robusto do que raspar um elemento de preço renderizado, e ele fornece o código de barras necessário para a correspondência. Nossa nota sobre [por que um scraper retorna uma página vazia](https://quantumproxies.io/blog/scraper-returns-empty-page-javascript) cobre como encontrar esses payloads quando o HTML visível parece vazio.

```python
import re, json

def extract_hydration(html: str) -> dict:
    m = re.search(r'<script id="__NEXT_DATA__"[^>]*>(\{.+?\})</script>',
                  html, re.DOTALL)
    if not m:
        raise ValueError("hydration payload not found")
    return json.loads(m.group(1))

def parse_product(state_json: dict) -> dict:
    p = state_json["props"]["pageProps"]["product"]
    return {
        "upc": p.get("upc") or p.get("gtin"),
        "name": p.get("name"),
        "price": p["price"]["current"],
        "in_stock": p.get("availabilityStatus") == "IN_STOCK",
    }
```

## Corresponda por UPC, nunca por nome

O maior erro nos dados de preços de supermercado é corresponder produtos por nome. "Cheerios Family Size", "Cheerios Family Size 18oz" e "General Mills Cheerios (Family Size)" são o mesmo item com três rótulos em três lojas — corresponder pelo nome e sua comparação é ruído. Corresponda pelo código de barras UPC/GTIN em vez disso, que é o mesmo independentemente de como cada loja intitula o produto. Toda ferramenta séria de comparação de supermercado faz isso; é o que torna uma cesta entre lojas significativa.

```python
from collections import defaultdict

# Group scraped rows by barcode so each item lines up across stores
def compare_by_upc(rows: list[dict]) -> dict:
    by_upc = defaultdict(dict)
    for r in rows:                      # r = {store, upc, price, ...}
        if r.get("upc"):
            by_upc[r["upc"]][r["store"]] = r["price"]
    # cheapest store per item
    return {upc: min(prices, key=prices.get) for upc, prices in by_upc.items()}
```

A partir de linhas correspondentes por código de barras, você pode construir a métrica que importa: um índice de cesta. Defina uma cesta fixa de itens comuns, precifique-a em cada loja por CEP e totalize-a — esse único número, rastreado ao longo do tempo, é o que revela as diferenças de 33% e a inflação semana a semana. Como você está executando a mesma coleta em muitos locais e lojas, a rotação por solicitação em um pool de [proxy residencial](https://quantumproxies.io/residential-proxies) impede que qualquer saída pareça anormal enquanto preserva o geo que você definiu.

[Colete preços locais de supermercado em IPs geograficamente direcionados](https://quantumproxies.io/residential-proxies)

## Escalando para um conjunto de dados real

Um feed de preços de supermercado em produção é uma matriz: lojas × CEPs × produtos × tempo. Isso é um monte de solicitações, e é onde a raspagem DIY fica pesada — você está lidando com sessões geograficamente vinculadas, payloads de hidratação que mudam entre implantações e camadas anti-bot nas maiores redes. Uma [Scraper API](https://quantumproxies.io/scraper-api) que renderiza quando necessário, rotaciona IPs geograficamente direcionados e retorna JSON limpo colapsa a maior parte disso em uma única chamada, para que você concentre seu esforço na lógica da cesta em vez da infraestrutura. Para o lado da estratégia de preços dos mesmos dados, veja nossos guias sobre [monitoramento de preços de concorrentes](https://quantumproxies.io/blog/competitor-price-monitoring-with-proxies) e [construção de uma camada de dados de comparação de preços](https://quantumproxies.io/blog/build-price-comparison-website-data).

![Um pipeline de preços de supermercado em cinco etapas: definir a loja e o CEP, enviar a solicitação a partir de uma saída residencial na mesma região, ler o JSON de hidratação que a página entrega, associar produtos pelo UPC em vez do nome e totalizar uma cesta fixa por loja e CEP ao longo do tempo; o quadro mostra os campos JSON usados: UPC, preço, estoque.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335218/blog/generated/qp-b9-092-diag2.png)
*Defina a localização, leia o JSON que a página envia, corresponda por código de barras, depois totalize a cesta por CEP ao longo do tempo.*

## Perguntas frequentes

### Como faço para raspar preços de supermercado por localização?

Defina a loja ou CEP de entrega na solicitação (geralmente um parâmetro ou cookie) e roteie através de um proxy residencial cujo IP de saída esteja nessa região, para que o site confie na localização e retorne preços locais. Em seguida, leia o preço e o UPC do JSON de hidratação da página em vez do elemento renderizado. Repita por CEP para construir uma matriz geográfica.

### Por que corresponder produtos de supermercado por UPC em vez de nome?

Porque as lojas intitulam o mesmo item de forma diferente — tamanhos, ordem de marcas e abreviações variam — então a correspondência por nome produz falsas incompatibilidades e comparações ruidosas. O código de barras UPC ou GTIN é idêntico entre os varejistas para o mesmo produto, então corresponder por ele permite alinhar os preços para o mesmo item em todas as lojas que você raspa.

### Os preços de entrega de supermercado realmente diferem por CEP?

Sim. As plataformas de supermercado e entrega delimitam preços, promoções e disponibilidade para uma loja, e as lojas estão vinculadas ao seu CEP de entrega, então o mesmo produto pode mostrar preços diferentes em áreas vizinhas. A Consumer Reports encontrou diferenças de cesta acima de 33% entre as redes mais baratas e mais caras em uma única cidade, o que é por isso que a coleta específica por localização é importante.

### É legal raspar preços de supermercado?

Coletar preços visíveis publicamente é comum — veículos de notícias e índices de preços fazem isso semanalmente — mas depende dos termos do site e da sua jurisdição. Fique em páginas de produtos públicas, evite dados pessoais e áreas logadas, controle o ritmo das suas solicitações e obtenha aconselhamento jurídico para uso comercial. Esta é informação geral, não aconselhamento jurídico.

Os dados de preços de supermercado vivem e morrem na localização e identidade. Defina a loja e o CEP, apresente-se a partir de um IP residencial na região, leia o JSON de hidratação e corresponda no UPC — depois totalize a cesta e acompanhe ao longo do tempo. Faça isso em lojas e CEPs suficientes e você terá um conjunto de dados que uma comparação manual nunca poderia acompanhar.

[Construa seu feed de preços de supermercado com a Scraper API](https://quantumproxies.io/scraper-api)
