Como Raspar Preços e Estoque da Best Buy em 2026

Guia prático para raspar preços e disponibilidade por loja da Best Buy usando proxies residenciais, contornando Akamai Bot Manager e extraindo dados de SKU com Python e curl_cffi.

How to Scrape Best Buy Prices and Stock in 2026: Proxies, Selectors & Anti-Bot Workarounds

A Best Buy é uma das maiores varejistas de eletrônicos dos EUA, e monitorar seus preços e disponibilidade em tempo real é essencial para equipes de pricing, reabastecimento e arbitragem. Neste guia, você aprenderá como raspar preços e estoque da Best Buy em 2026 usando proxies residenciais, contornando o sistema anti-bot da Akamai e extraindo dados estruturados das páginas de produto e endpoints internos de fulfillment.

A primeira decisão arquitetural é simples mas crítica: API oficial versus HTML do site. A Best Buy mantém um portal de desenvolvedores em developer.bestbuy.com que oferece uma API REST de produtos com respostas JSON limpas. O problema? Ela exige cadastro, aprovação de chave, impõe um limite aproximado de 5 requisições por segundo por chave no tier gratuito e — o mais limitante — não expõe disponibilidade em nível de loja. Para a maioria dos casos de uso de monitoramento de estoque, a única fonte viável é o site público.

Como Raspar Preços e Estoque da Best Buy em 2026: O Cenário Atual

O ecossistema de scraping da Best Buy mudou significativamente nos últimos anos. A varejista reforçou sua infraestrutura anti-bot, tornando proxies datacenter quase inúveis após poucas requisições. Ao mesmo tempo, a demanda por dados de pricing em tempo real cresceu — competidores, marketplaces e ferramentas de arbitragem precisam de Best Buy price tracker e Best Buy stock checker que funcionem de forma confiável e em escala.

A boa notícia é que a Best Buy ainda expõe endpoints internos de fulfillment que retornam JSON estruturado com preço e disponibilidade por CEP, desde que você saiba onde procurar e use os proxies certos. Vamos cobrir cada peça desse quebra-cabeça.

A Stack Anti-Bot da Best Buy: Akamai Bot Manager

A Best Buy utiliza o Akamai Bot Manager como sua principal camada de defesa contra automação. O Akamai Bot Manager é um dos sistemas anti-bot mais sofisticados do mercado, usado por grandes varejistas e plataformas de e-commerce globalmente.

Como o Akamai identifica bots

O sistema funciona em duas fases principais:

  • Cookie sensor (_abck): O Akamai injeta um cookie JavaScript chamado _abck que é gerado por um script ofuscado executado no navegador. Esse script coleta dezenas de sinais — canvas fingerprint, WebGL, fontes instaladas, timing de eventos, propriedades do navigator — e os envia de volta como um valor de sensor. Sem um _abck válido, a Best Buy retorna um desafio ou HTTP 403.
  • Cookie bm_sz: Um segundo cookie de sessão que complementa o _abck, rastreando o comportamento do cliente ao longo da navegação. Requisições sem o par _abck + bm_sz válido são bloqueadas.
  • Reputação de IP: O Akamai mantém uma base de reputação de IPs em tempo real. IPs datacenter (AWS, GCP, DigitalOcean, OVH) receuem um score de bot elevado e são desafiados dentro de 5 a 10 requisições, às vezes já na primeira.
  • Análise comportamental: Padrões de navegação atípicos — como acessar 50 SKUs em sequência sem interação com a página — disparam flags adicionais.

É por isso que proxies datacenter falham tão rapidamente. O Akamai não precisa analisar seu User-Agent ou resolver um CAPTCHA visível — ele simplesmente marca seu IP como suspeito e bloqueia silenciosamente com um 403 ou uma página de desafio.

Padrões de URL e Seletores para Raspar a Best Buy

Páginas de produto (SKU)

Cada produto na Best Buy tem uma URL canônica no formato:

https://www.bestbuy.com/site/<slug>/<sku>.p?skuId=<sku>

