← Blog

Email automation

Email automation: 2.180 briefings per week, nul conflicten

Hoe een Amsterdams reclamebureau van 29 mensen 2.180 briefings per week routeert via een elf jaar oud Teamleader-CRM en een Notion-archief, met elk DPG-conflict in vier minuten gevangen.

Jacob Molkenboer· Oprichter · A Brand New Company· 20 jun 2026· 9 min
Messing brievenrek met crèmekleurige enveloppen en linnen tabs op ivoren bureau, één met groen lint.

Op een dinsdagochtend in maart opende de operations lead van een Amsterdams reclamebureau van 29 mensen haar laptop met 412 ongelezen mails in de gedeelde briefing-inbox. Tegen vijven zouden het er ruwweg 540 zijn. In een normale week slokt die inbox 2.180 briefing-mails op, en tot vorige zomer werd elke mail met de hand getrieerd.

Het bureau werkt voor het soort klanten dat je kent. Dat is het probleem, niet de opschepperij. Meerdere van die klanten concurreren met merken van DPG Media, en het contract van het bureau met een van zijn grootste accounts zegt, in gewoon Nederlands, dat geen enkele briefing waarin een DPG-titel wordt genoemd geopend, gearchiveerd of beantwoord mag worden zonder eerst een gedocumenteerde conflictcheck. Vergeet die stap één keer en je bent het account kwijt.

Dit is het verhaal van de agent die we voor die inbox bouwden.

De stack die we aantroffen

Twee systemen, elk met elf jaar spiergeheugen ingebakken.

Het eerste is Teamleader Focus, een Belgisch CRM dat het bureau sinds 2014 gebruikt. Custom fields hebben zich opgestapeld over drie accountmanagers en twee operations leads. De "client"-entity heeft 41 velden. Een stuk of zeven worden consistent ingevuld. De rest is folklore.

Het tweede is een Notion-archief dat het team in 2019 zelf bouwde, toen ze doorhadden dat het CRM de textuur van een creatieve briefing niet kon vasthouden. Elke briefing die ooit is opgeleverd, elke pitch, elke kill-fee, elke "we hebben dit afgeslagen vanwege capaciteit"-notitie leeft in Notion, geordend per klant, dan per jaar, dan per merk. Zo'n 7.400 pagina's, en er komen er per week ongeveer 30 bij.

Elke agent die met die inbox wilde helpen, moest beide systemen lezen en beide wereldbeelden respecteren. Teamleader bewaart de contractuele waarheid. Notion bewaart het institutionele geheugen. Geen van beide weet wat de ander weet.

De klok van vier minuten

We legden één harde SLA vast voordat we een regel code schreven: vanaf het moment dat er een briefing-mail binnenkomt, heeft de agent vier minuten om te bepalen of hij er überhaupt iets mee mag. Dat getal is niet willekeurig. De accountmanagers van het bureau kijken overdag ongeveer elk kwartier in de inbox. Als de agent binnen vier minuten kan sorteren, classificeren en óf parkeren óf een concept schrijven, ziet een accountmanager alleen nog mails die al in de juiste bak staan.

De pipeline ziet er zo uit:

inbox webhook
  → classifier (is this a briefing? a quote? a newsletter?)
  → entity extraction (sender domain, brand mentions, deadlines)
  → CRM match (Teamleader client_id, or null)
  → archive search (last 18 months of Notion briefs for this brand)
  → conflict check (DPG brand graph + contract exclusions)
  → route: queue | draft | escalate

De classifier is een klein, fine-tuned model dat draait op Nederlandse onderwerpregels en de eerste 300 tekens van de body. Hij heeft het in ongeveer 96% van de gevallen bij het juiste eind, wat prima klinkt totdat je bedenkt dat 4% van 2.180 neerkomt op 87 verkeerd geclassificeerde mails per week. Dus niets wat de classifier raakt gaat autonoom ergens naartoe zonder een tweede check.

De belangenconflict-queue

Dit is het stuk dat zijn geld waard is.

DPG Media bezit ergens boven de veertig Nederlandse en Belgische titels. De Volkskrant. Het Parool. AD. Trouw. Tweakers. Independer. Een hoop merken die een marketeer niet meteen aan dezelfde eigenaar zou koppelen. De uitsluitingsclausule van het bureau zegt niet "geen DPG". Hij zegt "geen titels in de DPG-portfolio op het moment van contractondertekening, plus elke nadien overgenomen titel binnen 90 dagen na openbare bekendmaking van de overname." In die zin staat een datum. Daar hoort een merkengraph bij die weet wanneer elke overname is afgerond.

