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
_abckque é gerado por um script ofuscado executado no navegador. Esse script coleta dezenas de sinais — canvas fingerprint, WebGL, fontes instaladas, timing de eventos, propriedades donavigator— e os envia de volta como um valor de sensor. Sem um_abckvá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_szvá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:
- 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.
- 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.txtda Best Buy antes de crawlear. Caminhos marcados comoDisallowdevem 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_abckdo Akamai.- Extraia SKUs das listagens de categoria via
data-sku-ide consulte o endpoint/fulfillment/buy/v1/fulfillmentpara 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.






