Crea un bot de seguimiento de precios en Python (Amazon + Google Shopping)

Descubre productos, rastrea ASINs por precio, guarda el historial en SQLite y avisa de bajadas. Bot completo con el coste real en créditos, agosto 2026.

Un bot de seguimiento de precios tiene cuatro partes: encontrar los productos que vale la pena vigilar, comprobar su precio según un calendario, guardar el historial y avisar a alguien cuando baja. Aquí están las cuatro, con el cálculo de créditos para un tamaño de bot realista.

Paso 1: descubre productos con la búsqueda

Parte de una categoría o palabra clave, no de una lista escrita a mano. El endpoint de búsqueda /amazon devuelve productos orgánicos con asin, price, extracted_price y datos de valoración por 1 crédito por solicitud:

import re

import requests

API_KEY = "faf_live_..."  # tu clave de 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]

Ejecuta esto una vez por categoría para construir tu lista de seguimiento, y luego pasa al endpoint de producto para el seguimiento real. Los resultados de búsqueda pueden reordenarse entre solicitudes; los ASINs no.

Paso 2: rastrea el precio por ASIN

resource=product obtiene la ficha completa de un ASIN, incluyendo precio actual, disponibilidad y vendedor de la 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 devuelve un objeto plano (title, price, ...), no una lista results.
    # Su campo price es una cadena de display, p. ej. "$25.49 with 40 percent savings" (comprobado en 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")

Paso 3: guarda el historial en 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

Paso 4: programa las comprobaciones y avisa de bajadas

Un cron job (o un bucle simple con time.sleep, si no estás en una máquina con cron) que recorre la lista de seguimiento y compara con el último precio guardado:

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)  # cámbialo por email, webhook de Slack, o lo que realmente uses para revisar

Programa run_check(watchlist) como mejor se adapte a tu configuración: cron, un timer de systemd, o un worker programado si lo despliegas en una plataforma serverless. Comprobar unas pocas veces al día es suficiente para la mayoría de productos de consumo; hacerlo cada hora es excesivo salvo que persigas ofertas relámpago específicamente.

Vigilar más allá de Amazon

Amazon no es el único sitio donde se mueve un precio. Para una comprobación de mercado más amplia, pasa el nombre del producto por /serp, Google Search, y lee los resultados orgánicos: qué minoristas se posicionan para el producto, y si ha entrado un nuevo vendedor en los resultados, es una señal útil incluso sin un 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", [])]

Eso cuesta 5 créditos por producto y vale la pena ejecutarlo semanalmente, no a diario: sirve para detectar un nuevo competidor o una baja de catálogo, no para captar una variación de precio cada hora.

¿Cuánto cuesta esto en realidad?

Un bot concreto: 200 ASINs rastreados tres veces al día, más una comprobación de mercado semanal sobre los mismos 200 productos, más 20 búsquedas de descubrimiento al mes para actualizar la lista de seguimiento.

Tarea Solicitudes (30 días) Créditos cada una Créditos (30 días)
Comprobaciones de precio por ASIN (200 x 3/día) 18.000 1 18.000
Comprobación de mercado semanal (200 x 4) 800 5 4.000
Búsquedas de descubrimiento 20 1 20
Total ~22.020

Un pack Growth de $29 (75.000 créditos) lo cubre durante más de tres meses, o un mes de una lista de seguimiento que haya crecido hasta más de 600 ASINs. El plan gratuito (500 créditos, sin tarjeta) es suficiente para ejecutar este mismo bot con una lista de 15 ASINs durante una semana antes de decidir si vale la pena pagar.

En resumen

Descubre con la búsqueda, rastrea con el endpoint de producto, guarda cada comprobación aunque no haya cambiado nada (necesitas el historial para calcular un porcentaje de bajada), y avisa solo al superar un umbral para que no te llegue una alerta por una fluctuación de $0,01. Calcula alrededor de 1 crédito por ASIN por comprobación: a ese ritmo, rastrear cientos de productos a diario cuesta unos pocos dólares por un mes de comprobaciones. Lista completa de parámetros en la documentación.