🟡 Gevorderd — beetje technisch ⏱ 2-3 uur

Automatische rapportage bouwen met n8n en Google Sheets

Stel je voor: elke maandag staat er automatisch een bijgewerkt rapport klaar in Google Sheets, inclusief AI-gegenereerde samenvatting van de belangrijkste trends. In deze handleiding bouw je precies dat, met n8n als automatiseringsmotor.

Tools: n8n (cloud of self-hosted)Google account met Sheets en Drive toegangAnthropic Claude API key (of OpenAI)Databron met API: Google Analytics 4, HubSpot, of een databaseOptioneel: Slack voor het versturen van de samenvatting
Automatische rapportage bouwen met n8n en Google Sheets

Wat je leert in deze handleiding

  • Google Sheets OAuth koppelen aan n8n
  • Data ophalen via HTTP Request van Google Analytics 4 of CRM
  • Data transformeren en berekeningen uitvoeren in n8n Code node
  • Rijen toevoegen aan Google Sheets via de Google Sheets node
  • AI-samenvatting genereren met Claude API
  • Samenvatting opslaan in een specifieke cel van je spreadsheet
  • Workflow inplannen met cron trigger (elke maandag 08:00)
  • Foutafhandeling instellen zodat je een melding krijgt bij problemen

Stel je voor: elke maandag staat er automatisch een bijgewerkt rapport klaar in Google Sheets, inclusief een AI-samenvatting van de drie meest opvallende trends van de afgelopen week. Geen handmatig exporteren, geen kopieerwerk. In deze handleiding bouw je dat systeem in n8n, met Google Analytics 4 als databron en Claude als samenvatter.

Video tutorial: Getting Data In and Out of Google Sheets with n8n (Simple Tutorial): https://www.youtube.com/watch?v=gM1lMFfBgxk

Architectuur van de workflow

De workflow heeft zes stappen. Stap 1: Schedule Trigger start elke maandag om 08:00. Stap 2: HTTP Request haalt data op uit Google Analytics 4 via de Reporting API. Stap 3: Code node berekent week-op-week veranderingen en formatteert de data. Stap 4: Google Sheets node voegt een nieuwe rij toe met de weekdata. Stap 5: HTTP Request naar Claude API genereert een tekstuele samenvatting. Stap 6: Google Sheets node schrijft de samenvatting in cel B2 van het rapport-tabblad.

Stap 1: Google Sheets OAuth instellen in n8n

Ga in n8n naar Settings > Credentials > Add Credential > Google Sheets OAuth2 API. Klik op Connect my account. Je wordt doorgestuurd naar Google om toegang te verlenen. Accepteer en kopieer de credential-naam. Documentatie: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/ Tip: Gebruik een Google service-account voor productie-omgevingen zodat de koppeling niet afloopt als je persoonlijke Google-sessie verloopt.

Stap 2: Schedule Trigger instellen

Voeg een Schedule Trigger node toe. Kies Cron Expression en voer in: 0 8 * * 1 (elke maandag om 08:00 lokale tijd van je n8n server). Test de trigger door op Test workflow te klikken: de workflow wordt dan eenmalig direct uitgevoerd.

# Cron expressie uitleg: 0 8 * * 1 # | | | | | # | | | | dag van de week (1 = maandag) # | | | maand (* = elke maand) # | | dag van de maand (* = elke dag) # | uur (8 = 08:00) # minuut (0 = op het hele uur) # Andere voorbeelden: 0 9 * * 1-5 # weekdagen om 09:00 0 8 1 * * # eerste van elke maand om 08:00

Stap 3: Data ophalen uit Google Analytics 4

Voeg een HTTP Request node toe. Methode: POST. URL: https://analyticsdata.googleapis.com/v1beta/properties/JOUW_GA4_PROPERTY_ID:runReport. Authenticatie: OAuth2 met je Google credential. Body (JSON): zie codeblok hieronder. Vervang PROPERTY_ID door je GA4 property ID (te vinden in GA4 > Admin > Property > Property ID).

// GA4 Reporting API request body: { "dateRanges": [{ "startDate": "7daysAgo", "endDate": "today" }], "metrics": [ {"name": "sessions"}, {"name": "activeUsers"}, {"name": "bounceRate"}, {"name": "averageSessionDuration"} ], "dimensions": [ {"name": "date"} ] }

