Quando GA4 perde i dati, noi li riprendiamo.
GA4 e il mistero dei dati scomparsi
Alzi la mano chi non ha mai aperto BigQuery, lanciato una query sul dataset GA4 e trovato buchi. Giorni interi senza eventi. Settimane scomparse. Il cliente chiede i dati del trimestre scorso e tu stai li a spiegare che "GA4 ha avuto un problema di export".
Il BigQuery Export di GA4 e fantastico quando funziona. Ma quando non funziona, non ti avvisa. Non c'e un alert, non c'e un retry automatico. I dati semplicemente non ci sono. E il bello? Google non offre un modo nativo per recuperarli retroattivamente.
La soluzione manuale? Andare nella UI di GA4, esportare report uno per uno, copiare i dati, ricostruire le tabelle BigQuery a mano. Per 365 giorni. No grazie.
Il punto: l'export BigQuery di GA4 puo fallire silenziosamente. Se non monitorizzi attivamente, perdi dati storici senza accorgertene. E quando te ne accorgi, e troppo tardi per il backfill nativo.
n8n fa il lavoro sporco
Invece di scrivere l'ennesimo script Python "usa e getta" che poi nessuno mantiene, abbiamo scelto n8n - una piattaforma di workflow automation open-source che gira su Docker. Perche? Perche un workflow visuale si debugga, si modifica e si capisce anche tra sei mesi. Uno script Python no.
Il workflow e semplice nella logica, robusto nell'esecuzione:
Sotto il cofano
L'intera infrastruttura gira su una singola VPS. Niente cloud managed da 200 euro/mese, niente serverless con cold start. Docker, PostgreSQL, e n8n che orchestra tutto.
Stack tecnico
- n8n su Docker (container dedicato, PostgreSQL come backend)
- GA4 Data API v1beta - runReport endpoint con metriche aggregate
- BigQuery - tabelle partitioned per data, schema allineato all'export nativo
- Error handling - retry con backoff esponenziale, timeout management
- Scheduling - cron configurabile, override manuale con date personalizzate
- Monitoring - log strutturati, alert su failure via Telegram
{
"dateRanges": [{
"startDate": "2024-01-01",
"endDate": "2024-12-31"
}],
"metrics": [
{ "name": "sessions" },
{ "name": "totalUsers" },
{ "name": "screenPageViews" },
{ "name": "conversions" }
],
"dimensions": [
{ "name": "date" },
{ "name": "sessionSource" },
{ "name": "sessionMedium" }
],
"limit": 10000,
"offset": 0
}
// Mappa la risposta GA4 API allo schema BigQuery const rows = $input.all().flatMap(item => { const report = item.json.reports[0]; return report.rows.map(row => ({ json: { event_date: row.dimensionValues[0].value, source: row.dimensionValues[1].value, medium: row.dimensionValues[2].value, sessions: parseInt(row.metricValues[0].value), users: parseInt(row.metricValues[1].value), pageviews: parseInt(row.metricValues[2].value), conversions: parseInt(row.metricValues[3].value), _backfilled: true, _backfill_ts: new Date().toISOString() } })); }); return rows;
Il campo _backfilled: true e fondamentale. Ci permette di distinguere i dati recuperati dall'API da quelli arrivati tramite l'export nativo. Cosi in fase di analisi sappiamo sempre da dove vengono i numeri.
Python? No grazie, oggi no.
Non ce l'ho con Python. Lo uso tutti i giorni. Ma per questo tipo di automazione, n8n vince su tutta la linea. Ecco perche:
| Script Python | n8n Workflow | |
|---|---|---|
| Debug | Print statements, logging | Visual, step-by-step, dati live |
| Scheduling | Crontab + systemd | Built-in, configurabile da UI |
| Error handling | Try/catch manuali | Retry automatici, error workflows |
| Manutenzione | Leggere codice tra 6 mesi | Workflow visuale autoesplicativo |
| Notifiche | SMTP, librerie esterne | Nodi Telegram/Email nativi |
| Comprensione | Solo sviluppatori | Anche i non-dev capiscono il flusso |
E poi c'e il vantaggio nascosto: sulla stessa istanza n8n girano gia decine di altri workflow — automazioni, integrazioni con Telegram, pipeline dati, AI. È tutto un ecosistema connesso. Un nuovo workflow e un nuovo nodo nella rete, non un altro script isolato da mantenere.
I numeri parlano
Una volta configurato, il workflow gira da solo. Ogni giorno controlla se ci sono gap nell'export BigQuery e, se trova buchi, fa il backfill automatico. Il tutto senza che nessuno debba alzare un dito.
Ho condiviso questo approccio su LinkedIn e la risposta della community analytics e stata forte. Molti lavorano con GA4 e BigQuery ma pochi hanno automatizzato il backfill. Il post ha generato discussioni interessanti su alternative e best practice.
Vedi il profilo su LinkedInDati completi = AI che funziona
Ecco il plot twist. I dati backfillati non restano li a prendere polvere in BigQuery. Diventano il carburante per l'AI.
Abbiamo collegato BigQuery direttamente a Claude Code via MCP (Model Context Protocol). Questo significa che l'AI puo interrogare i dati storici completi - compresi quelli recuperati con il backfill - in linguaggio naturale.
"Analizza il trend delle conversioni organiche degli ultimi 12 mesi." Con dati incompleti, questa domanda e inutile. Con il backfill, la risposta e affidabile.
Tutto si connette: il backfill GA4 alimenta BigQuery, BigQuery alimenta l'AI, l'AI produce insight che guidano le decisioni. Ogni pezzo della pipeline ha un ruolo. Nessun dato perso, nessun buco nell'analisi.
Se il tuo export GA4 ha buchi, o se vuoi automatizzare pipeline dati con n8n, parliamone. La prima chiacchierata e sempre gratis.