Quando un addetto al marketing controlla manualmente decine di profili IG pubblici, il problema principale non è il tempo necessario per aprire le pagine, ma l’assenza di una cronologia confrontabile. Un’istantanea mostra il numero di follower di oggi; due istantanee permettono di calcolare la differenza nell’intervallo scelto. Per monitorare i profili in modo semplice, si possono automatizzare le richieste, salvare solo i campi necessari e ottenere una tabella delle variazioni.
Di seguito trovi un esempio minimo funzionante in Python: recupera le informazioni di un profilo a partire dal nome utente tramite l’IG Scraper API e registra una riga JSONL con una marca temporale. Il risultato è una piccola fonte di dati storici che puoi collegare a cron, n8n o a un archivio personalizzato. La descrizione ufficiale dell’endpoint e dei parametri è disponibile nella documentazione dell’IG API.
A quale esigenza risponde un’istantanea quotidiana
Immagina che un team monitori gli account pubblici di marchi o partner e voglia rilevare variazioni nel numero di follower, di post o nello stato di verifica. La pagina mostra i valori correnti, ma non conserva da sola lo stato della settimana precedente. Occorre quindi innanzitutto stabilire quali campi sono importanti e poi salvarli insieme alla data di osservazione.

L’endpoint /v1/user/by/username accetta il parametro obbligatorio username. La risposta include, tra gli altri, follower_count, following_count, media_count, is_verified, is_private e biography. Questi campi sono adatti a un’istantanea del profilo; non comprendono la cronologia dei post e, da soli, non spiegano la causa delle variazioni dei dati.
Lo script ha uno scopo volutamente circoscritto: acquisire un insieme osservabile di campi in un momento definito e confrontarlo con le registrazioni precedenti. In questo modo, per esempio, l’analista può vedere che il numero di follower è cambiato tra due date salvate e procedere a ulteriori verifiche separatamente dalla raccolta automatica.
Prepara la chiave e l’elenco degli account
Installa la libreria per le richieste e imposta la chiave API in una variabile d’ambiente. Non inserire il segreto nel file sorgente, nel repository o nell’output del programma. L’API usa il parametro di query license_key; la libreria qui sotto compone automaticamente la query string.
python -m pip install requests
export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="la_tua_chiave"
Puoi conservare l’elenco dei profili in un file di configurazione o in una variabile del progetto. Per la prima esecuzione basta un nome utente, così puoi verificare la risposta, l’accesso e la scrittura nell’archivio. Nell’esempio, username è impostato come parametro API e la chiave viene letta solo dall’ambiente.
Richiesta e salvataggio di un’istantanea in Python
Lo script controlla la risposta HTTP, lo stato esterno dell’API e la presenza dell’oggetto ig. Poi salva solo i valori effettivamente presenti. Se manca un campo, nella registrazione rimane null: inserire zero significherebbe confondere un valore sconosciuto con uno zero reale.