Onde <slug> é o nome amigável do produto (que pode variar) e <sku> é o identificador numérico de 7 dígitos. Exemplo real:

https://www.bestbuy.com/site/sony-playstation-5-console/6426149.p?skuId=6426149

Na página HTML, os seletores CSS principais são:

  • .priceView-customer-price span — preço atual exibido ao cliente
  • .priceView-price-match-guarantee — indicador de price match
  • .sku-title h1 — título/nome do produto
  • .fulfillment-fulfillment-summary — resumo de disponibilidade (envio/retirada)
  • .sku-item::attr(data-sku-id) — SKU em listagens de categoria

Endpoints internos de fulfillment e preço

A Best Buy carrega dinamicamente dados de preço e disponibilidade via chamadas AJAX a endpoints internos. O mais útil é o de fulfillment, que aceita skuId e zip (CEP dos EUA) como parâmetros:

https://www.bestbuy.com/fulfillment/buy/v1/fulfillment?skus=<skuId>&zip=<zipCode>&storeId=0

Esse endpoint retorna JSON com disponibilidade de envio, retirada em loja (in-store pickup) e estoque por localização. É a fonte mais confiável para construir um Best Buy stock checker que funcione por CEP.

Listagens de categoria

As páginas de categoria seguem o padrão /site/<categoria>/<subcategoria>/abcat*.c e suportam paginação via parâmetro ?cp=<pagina>, com aproximadamente 24 produtos por página. Cada item na listagem inclui o atributo data-sku-id, que você pode extrair em massa para depois consultar individualmente.

Por Que Estoque por Loja Exige Proxies Residenciais dos EUA

A disponibilidade de produto na Best Buy é por localização física. Um item pode estar esgotado para envio em um CEP, mas disponível para retirada em uma loja a 15 km de distância. O endpoint de fulfillment usa o CEP informado (ou inferido do IP) para determinar quais lojas consultar.

Isso cria dois requisitos simultâneos:

  1. IP residencial dos EUA: O Akamai exige um IP que pareça um consumidor real acessando de casa. IPs datacenter são bloqueados rapidamente, como discutido acima.
  2. Geo-targeting por cidade: Para simular um acesso de um CEP específico, o proxy deve estar na mesma área geográfica. Um IP de Nova York consultando disponibilidade para um CEP de Chicago pode receber dados imprecisos ou ser desafiado pelo Akamai.

Com a ProxyHat, você especifica geo-targeting diretamente no usuário do proxy:

# IP residencial em Chicago
http://user-country-US-city-chicago:pass@gate.proxyhat.com:8080

# IP residencial em Nova York
http://user-country-US-city-newyork:pass@gate.proxyhat.com:8080

Consulte a lista completa de localizações suportadas para ver todas as cidades disponíveis.

Tipo de Proxy Origem do IP Detecção Akamai Latência típica Ideal para Best Buy
Datacenter Data centers (AWS, GCP, etc.) Alta — bloqueado em 5-10 reqs ~50ms Não recomendado
Residencial ISPs reais (Comcast, AT&T, etc.) Baixa — se rotacionado com sessões ~200ms Preço e estoque por CEP
Mobile Operadoras móveis (T-Mobile, Verizon) Muito baixa ~300ms Casos de alta sensibilidade

Exemplo Prático em Python com ProxyHat

Vamos construir um pipeline completo: buscar uma página de SKU, extrair o preço do HTML e consultar o endpoint de fulfillment para disponibilidade por CEP. Usaremos curl_cffi para impersonar um navegador Chrome real (necessário para passar pelo Akamai) e a ProxyHat como proxy residencial.

1. Buscar a página de SKU via curl

curl -x http://user-country-US-city-chicago:pass@gate.proxyhat.com:8080 \
  "https://www.bestbuy.com/site/sony-playstation-5-console/6426149.p?skuId=6426149" \
  -H "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
  -H "accept: text/html,application/xhtml+xml" \
  --compressed

