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.