Costruisci un bot di monitoraggio prezzi in Python (Amazon + Google Shopping)

Scopri prodotti, monitora ASIN per prezzo, salva lo storico in SQLite e avvisa sui cali. Un bot prezzi completo con il costo reale in crediti per prodotto, agosto 2026.

Un bot di monitoraggio prezzi ha quattro parti: trovare i prodotti da tenere d’occhio, controllarne il prezzo su una pianificazione, salvare lo storico, e avvisare qualcuno quando cala. Ecco tutte e quattro, con i conti in crediti per una dimensione realistica di bot.

Passo 1: scopri i prodotti con la ricerca

Parti da una categoria o una parola chiave, non da una lista scritta a mano. L’endpoint di ricerca /amazon restituisce prodotti organici con asin, price, extracted_price e dati sulla valutazione per 1 credito a richiesta:

import re

import requests

API_KEY = "faf_live_..."  # la tua chiave 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]

Esegui questo una volta per categoria per costruire la tua watchlist, poi passa all’endpoint prodotto per il monitoraggio vero e proprio. I risultati di ricerca possono riordinarsi tra una richiesta e l’altra; gli ASIN no.

Passo 2: monitora il prezzo per ASIN

resource=product estrae la scheda completa per un ASIN, incluso prezzo attuale, disponibilità e venditore in buybox, per 1 credito:

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 restituisce un oggetto piatto (title, price, ...), non una lista results.
    # Il campo price e' una stringa da mostrare, tipo "$25.49 with 40 percent savings" (verificato agosto 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: salva lo storico in 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: pianifica i controlli e avvisa sui cali

Un cron job (o un semplice ciclo con time.sleep, se non sei su una macchina con cron) che scorre la watchlist e confronta con l’ultimo prezzo salvato:

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)  # sostituisci con email, webhook Slack, quello che controlli davvero

Pianifica run_check(watchlist) come preferisci: cron, un timer systemd, o un worker pianificato se lo distribuisci su una piattaforma serverless. Controllare qualche volta al giorno basta per la maggior parte dei beni di consumo; ogni ora è eccessivo a meno che tu non stia inseguendo offerte lampo specificamente.

Monitorare oltre Amazon

Amazon non è l’unico posto dove un prezzo si muove. Per un controllo di mercato più ampio, passa il nome del prodotto attraverso /serp, Google Search, e leggi gli annunci organici: quali rivenditori si posizionano per il prodotto, e se un nuovo venditore è entrato nei risultati, è un segnale utile anche senza un feed shopping dedicato:

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", [])]

Costa 5 crediti a prodotto e vale la pena eseguirlo settimanalmente, non ogni giorno: serve a individuare un nuovo concorrente o un delisting, non a catturare un’oscillazione di prezzo oraria.

Quanto costa davvero?

Un bot concreto: 200 ASIN monitorati tre volte al giorno, più un controllo di mercato settimanale sugli stessi 200 prodotti, più 20 ricerche di scoperta al mese per aggiornare la watchlist.

Job Richieste (30 giorni) Crediti ciascuna Crediti (30 giorni)
Controlli prezzo ASIN (200 x 3/giorno) 18.000 1 18.000
Controllo mercato settimanale (200 x 4) 800 5 4.000
Ricerche di scoperta 20 1 20
Totale ~22.020

Un pacchetto Growth da $29 (75.000 crediti) ne copre più di tre mesi, oppure un mese di una watchlist cresciuta oltre i 600 ASIN. Il piano gratuito (500 crediti, senza carta) basta per far girare esattamente questo bot su una watchlist di 15 ASIN per una settimana prima di decidere se vale la pena pagare.

La versione breve

Scopri con la ricerca, monitora con l’endpoint prodotto, salva ogni controllo anche quando niente è cambiato (ti serve lo storico per calcolare una percentuale di calo), e avvisa solo oltre una soglia così non vieni disturbato per un’oscillazione di $0,01. Metti in conto circa 1 credito per ASIN per controllo: a quel ritmo, monitorare centinaia di prodotti ogni giorno costa dollari a una cifra per un mese di controlli. Lista completa dei parametri nella documentazione.