2. Buscar e parsear SKU em Python

from curl_cffi import requests
from parsel import Selector
import json

proxy = "http://user-country-US-city-chicago:pass@gate.proxyhat.com:8080"

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                 "AppleWebKit/537.36 (KHTML, like Gecko) "
                 "Chrome/120.0.0.0 Safari/537.36",
    "accept": "text/html,application/xhtml+xml",
    "accept-language": "en-US,en;q=0.9",
}

sku = "6426149"
url = f"https://www.bestbuy.com/site/product/{sku}.p?skuId={sku}"

resp = requests.get(
    url,
    proxies={"http": proxy, "https": proxy},
    impersonate="chrome120",
    headers=headers,
    timeout=30,
)
print(f"Status: {resp.status_code}")

sel = Selector(resp.text)
price = sel.css(".priceView-customer-price span::text").get()
title = sel.css(".sku-title h1::text").get()
print(f"Produto: {title} | Preço: {price}")

3. Consultar disponibilidade por CEP

# Endpoint interno de fulfillment
zip_code = "60601"  # Chicago, IL
fulfillment_url = (
    f"https://www.bestbuy.com/fulfillment/buy/v1/fulfillment"
    f"?skus={sku}&zip={zip_code}&storeId=0"
)

resp2 = requests.get(
    fulfillment_url,
    proxies={"http": proxy, "https": proxy},
    impersonate="chrome120",
    headers={**headers, "accept": "application/json"},
    timeout=30,
)

data = resp2.json()
# Resposta truncada de exemplo:
# {
#   "sku": "6426149",
#   "price": {"currentPrice": 499.99, "regularPrice": 499.99},
#   "availability": {
#     "inStoreAvailability": false,
#     "shippingAvailability": true,
#     "pickupAvailable": true
#   }
# }
print(json.dumps(data, indent=2)[:500])

Esse JSON truncado mostra exatamente o que um Best Buy stock checker precisa: o SKU, o preço atual, se há envio disponível, se há retirada em loja e se há estoque físico. Com isso, você pode monitorar dezenas de SKUs em múltiplos CEPs de forma automatizada.

Rotação de Sessões, Backoff e Paginação

Sessões sticky por CEP

O Akamai rastreia sessões via cookies _abck e bm_sz. Se você rotacionar o IP a cada requisição sem manter a sessão, o Akamai verá um novo IP sem cookies válidos e poderá desafiar. A solução é usar sessões sticky da ProxyHat, que mantêm o mesmo IP de saída por um período:

# Sessão sticky para um CEP específico
session_id = "chi-60601-001"
proxy = f"http://user-country-US-city-chicago-session-{session_id}:pass@gate.proxyhat.com:8080"

Use um session_id diferente por CEP. Isso garante que cada área geográfica tenha sua própria sessão e IP, reduzindo a probabilidade de desafios.

Backoff exponencial em 403

Quando o Akamai retorna 403, não insista. Implemente backoff exponencial com jitter:

import time
import random

def fetch_with_backoff(url, zip_code, max_retries=5):
    for attempt in range(max_retries):
        session_id = f"sk{zip_code}{attempt}"
        user = f"user-country-US-city-chicago-session-{session_id}"
        proxy = f"http://{user}:pass@gate.proxyhat.com:8080"
        try:
            resp = requests.get(
                url,
                proxies={"http": proxy, "https": proxy},
                impersonate="chrome120",
                timeout=30,
            )
            if resp.status_code == 200:
                return resp
            elif resp.status_code == 403:
                wait = (2 ** attempt) + random.uniform(0, 1)
                print(f"403 Akamai — esperando {wait:.1f}s")
                time.sleep(wait)
            else:
                print(f"HTTP {resp.status_code} — tentando novamente")
                time.sleep(1)
        except Exception as e:
            print(f"Erro: {e}")
            time.sleep(2)
    return None

Paginação de categorias

Para descobrir SKUs em massa, percorra as páginas de categoria extraindo data-sku-id de cada item:

