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/
Handige links
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/