Monitorare le menzioni di brand e concorrenti con la Google News API

Interroga un set di query a intervalli regolari, deduplica sul link di ogni articolo, e vedi solo cosa è cambiato rispetto alla volta precedente. Testato su una risposta reale ad agosto 2026.

Vuoi sapere quando la tua azienda, il tuo prodotto o un concorrente vengono menzionati nelle notizie. Google Alerts fa già qualcosa del genere, ma arriva come email secondo i tempi di Google, mescolata nella tua inbox con tutti gli altri alert che hai attivi, e non c’è niente a cui agganciare uno script. Quello che vuoi davvero è una query che controlli tu, sul tuo schedule, che ti dica solo cosa è cambiato dall’ultima volta che hai controllato.

Cosa restituisce /v1/news

Manda una query a /v1/news e ricevi news_results, una lista di articoli con title, snippet, source (il nome della testata, non un dominio), url, e un campo chiamato lastUpdated. Abbiamo eseguito questa chiamata sulla frase “web scraping api” scrivendo questo post, ad agosto 2026, e sono tornati 10 articoli per 5 crediti, da fonti tra cui 24-7 Press Release Newswire, HackerNoon e KDnuggets. Nel tuo caso la query sarà il nome del tuo brand, del tuo prodotto, o il nome di un concorrente.

Il problema di “dall’ultima esecuzione”

Il modo ovvio per trovare articoli nuovi è confrontare lastUpdated con l’ultima volta che hai interrogato l’endpoint. Non farlo così. Nel nostro campione, lastUpdated è tornato come “2 days ago” per un articolo e “May 12, 2026” per un altro, nella stessa risposta. Google News mescola formati relativi e assoluti a seconda di quanto è recente un articolo, e per interpretare correttamente “2 days ago” devi sapere esattamente quando è partita la richiesta, in quale fuso orario, e rifare quel calcolo ogni volta.

Il campo url funziona meglio come chiave di deduplicazione, anche se non è il link nudo della testata. È un percorso di redirect relativo di Google, che inizia con /goto?url=, non qualcosa che mostreresti a un lettore così com’è, ma ogni articolo nella risposta ne riceve uno diverso, che è esattamente ciò che serve a una chiave di deduplicazione. Tieni su disco un insieme di valori url già visti, e tratta come nuovo tutto ciò che non c’è dentro.

Interrogalo come un job pianificato

import json
import requests

API_KEY = "faf_live_..."  # la tua chiave FastAF
SEEN_FILE = "seen_articles.json"

def fetch_news(query):
    resp = requests.get(
        "https://api.fastaf.co/v1/news",
        params={"query": query, "results": 10},
        headers={"Authorization": f"Bearer {API_KEY}"},
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()["news_results"]

def load_seen():
    try:
        with open(SEEN_FILE) as f:
            return set(json.load(f))
    except FileNotFoundError:
        return set()

def save_seen(seen):
    with open(SEEN_FILE, "w") as f:
        json.dump(sorted(seen), f)

seen = load_seen()
new_articles = []

for term in ["Acme Robotics", "Acme Robotics recall"]:
    for article in fetch_news(term):
        link = article["url"]
        if link in seen:
            continue
        seen.add(link)
        new_articles.append((term, article))

save_seen(seen)

for term, a in new_articles:
    print(f'[{term}] {a["source"]} ({a["lastUpdated"]}): {a["title"]}')

Esegui questo da cron, o qualunque scheduler tu già usi, una volta all’ora o una volta al giorno. La prima esecuzione stampa tutto, perché seen_articles.json non esiste ancora. Ogni esecuzione successiva stampa solo gli articoli il cui url non era già nel file: niente rilettura delle menzioni di ieri, nessuna email digest da scorrere, solo ciò che è nuovo.

Cosa non fa

Questo interroga l’indice notizie di Google, non un firehose di tutto ciò che viene pubblicato ovunque. Se una testata non è indicizzata da Google News, una menzione lì non comparirà per quanto spesso tu interroghi l’endpoint, perché l’endpoint vede lo stesso indice che vedrebbe una persona sulla pagina dei risultati. Interrogare più spesso riduce il ritardo tra la pubblicazione e l’indicizzazione da parte di Google; non aggiunge fonti che Google News non ha già.

Quanto costa

Una chiamata costa 5 crediti. Monitorare tre termini a distanza di un’ora è 72 chiamate al giorno, 360 crediti al giorno, circa 10.800 crediti al mese: i 20.000 crediti del pacchetto Starter da $10 ne coprono quasi due mesi, e i 75.000 del pacchetto Growth da $29 quasi sette. Le richieste fallite non vengono addebitate, quindi sbagliare i termini di query qualche volta non costa niente.

Inizia con il piano gratuito, 500 crediti senza carta, cioè 100 chiamate: abbastanza per far girare qualche termine per un giorno e vedere come appare davvero il tuo mercato su Google News prima di impegnarti su uno schedule.