Stap 4: Data transformeren in Code node

Voeg een Code node toe (JavaScript). Bereken week-totalen uit de dagdata van GA4. Bereid de data voor als een object dat je in Google Sheets kunt wegschrijven. Zie codeblok hieronder voor een werkend voorbeeld.

// Code node: data transformeren const gaResponse = $input.first().json; const rows = gaResponse.rows || []; let totalSessions = 0; let totalUsers = 0; for (const row of rows) { totalSessions += parseInt(row.metricValues[0].value); totalUsers += parseInt(row.metricValues[1].value); } const avgBounceRate = rows.length > 0 ? (rows.reduce((sum, r) => sum + parseFloat(r.metricValues[2].value), 0) / rows.length).toFixed(2) : 0; const weekLabel = new Date().toISOString().split('T')[0]; return [{ json: { week: weekLabel, sessions: totalSessions, users: totalUsers, bounceRate: avgBounceRate, rapportDatum: new Date().toLocaleDateString('nl-NL') } }];

Stap 5: Google Sheets bijwerken

Voeg de Google Sheets node toe. Authenticatie: kies je Google credential. Operatie: Append Row. Selecteer je spreadsheet via de dropdown en kies het tabblad Data. Map de velden van je Code node output naar de kolommen: week, sessions, users, bounceRate, rapportDatum. Zorg dat rij 1 headers heeft (Week, Sessies, Gebruikers, Bounce Rate, Datum) voor leesbaarheid.

[Screenshot: Google Sheets node in n8n met de field mapping: week > Kolom A, sessions > Kolom B, users > Kolom C, bounceRate > Kolom D]

Stap 6: AI-samenvatting genereren met Claude

Voeg een tweede HTTP Request node toe voor de Claude API. POST naar https://api.anthropic.com/v1/messages. Headers: x-api-key: JOUW_KEY, anthropic-version: 2023-06-01. Gebruik de getransformeerde data als context in je prompt.

// Claude API request body in n8n: { "model": "claude-haiku-4-5", "max_tokens": 400, "messages": [{ "role": "user", "content": "Analyseer deze weekdata voor een website en schrijf een samenvatting van 3 alineas in het Nederlands:\n\nWeek: {{$json.week}}\nSessies: {{$json.sessions}}\nUnieke gebruikers: {{$json.users}}\nBounce rate: {{$json.bounceRate}}%\n\nStructuur:\n1. Wat zijn de opvallendste cijfers?\n2. Wat verdient aandacht of lijkt een probleem?\n3. Aanbevolen actie voor deze week.\n\nHoud het beknopt en praktisch." }] }

Stap 7: Samenvatting opslaan in Google Sheets

Voeg een derde Google Sheets node toe. Operatie: Update Cell. Selecteer je spreadsheet en het tabblad Samenvatting (maak dit apart tabblad aan). Cell Range: B2. Value: gebruik de response van Claude (path: content[0].text). Nu staat elke maandag de verse samenvatting in cel B2 van je Samenvatting-tabblad.

Problemen oplossen

Probleem: Google Sheets geeft 403 Forbidden. Oplossing: Controleer of je Google-account eigenaar of editor is van het spreadsheet. Bij gebruik van service-account: deel het spreadsheet met het service-account e-mailadres.

Probleem: GA4 API geeft 'PERMISSION_DENIED'. Oplossing: Voeg je Google-account toe als viewer of editor in GA4 Admin > Account Access Management. De Reporting API vereist minimaal de Viewer-rol.

Probleem: Workflow faalt zonder notificatie. Oplossing: Voeg een Error Trigger node toe aan je workflow. Configureer hem om een Slack-bericht of e-mail te sturen bij fouten. n8n docs: https://docs.n8n.io/flow-logic/error-handling/

n8n Google Sheets node docs: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/ | Google Analytics 4 Reporting API: https://developers.google.com/analytics/devguides/reporting/data/v1 | Anthropic API docs: https://docs.anthropic.com/en/api/getting-started | n8n error handling: https://docs.n8n.io/flow-logic/error-handling/

Nieuwsbrief

Meer handleidingen en tips?

Elke week de beste agentic AI inzichten en nieuwe handleidingen in je inbox.

Gratis aanmelden →