Die graph houden we bij als een klein, geversioneerd JSON-bestand in de repo, dat per kwartaal wordt bijgewerkt door een juridisch medewerker van het bureau. De agent doet een deterministische lookup tegen dat bestand voordat er een LLM-call aan de briefing raakt. Als het afzenderdomein, een URL in de body, of een van de uit de briefing geëxtraheerde merknamen matcht met een DPG-portfolio-entry, gaat de mail direct in een belangenconflict-queue en krijgt de accountmanager een Slack-melding.

Mediane tijd van binnenkomst tot plaatsing in de queue, gemeten over de afgelopen 90 dagen: drie minuten en tweeënveertig seconden. Tot nu toe elke keer binnen de SLA van vier minuten.

Waarschuwing

Als je conflictcheck afhangt van een LLM die "weet" welke merken bij welke eigenaar horen, lever je vroeg of laat een verkeerd antwoord. Merkportfolio's veranderen. Modellen zijn outdated. Conflictlogica hoort in code die je kunt grep-pen, niet in een prompt die je op gevoel checkt.

De capaciteitsbevestiging opstellen

Voor briefings die door de conflictcheck heen komen en bij een bekende klant horen, schrijft de agent een capaciteitsbevestiging: een kort Nederlands antwoord dat de ontvangst bevestigt, de senior creatief noemt die het project gaat trekken, en op basis van de huidige studiobezetting een realistische datum geeft voor het eerste concept.

Het concept moet voldoen aan de DDMA-gedragscode, die onder meer voorschrijft hoe Nederlandse marketingcommunicatie omgaat met persoonsgegevens, opt-outs en de identiteit van de afzender. Voor ons gaat het om de transparantie-clausules: het antwoord moet duidelijk maken dat een mens verantwoordelijk is voor het project, ook als een agent de eerste versie van de mail schreef. Elk concept eindigt met de volledige naam en het directe telefoonnummer van de betrokken accountmanager. Niets wordt autonoom verstuurd.

Het concept staat als voorgevuld antwoord in de outbox van de accountmanager. Ze leest het, past het aan als ze dat wil, drukt op verzenden. Over de eerste acht weken in productie ging ruwweg 81% van de concepten zonder enige aanpassing de deur uit, nog eens 14% met cosmetische aanpassingen, en de overige 5% werd vanaf nul herschreven. De herschrijvingen clusteren rond briefings van nieuwe klanten waarvan de agent de toon nog niet heeft geleerd.

De eerste versie die we weggooiden

De eerste versie van de agent deed alles in één grote LLM-call. De mail lezen, de klant opzoeken, de merkengraph checken, de route bepalen, het antwoord opstellen. In de demo werkte hij. In productie viel hij binnen een week om.

Het waren precies de fouten die je zou verwachten. Het model routeerde met overtuiging een briefing van een klein modemerk naar de conflict-queue omdat in één alinea "Tweakers" als doelgroep werd genoemd. Hij schreef een capaciteitsbevestiging met een projectleider erin die drie maanden eerder al was vertrokken, omdat die naam op de meest recente Notion-pagina voor die klant stond. Plausibele antwoorden, foute antwoorden.

De vorm waar we op uitkwamen, scheidt het deterministische en het generatieve netjes. Conflictchecks, CRM-lookups, capaciteitsberekeningen: code. Het classificeren van dubbelzinnige onderwerpregels, het genereren van het conceptantwoord, het samenvatten van de briefing voor de accountmanager: model. Elke stap schrijft naar een gestructureerde log, zodat we elke beslissing van de agent kunnen terugspelen.

# pseudocode of the routing step
def route(email):
    parsed = extract_entities(email)        # deterministic
    client = teamleader.match(parsed)       # deterministic
    if conflict_check(parsed, client):      # deterministic, against the graph
        return queue("conflict-of-interest", reason=conflict_check.reason)
    if client is None:
        return queue("unknown-sender", draft=summary_for_human(email))
    return queue("ready-to-confirm", draft=draft_confirmation(email, client))

Scope vóór vermogen

De belangenconflict-queue bestaat omdat er een soort mail is die deze agent niet mag aanraken. Niet omdat het model het niet aankan. Maar omdat de prijs van één keer ernaast zitten een verloren account is en een probleem in de vorm van een toezichthouder. De discipline is niet "wat kan de agent doen." Maar "wat mag de agent nooit doen, en hoe maken we die grens zichtbaar in de code."

