Crie um bot de monitoramento de preços em Python (Amazon + Google Shopping)
Descubra produtos, monitore ASINs por preço, salve o histórico no SQLite e receba alertas de queda. Bot completo com o custo real em créditos.
Um bot de monitoramento de preços tem quatro partes: encontrar os produtos que valem a pena acompanhar, verificar o preço deles em um cronograma, armazenar o histórico e avisar alguém quando o preço cai. Aqui estão as quatro, com a conta de créditos para um tamanho realista de bot.
Passo 1: descubra produtos com busca
Comece a partir de uma categoria ou palavra-chave, não de uma lista digitada à mão. O endpoint de busca /amazon retorna produtos orgânicos com asin, price, extracted_price e dados de avaliação por 1 crédito por requisição:
import requests
API_KEY = "faf_live_..." # sua chave FastAF
def discover(query, domain="com", pages=1):
products = []
for page in range(1, pages + 1):
resp = requests.get(
"https://api.fastaf.co/v1/amazon",
params={"query": query, "domain": domain, "page": page},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
resp.raise_for_status()
products.extend(
item for item in resp.json()["results"]
if item["type"] == "search_product"
)
return products
candidates = discover("mechanical keyboard")
watchlist = [p["asin"] for p in candidates if p.get("stars", 0) >= 4.0]
Execute isso uma vez por categoria para montar sua watchlist, depois passe para o endpoint de produto para o monitoramento de verdade. Os resultados de busca podem mudar de ordem entre requisições; os ASINs não.
Passo 2: monitore o preço por ASIN
resource=product traz a ficha completa de um ASIN, incluindo preço atual, disponibilidade e vendedor do buybox, por 1 crédito:
def check_price(asin, domain="com"):
resp = requests.get(
"https://api.fastaf.co/v1/amazon",
params={"resource": "product", "asin": asin, "domain": domain},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
resp.raise_for_status()
# resource=product devolve um objeto plano (title, price, ...), nao uma lista results.
# O campo price e uma string de exibicao, ex. "$25.49 with 40 percent savings" (verificado em agosto de 2026).
product = resp.json()
match = re.search(r"[\d][\d.,]*", product.get("price") or "")
price = float(match.group().replace(",", "")) if match else None
return price, product.get("title")
Passo 3: armazene o histórico no SQLite
import sqlite3
import time
conn = sqlite3.connect("prices.db")
conn.execute("""
CREATE TABLE IF NOT EXISTS price_history (
asin TEXT,
price REAL,
checked_at INTEGER
)
""")
def record_price(asin, price):
conn.execute(
"INSERT INTO price_history VALUES (?, ?, ?)",
(asin, price, int(time.time())),
)
conn.commit()
def last_price(asin):
row = conn.execute(
"SELECT price FROM price_history WHERE asin = ? ORDER BY checked_at DESC LIMIT 1",
(asin,),
).fetchone()
return row[0] if row else None
Passo 4: agende as verificações e avise sobre quedas
Um cron job (ou um loop simples com time.sleep, se você não estiver em uma máquina com cron) que percorre a watchlist e compara com o último preço salvo:
def run_check(watchlist, threshold_pct=5):
for asin in watchlist:
price, title = check_price(asin)
if price is None:
continue
previous = last_price(asin)
record_price(asin, price)
if previous and price < previous * (1 - threshold_pct / 100):
drop_pct = round((1 - price / previous) * 100, 1)
alert(f"{title}: ${previous:.2f} -> ${price:.2f} ({drop_pct}% off)")
def alert(message):
print(message) # troque por e-mail, webhook do Slack, o que você realmente usar
Agende run_check(watchlist) da forma que fizer mais sentido para você: cron, um timer do systemd, ou um worker agendado se você fizer o deploy disso em uma plataforma serverless. Verificar algumas vezes por dia é suficiente para a maioria dos produtos de consumo; de hora em hora é exagero, a menos que você esteja atrás especificamente de ofertas relâmpago.
Monitorando além da Amazon
A Amazon não é o único lugar onde um preço se move. Para uma checagem de mercado mais ampla, passe o nome do produto pelo /serp, Google Search, e leia os resultados orgânicos: quais varejistas aparecem para o produto, e se um novo vendedor entrou nos resultados, é um sinal útil mesmo sem um feed de shopping dedicado:
def market_check(product_name, country="us"):
resp = requests.get(
"https://api.fastaf.co/v1/serp",
params={"query": f"{product_name} price", "country": country},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
resp.raise_for_status()
return [r["link"] for r in resp.json().get("organic_results", [])]
Isso custa 5 créditos por produto e vale a pena rodar semanalmente, não diariamente: serve para identificar um novo concorrente ou uma retirada de listagem, não para captar uma oscilação de preço horária.
Quanto isso custa de verdade?
Um bot concreto: 200 ASINs monitorados três vezes por dia, mais uma checagem de mercado semanal nos mesmos 200 produtos, mais 20 buscas de descoberta por mês para atualizar a watchlist.
| Tarefa | Requisições (30 dias) | Créditos cada | Créditos (30 dias) |
|---|---|---|---|
| Verificações de preço por ASIN (200 x 3/dia) | 18.000 | 1 | 18.000 |
| Checagem de mercado semanal (200 x 4) | 800 | 5 | 4.000 |
| Buscas de descoberta | 20 | 1 | 20 |
| Total | ~22.020 |
Um pacote Growth de $29 (75.000 créditos) cobre mais de três meses disso, ou um mês de uma watchlist que cresceu além de 600 ASINs. O plano gratuito (500 créditos, sem cartão) é suficiente para rodar exatamente esse bot em uma watchlist de 15 ASINs por uma semana antes de decidir se vale a pena pagar.
Resumindo
Descubra com busca, monitore com o endpoint de produto, salve cada verificação mesmo quando nada mudou (você precisa do histórico para calcular uma porcentagem de queda), e avise só acima de um limite para não ser incomodado por uma oscilação de $0,01. Calcule cerca de 1 crédito por ASIN por verificação: nesse ritmo, monitorar centenas de produtos diariamente custa dólares de um único dígito por um mês de verificações. Lista completa de parâmetros na documentação.