import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
API_URL = "https://ig.jsonscraper.com/v1/user/by/username"
LICENSE_KEY = os.environ["JSONSCRAPER_INSTAGRAM_LICENSE_KEY"]
USERNAME = "apple" # sostituiscilo con un profilo del tuo elenco
OUTPUT = Path("instagram-profile-snapshots.jsonl")
response = requests.get(
API_URL,
params={"username": USERNAME, "license_key": LICENSE_KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok" or not isinstance(payload.get("ig"), dict):
raise RuntimeError("L’API ha restituito uno stato o una struttura inattesi")
profile = payload["ig"]
record = {
"observed_at": datetime.now(timezone.utc).isoformat(),
"username": profile.get("username", USERNAME),
"pk": profile.get("pk"),
"follower_count": profile.get("follower_count"),
"following_count": profile.get("following_count"),
"media_count": profile.get("media_count"),
"is_verified": profile.get("is_verified"),
"is_private": profile.get("is_private"),
}
with OUTPUT.open("a", encoding="utf-8") as file:
file.write(json.dumps(record, ensure_ascii=False) + "\n")
print("Istantanea salvata:", record["username"], record["observed_at"])
I campi e la struttura dell’esempio corrispondono alle informazioni sul profilo descritte per questo endpoint. Una richiesta riuscita restituisce un’osservazione relativa al momento della chiamata; per analizzare l’andamento, lo script va eseguito più volte e ogni istantanea deve essere salvata. La pagina dell’IG Scraper API mostra una richiesta di base e una risposta di esempio in formato JSON.
Calcola la variazione tra le istantanee
JSONL conserva una registrazione per riga, quindi puoi leggerlo con il modulo standard di Python. Il frammento seguente seleziona le ultime due registrazioni del profilo e calcola la differenza nel numero di follower. Mostra il risultato solo se entrambe le registrazioni contengono un valore numerico.
import json
from pathlib import Path
rows = [
json.loads(line)
for line in Path("instagram-profile-snapshots.jsonl").read_text(encoding="utf-8").splitlines()
]
username = "apple"
profile_rows = [row for row in rows if row.get("username") == username]
profile_rows.sort(key=lambda row: row["observed_at"])
if len(profile_rows) >= 2:
previous, current = profile_rows[-2:]
old = previous.get("follower_count")
new = current.get("follower_count")
if isinstance(old, int) and isinstance(new, int):
print({
"username": username,
"from": previous["observed_at"],
"to": current["observed_at"],
"follower_delta": new - old,
})
La differenza si riferisce esclusivamente alle due osservazioni selezionate. Se si saltano alcune esecuzioni, l’intervallo tra le due sarà più lungo; perciò il rapporto dovrebbe mostrare entrambe le date, invece di definire automaticamente la variazione come «giornaliera». Per lavorare con regolarità, pianifica l’esecuzione con cron o con lo scheduler di una piattaforma cloud. In n8n puoi assemblare lo stesso flusso con nodi per la pianificazione, la richiesta HTTP e la registrazione del risultato in un database o in un foglio di calcolo; i nomi dei nodi e la connessione all’archivio dipendono dalla tua installazione.
Estendi il monitoraggio a più profili
Per un elenco di account, inserisci i nomi in un file separato e scorri l’elenco con un ciclo. Salva separatamente lo stato di ogni richiesta: così un errore relativo a un profilo non cancella i dati recuperati correttamente dagli altri. Aggiungi un timeout, un registro degli errori e ripeti la richiesta solo per gli account per cui è fallita.
Puoi usare pk come chiave della registrazione, se l’API lo restituisce, conservando anche il nome utente per facilitare la lettura. L’identificatore aiuta a distinguere il profilo da un’etichetta testuale nel rapporto; se il valore manca, non va inventato né sostituito con un altro campo. Per l’analisi è utile conservare l’ora originale di raccolta in UTC e definire esplicitamente il periodo di confronto.
Se per il tuo compito è sufficiente recuperare i dati a una determinata frequenza, il parametro documentato cache_timeout consente di specificare la durata della cache in secondi; per IG la cache è disattivata per impostazione predefinita. Scegli la durata in base all’intervallo di monitoraggio e conserva il parametro insieme alle impostazioni di raccolta, così da poter tenere conto dei parametri della richiesta quando interpreti i risultati.
Quale sarà il risultato
Dopo alcune esecuzioni, avrai un file con istantanee temporali dei dati pubblici del profilo e una semplice differenza calcolabile tra le date selezionate. Puoi caricarlo in Google Sheets, PostgreSQL o in un sistema di analisi; un livello di elaborazione separato potrà generare una notifica quando la variazione supera una soglia definita dal team. La soglia è una regola aziendale, non una funzionalità integrata nell’API.
L’endpoint del profilo restituisce campi dell’account: per verificare i nuovi post serve quindi la raccolta dei contenuti, non deduzioni basate su media_count. La documentazione dell’IG API elenca un endpoint separato per i post, con caricamento a pagine tramite user_id e il parametro end_cursor; usalo se il compito richiede di esaminare i post stessi. Per il risultato descritto qui — una tabella storica dei dati del profilo — basta una richiesta per utente, ripetendo il salvataggio delle istantanee.
Inizia con un profilo e due esecuzioni: verifica che lo stato della risposta sia corretto, che le date vengano salvate e che i dati mancanti restino esplicitamente sconosciuti. Poi aggiungi l’elenco degli account e la pianificazione. Otterrai così osservazioni riproducibili, con un intervallo chiaro e i valori originali, verificabili e trasferibili al processo di analisi successivo.