🟡 Gevorderd — beetje technisch ⏱ 2-3 uur n8n

Bouw een AI-gestuurde e-mail classifier in n8n (stap voor stap)

Leer hoe je een AI-agent bouwt die je e-mails automatisch categoriseert, prioriteert en verdeelt over mappen - zonder één regel code te schrijven. We gebruiken n8n als workflow engine en de OpenAI API voor de classificatie.

Tools: n8n (cloud of self-hosted)Gmail of Outlook account met API-toegangAnthropic Claude API key (of OpenAI GPT-4o-mini)Optioneel: Slack voor notificatiesOptioneel: Notion of Google Sheets voor archivering
E-mail inbox met AI classificatie

Wat je leert in deze handleiding

  • Gmail OAuth koppelen aan n8n
  • Nieuwe e-mails automatisch triggeren via Gmail Trigger node
  • E-mailinhoud doorsturen naar Claude API voor classificatie
  • Claude's JSON-response parsen in n8n
  • Gmail-labels automatisch toepassen op basis van classificatie
  • Slack-notificaties sturen voor urgente e-mails
  • Concept-antwoorden laten schrijven door Claude
  • Workflow activeren en live testen

De gemiddelde professional ontvangt 120 e-mails per dag. Een AI-gestuurde e-mail classifier categoriseert ze automatisch, markeert urgente berichten en schrijft conceptantwoorden voor routinevragen. In deze handleiding bouw je dat systeem in n8n met Claude als classificatie-motor.

Video tutorial: N8N + Google Sheets Step-by-Step Setup (bevat ook Gmail integratie): https://www.youtube.com/watch?v=NhoTdQg_YTc | Meer over n8n Gmail node: https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.gmailtrigger/

Stap 1: Categorieën definiëren

Bepaal voor je begint welke categorieën je wilt. Goed werkende categorieën voor een B2B-bedrijf: URGENT (actie vereist binnen 24 uur), KLANT (van bestaande klant, reactie nodig), LEAD (potentiele nieuwe klant), PARTNER (leverancier, samenwerking), ADMINISTRATIEF (facturen, contracten), NIEUWSBRIEF (no-action nodig), SPAM (ongewenste reclame). Houd het bij 5-8 categorieën: meer maakt de classificatie minder accuraat.

Stap 2: Gmail OAuth koppelen in n8n

Ga in n8n naar Settings > Credentials > New Credential > Gmail OAuth2 API. Klik op Connect my account. Autoriseer toegang. Let op: je hebt lees- en schrijftoegang nodig (voor het toevoegen van labels). Als je een Google Workspace-account hebt, vraag je admin om de n8n OAuth app te autoriseren via de Google Admin Console.

Stap 3: Gmail Trigger node instellen

Voeg een Gmail Trigger node toe als eerste node van je workflow. Selecteer je Gmail credential. Stel Poll Times in op elke 5 minuten (voldoende voor de meeste use cases, lager = meer API-calls). Filter: kies alleen nieuwe, ongelezen e-mails (isUnread: true) om al geclassificeerde e-mails niet opnieuw te verwerken. De trigger geeft per e-mail een object terug met subject, from, body (plaintext), date en threadId.

[Screenshot: Gmail Trigger node met Poll Times ingesteld op 5 minuten en filter isUnread: true. De rechterkolom toont een voorbeeld-output met subject, from en body velden.]

Stap 4: Claude API aanroepen voor classificatie

Voeg een HTTP Request node toe. POST naar https://api.anthropic.com/v1/messages. Headers: x-api-key (jouw Claude API key), anthropic-version: 2023-06-01, content-type: application/json. Gebruik claude-haiku-4-5 als model: snel, goedkoop, en voor classificatie meer dan krachtig genoeg (kosten: minder dan 0.01 cent per e-mail).

// HTTP Request body (n8n expressions): { "model": "claude-haiku-4-5", "max_tokens": 150, "messages": [{ "role": "user", "content": "Classificeer deze e-mail in EEN van de volgende categorieën: URGENT, KLANT, LEAD, PARTNER, ADMINISTRATIEF, NIEUWSBRIEF, SPAM.\n\nRegels:\n- URGENT: actie vereist binnen 24 uur\n- KLANT: van bestaande klant\n- LEAD: potentiele nieuwe klant\n- PARTNER: leverancier of samenwerkingspartner\n- ADMINISTRATIEF: factuur, contract, juridisch\n- NIEUWSBRIEF: marketing of updates\n- SPAM: ongewenste berichten\n\nVan: {{$json.from}}\nOnderwerp: {{$json.subject}}\nBericht (eerste 500 tekens): {{$json.body.substring(0, 500)}}\n\nAntwoord ALLEEN met een JSON-object:\n{\"categorie\": \"CATEGORIE\", \"reden\": \"korte toelichting\", \"urgentie\": 1-10}" }] }

Stap 5: Claude response parsen

Voeg een Code node toe na de HTTP Request. Claude geeft de classificatie terug als JSON in content[0].text. Parse dit met onderstaande code. De try-catch zorgt dat de workflow niet crasht als Claude onverwacht iets anders teruggeeft.