Elke agent die we hebben opgeleverd had een scope-vraag die zwaarder woog dan welke vraag over functionaliteit dan ook. De scope-vraag eerst beantwoorden, dat houdt de vraag over functionaliteit eerlijk. In een inbox waar één verkeerd geopende mail je een klant kost, is scope geen voetnoot bij het architectuurdiagram. Scope ís het architectuurdiagram.

Takeaway

Conflictlogica in code, conceptlogica in het model, en een SLA van vier minuten die de eigenaar van de inbox voelt. Niets wat de agent beslist mag onzichtbaar zijn voor de mens die de gevolgen draagt.

Wat er veranderde voor het team

Voorheen: de operations lead besteedde de eerste 90 minuten van elke dag aan het triëren van de inbox. Accountmanagers kregen briefings in batches, twee keer per dag, vaak nadat de potentiële klant al naar huis was. Conflicten werden meestal opgemerkt. "Meestal" was de bron van twee late-avond-gesprekken per jaar die niemand wilde voeren.

Nu: om negen uur 's ochtends is de inbox in feite leeg omdat alles al is gesorteerd. Accountmanagers zien briefings binnenkomen, met een conceptantwoord erbij. De operations lead besteedt die 90 minuten aan echte operations. Over de eerste zestien weken in productie markeerde de agent 23 conflicten die het team anders met de hand had moeten opvangen. Drie daarvan zou een mens hoogstwaarschijnlijk hebben gemist.

Het team werd niet kleiner. Niemand is hierdoor aangenomen of ontslagen. Het werk verschoof van "elke mail openen" naar "over elke mail beslissen," wat de senior mensen sowieso al hoorden te doen.

De kleinste versie die het waard is om te bouwen

Je hoeft niet het hele ding te bouwen om te ontdekken of dit voor jou werkt. Kies die ene beslissing in je inbox die jou het meest kost als ze fout gaat, conflictchecks, leverancier-versus-klant onderscheid, urgent-versus-routine, en schrijf hem als regel, niet als prompt. Draai hem tegen het archief van vorige maand. Tel de verschillen tussen de regel en wat je team daadwerkelijk deed. Dat gat is de briefing voor de agent.

Toen we de email-agent voor dit reclamebureau bouwden, liepen we ertegenaan dat de belangenconflict-logica niet op dezelfde plek kon wonen als de concept-generatielogica zonder dat de een de ander corrumpeerde. We hebben dat opgelost door de agent te splitsen in een deterministische router en een generatieve drafter, en de merkengraph in een bestand te zetten dat de juridisch medewerker van het bureau zelf kan bewerken. Als je naar een vergelijkbare inbox kijkt, is dat de vorm waar we nu standaard naar grijpen in ons werk met AI-agents.

Kern

Conflictlogica in code die je kunt grep-pen, niet in een prompt die je op gevoel checkt. Onomkeerbare beslissingen horen daar waar de mens die de gevolgen draagt ze kan zien.

FAQ

Waarom zet je de conflictcheck in code in plaats van het model dat te laten doen?

Merkportfolio's veranderen en de kennis van modellen veroudert. Een geversioneerd JSON-bestand dat de juridisch medewerker van het bureau bijwerkt, is controleerbaar, te grep-pen en alleen fout als een mens een fout maakt.

Hoe gaat de agent om met een briefing van een merk dat hij nog nooit heeft gezien?

Hij draait nog steeds de conflictcheck tegen de DPG-merkengraph en routeert de mail vervolgens naar een unknown-sender-queue met een samenvatting van één alinea voor de accountmanager, in plaats van een antwoord op te stellen.

Mag het automatisch opstellen van een Nederlands antwoord volgens de DDMA-gedragscode?

Opstellen mag. Versturen zonder een mens met naam erop niet. Elk concept staat in de outbox van de accountmanager met haar naam en telefoonnummer erop, en zij drukt op verzenden.

Wat gebeurt er als Teamleader Focus en Notion het oneens zijn over wie de klant is?

Voor contractuele velden zoals client_id en uitsluitingsclausules wint Teamleader. Voor toon, projecthistorie en wie de vorige briefing leidde, wint Notion. De agent overschrijft nooit een van beide systemen.

email automationai agentscase studyintegrationsoperationsworkflow

Iets bouwen?

Start een project