category_url = "https://www.bestbuy.com/site/tv-home-theater/tvs/abcat0101000.c"
for page in range(1, 25):
    url = f"{category_url}?cp={page}"
    resp = fetch_with_backoff(url, "60601")
    if not resp:
        break
    sel = Selector(resp.text)
    skus = sel.css(".sku-item::attr(data-sku-id)").getall()
    for sku in skus:
        print(f"Página {page} — SKU: {sku}")
    time.sleep(random.uniform(2, 4))  # delay de cortesia

Mantenha um delay de 2-4 segundos entre páginas. A Best Buy tem aproximadamente 24 produtos por página e categorias com até 50+ páginas, então um crawl completo de uma categoria pode levar alguns minutos — aceitável para um Best Buy price tracker que roda periodicamente.

Ética, Termos de Uso e Quando Usar a API Oficial

Raspar dados públicos de catálogo e preço é uma prática comum e geralmente aceita quando feita com responsabilidade, mas há limites importantes:

  • Dados públicos apenas: Limite-se a preços, disponibilidade e metadados de produto que qualquer visitante veria sem login. Nunca acesse páginas de conta, checkout ou dados pessoais.
  • Sem automação de checkout: Não use proxies para automatizar compras, adicionar ao carrinho ou contornar filas de espera. Isso viola os Termos de Uso da Best Buy e pode configurar violação do CFAA (Computer Fraud and Abuse Act) nos EUA.
  • Respeite o robots.txt: Verifique sempre o robots.txt da Best Buy antes de crawlear. Caminhos marcados como Disallow devem ser evitados.
  • GDPR e CCPA: Se você coleta dados de usuários europeus ou californianos (avaliações, comentários), esteja ciente das obrigações de privacidade sob a GDPR e CCPA. Preços e estoque de produto não são dados pessoais, mas avaliações de usuários podem ser.
  • Rate limiting responsável: Mantenha uma taxa de requisições que não degrade a experiência de outros usuários do site.

Quando a API oficial é suficiente

Se você precisa apenas de preços e metadados de catálogo (sem disponibilidade por loja), a API oficial da Best Buy pode ser suficiente. O tier gratuito oferece até 5 requisições por segundo por chave, o que atende casos de uso de baixo volume. Para monitoramento de alto volume, multi-CEP e disponibilidade em tempo real, raspar o site com proxies residenciais é a abordagem mais completa.

Para mais detalhes sobre configuração de proxies, consulte a documentação oficial da ProxyHat e nossa página de planos e preços. Se você também monitora resultados de busca, confira nosso guia de SERP tracking. Para scraping web em geral, veja nossos casos de uso de web scraping.

Principais Aprendizados

Resumo prático para raspar a Best Buy em 2026:

  • Use proxies residenciais dos EUA com geo-targeting por cidade — datacenter é bloqueado pelo Akamai em 5-10 requisições.
  • Use curl_cffi com impersonate="chrome120" para passar pelo sensor _abck do Akamai.
  • Extraia SKUs das listagens de categoria via data-sku-id e consulte o endpoint /fulfillment/buy/v1/fulfillment para disponibilidade por CEP.
  • Use sessões sticky (-session-xxx) por CEP para manter cookies Akamai válidos.
  • Implemente backoff exponencial em HTTP 403 e delays de 2-4s entre páginas.
  • Limite-se a dados públicos de catálogo e preço — nunca automatize checkout ou acesse páginas de conta.

Com essa arquitetura, você pode monitorar centenas de SKUs em múltiplos CEPs com uma taxa de sucesso acima de 95%, desde que mantenha boas práticas de rotação e respeite os limites do site. A ProxyHat fornece a infraestrutura de IPs residenciais necessária — basta configurar o geo-targeting e as sessões no usuário do proxy.

Pronto para começar?

Acesse mais de 50M de IPs residenciais em mais de 148 países com filtragem por IA.

Ver preçosProxies residenciais
← Voltar ao Blog