// Code node: Claude response parsen const claudeText = $input.first().json.content[0].text; try { // Verwijder eventuele markdown code-blocks const cleaned = claudeText.replace(/```json\n?/g, '').replace(/```/g, '').trim(); const parsed = JSON.parse(cleaned); return [{ json: { ...$input.first().json, classificatie: parsed.categorie || 'ONBEKEND', reden: parsed.reden || '', urgentie: parsed.urgentie || 5 } }]; } catch (e) { // Fallback bij parse-fout return [{ json: { ...$input.first().json, classificatie: 'ONBEKEND', reden: 'Parse fout: ' + claudeText.substring(0, 100), urgentie: 5 } }]; }

Stap 6: Gmail-label toepassen

Maak in Gmail eerst de labels aan die je wilt gebruiken (Settings > Labels > Create new label). Voeg een Gmail node toe met operatie Modify a Message. Selecteer het bericht via Message ID ({{$json.id}}). Voeg het label toe dat overeenkomt met de classificatie. Tip: gebruik een Switch node voor de routing naar het juiste label, of gebruik een Code node om de label-ID dynamisch op te halen.

// Label ID mapping (vind via Gmail API of n8n credential test): const labelMap = { 'URGENT': 'Label_123456', 'KLANT': 'Label_234567', 'LEAD': 'Label_345678', 'PARTNER': 'Label_456789', 'ADMINISTRATIEF': 'Label_567890', 'NIEUWSBRIEF': 'Label_678901', 'SPAM': 'Label_789012' }; const labelId = labelMap[$json.classificatie] || labelMap['ONBEKEND']; return [{ json: { ...$json, labelId } }];

Stap 7: Slack-notificatie voor urgente e-mails

Voeg een IF node toe. Conditie: classificatie is gelijk aan URGENT OF urgentie groter dan of gelijk aan 8. Voeg bij TRUE een Slack node toe. Bericht: ':rotating_light: Urgente e-mail van {{$json.from}}\nOnderwerp: {{$json.subject}}\nReden: {{$json.reden}}\nOpen in Gmail: https://mail.google.com/mail/u/0/#inbox/{{$json.id}}'. Zo heb je altijd een directe melding bij e-mails die snel actie vereisen.

Stap 8: Conceptantwoord genereren (optioneel)

Voor categorieën KLANT en LEAD kun je Claude ook een conceptantwoord laten schrijven. Voeg een tweede HTTP Request node toe, alleen op de TRUE-tak van een IF (categorie is KLANT of LEAD). Geef Claude de e-mail mee plus instructies over jouw bedrijf en schrijfstijl. Sla het concept op als Gmail-draft via de Gmail node met operatie Create Draft.

// Prompt voor conceptantwoord: "Je bent een professionele assistent voor [BEDRIJFSNAAM]. Schrijf een professioneel e-mailantwoord in het Nederlands op de volgende e-mail. Houd het kort (max 3 alineas), vriendelijk en to-the-point. Sluit af met een concrete volgende stap of vraag. Antwoord op e-mail van: {{$json.from}} Onderwerp: {{$json.subject}} Originele bericht: {{$json.body.substring(0, 800)}} Begint met: Beste [naam],"

Veelvoorkomende problemen

Probleem: Gmail Trigger verwerkt dezelfde e-mails meerdere keren. Oplossing: Markeer e-mails als gelezen direct na verwerking via een Gmail node (Modify > Mark as Read). Of gebruik een Google Sheets log: sla verwerkte message IDs op en filter aan het begin van de workflow.

Probleem: Claude classificeert veel e-mails als ONBEKEND. Oplossing: Voeg meer voorbeelden toe aan je prompt ('Voorbeelden: een e-mail van een klant over een factuur is KLANT, een cold outreach is LEAD'). Of verlaag max_tokens en vraag om uitsluitend het JSON-object zonder toelichting.

Probleem: Workflow draait traag (meer dan 30 seconden per e-mail). Oplossing: Gebruik claude-haiku-4-5 in plaats van Sonnet voor classificatie (5x sneller, voldoende voor deze taak). Verwijder onnodige nodes. Controleer of je n8n-instance voldoende resources heeft.

Kosten overzicht

Claude Haiku voor classificatie: circa 200 input-tokens + 50 output-tokens per e-mail = 0.25 cent per e-mail. Bij 100 e-mails per dag: EUR 0.25/dag = EUR 7.50/maand. n8n cloud: gratis tot 5.000 executions/maand, daarna USD 20/maand. Totaal voor een inbox van 100 e-mails/dag: minder dan EUR 30/maand, met een tijdsbesparing van 1-2 uur per dag.

n8n Gmail Trigger docs: https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.gmailtrigger/ | Gmail API referentie: https://developers.google.com/gmail/api | Anthropic API docs: https://docs.anthropic.com | Claude Haiku pricing: https://www.anthropic.com/pricing | n8n cloud: https://app.n8n.io

Nieuwsbrief

Meer handleidingen en tips?

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

Gratis aanmelden →