rilasciato // in produzione

Quando GA4 perde i dati, noi li riprendiamo.

01 // il problema

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.

02 // la soluzione

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:

1
Trigger programmato
Cron o esecuzione manuale con date range configurabile
2
GA4 Data API
Chiamata all'API con metriche, dimensioni e filtri dinamici
3
Paginazione e rate limits
Loop automatico sulle pagine, rispetto dei limiti API Google
4
Trasformazione dati
Mapping della risposta API allo schema BigQuery target
5
Export su BigQuery
Insert diretto nelle tabelle partitioned per data
6
Notifica completamento
Conferma via Telegram/email con riepilogo record importati
03 // architettura

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.

n8n workflow // ga4-backfill
Cron Trigger
📅 Date Range
📈 GA4 API
🔄 Paginator
Transform
🗃 BigQuery
💬 Notify

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
// GA4 Data API - Request Body
{
  "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
}
// n8n Code Node - Trasformazione
// 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.

04 // perche n8n

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.

05 // risultati

I numeri parlano

365
giorni recuperati
0
intervento manuale
24/7
check automatici
<5min
per backfill giornaliero

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 LinkedIn
06 // il quadro completo

Dati 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.

pipeline completa // dati → intelligenza
📈 GA4
🔄 n8n Backfill
🗃 BigQuery
🔌 MCP Server
🤖 Claude AI
💡 Insight

"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.

Dati persi anche tu?

Se il tuo export GA4 ha buchi, o se vuoi automatizzare pipeline dati con n8n, parliamone. La prima chiacchierata e sempre gratis.

← torna a galanti.digital