← Blog

Email automation

Email agent voor offerteaanvragen: groothandel in Nijmegen

Maandag 07:45 in Nijmegen. De verkoopinbox staat op 247 ongelezen offerteaanvragen in drie talen, allemaal te beprijzen tegen een 17 jaar oude Ridder iQ. De agent heeft 90 seconden per thread.

Jacob Molkenboer· Oprichter · A Brand New Company· 14 jun 2026· 8 min
Crème envelop met groen lint op leren onderlegger, carbonkopie-bonnen, koperen presse-papier, rode lakfragment, zijlicht.

De maandag-inbox bij de groothandel vlak bij Bijsterhuizen staat om 07:45 op 247 ongelezen offerteaanvragen. Een paar komen van machinebouwers uit Düsseldorf die prijzen vragen voor 4.000 M10 zeskantbouten klasse 8.8, verzinkt. Een paar komen van een jachtbouwer in Friesland die A4 RVS inbusbouten in kleine aantallen nodig heeft. Een handvol is doorgestuurd vanuit inkoopportals bij Tier-2 automotive suppliers, weggestopt in PDF-bijlages die niemand op de verkoopvloer wil openen voor de eerste koffie.

Het team is eenenveertig man. De catalogus telt zo'n 38.000 actieve SKU's. Het ERP is Ridder iQ, geïnstalleerd in 2009, met custom modules waar bij de oorspronkelijke implementatiepartner niemand meer aan werkt. De meeste offertes kostten een verkoper voorheen tussen de acht en twintig minuten om in elkaar te zetten, afhankelijk van hoeveel artikelen ze met de hand moesten opzoeken en of de artikelnummers van de klant matchten met die in huis.

En dan zijn er nog de Duitse en Engelse threads. Ongeveer 38% van de binnenkomende aanvragen is niet in het Nederlands.

We werden hier in februari naar gevraagd. De opdracht was simpel. Het team verloor een dag per week per verkoper aan concept-offertes. Kon een agent de eerste slag doen?

Dit is wat we bouwden, wat brak, en hoe 90 dagen productie eruitzag.

Het volumeprobleem voor de agent

Wekelijks landen er gemiddeld 1.840 offertethreads in info@ en de vier inboxen van de salesreps samen. Dat getal omvat follow-ups, verduidelijkingen en heroffertes, niet alleen first-touch RFQ's. Ongeveer 60% van de threads is Nederlands, 30% Duits, 10% Engels.

De vorm varieert enorm:

  • Een nette regellijst in de body van de mail geplakt.
  • Een gescande PDF met handgeschreven aantallen in de marge.
  • Een doorgestuurde Excel met vijf tabbladen en een notitie "ZIE TABBLAD 2".
  • Een berichtje van twee regels: "Zelfde als vorige keer maar 2x de M8en".

Voor de agent regelde de verkoopvloer dit door te triagen op afzender. Bekende accounts gingen naar de rep die ze beheerde. Onbekende afzenders kwamen in een gedeelde wachtrij die in een slechte week 30 uur achterliep. De conversie op offertes was prima bij accounts met een vaste eigenaar. In de gedeelde wachtrij stortte hij in, want tegen de tijd dat iemand reageerde, had de klant al besteld bij een concurrent.

De Ridder iQ-beperking

Ridder iQ is een Nederlands ERP dat al sinds eind jaren negentig in de groothandel en maakindustrie zit. Solide systeem. De prijslijst leeft daar. De klantspecifieke staffelkorting leeft daar. De SKU-master, de levertijddata, de kredietblokkades, het orderboek, alles. Je kunt een offerteaanvraag niet correct beantwoorden zonder.

De integratiekant van een 17 jaar oude installatie is wat je zou verwachten. Er is een SOAP-endpoint dat de vorige integrator rond 2014 heeft opgezet voor een webshop-project. Er is een SQL-replica die via een nachtelijke job draait. Er is geen gedocumenteerde REST API. Er is geen gepubliceerd schema voor de staffeltabellen. Er ligt een PDF van 380 pagina's uit de oorspronkelijke implementatie die de ERP-schermen uitlegt, maar niet het datamodel erachter.

We kozen de SQL-replica als read-pad en een kleine Node-service voor het SOAP-endpoint als write-pad. De SOAP-service maakt een concept-verkooporder aan; we laten de agent die nooit als bevestigd posten. Die afsluitklep komt verderop terug.

De pipeline per thread

Elke binnenkomende mail gaat door dezelfde pipeline. We geven onszelf een budget van 90 seconden per thread, van binnenkomst tot opgesteld antwoord.

  1. Taalherkenning en intentclassificatie. Is dit een RFQ, een bestelling, een leveringsvraag, een factuurvraag of ruis? Ongeveer 71% van de inkomende mail is offerteaanvragen. Bestellingen en leveringsvragen gaan naar andere agents die we hier niet behandelen.
  2. Artikel-extractie. Body parsen, PDF-bijlages OCR'en, Excel-bijlages lezen. Klantspecifieke artikelnummers oplossen tegen de eigen catalogus via een vector lookup over historische thread-paren plus de officiële kruisreferentietabel. Hier zit het meeste vieze werk. Een klant die "M10x40 8.8 verzinkt" schrijft en een klant die "BOLT HEX M10 40MM CL8.8 ZN" schrijft willen dezelfde SKU, en allebei vragen ze om wat de spec sheets ISO 4014 noemen.
  3. Account-resolutie. Het domein van de afzender matchen tegen de klantentabel in Ridder. Kredietstatus, betalingsvoorwaarden, staffel-tier en accountspecifieke notities ophalen.
  4. Prijsberekening. Voor elke opgeloste regel de basisprijs opzoeken en de staffelkorting van de klant toepassen op het gevraagde aantal. Volumetiers zijn niet lineair; de klant die om 4.000 M10-bouten vraagt zit in een ander vakje dan de klant die er 800 vraagt.
  5. Conceptantwoord in de taal van de afzender. Drie templates, drie tonen. Nederlands is direct. Duits is formeel en expliciet over levervoorwaarden. Engels zit ertussenin.
  6. Goedkeuringsgate. Ligt de totale orderwaarde onder de €25.000 en is elke regel netjes opgelost, dan landt het concept als kant-en-klaar antwoord in de outbox van de rep. Ligt het boven de €25.000, of is er een regel niet opgelost, dan gaat de thread naar de wachtrij van de salesmanager met een vlag waarom.

Het budget van 90 seconden is geen marketinggetal. Dat is de SLA die we hebben gekozen omdat de machinebouwers in Düsseldorf reactietijd meten en bij de tien minuten een concurrent aanschrijven.

De staffelkorting-rekensom

Dit is het deel waar niemand buiten de Nederlandse groothandel om geeft, en het deel waar het langst werk in zat.

De meeste accounts hebben een basiskorting op lijst, daarna een quantity-multiplier op breekpunten als 250, 1000, 5000 en 25000 stuks per SKU. Sommige accounts hebben een mix-korting waarbij je aantallen optelt over een SKU-familie (alle M10 8.8 zeskantbouten, ongeacht lengte) en de tier toepast op het gecombineerde volume. Een handvol strategische accounts heeft handmatig onderhandelde grids in een custom Ridder-tabel die de oorspronkelijke implementator in 2017 heeft toegevoegd.

De agent probeert hier niet slim over te doen. Hij leest de regel voor het account, past hem toe, en laat zijn werk zien in het concept als een commentaarblok dat de rep ziet maar de klant niet.

// Interne notitie (wordt niet verstuurd)
// Account: 10421 Bauer GmbH, Düsseldorf
// Staffel: family-mix, brackets bij 1000 / 5000 / 25000
// Regel 1: M10x40 8.8 ZN, aantal 4000
//   Familietotaal over thread: 11200 (incl. regels 2, 3)
//   Bracket geraakt: 5000, multiplier 0.78
//   Basis €0,142, finaal €0,111 per stuk
// Regel 2: M10x50 8.8 ZN, aantal 4000
// Regel 3: M10x60 8.8 ZN, aantal 3200

De rep hoeft niets opnieuw uit te rekenen. Hij scant het commentaarblok, besluit dat het klopt, en drukt op verzenden.

De €25k-goedkeuringsgate

De eerste versie van de agent had die niet. We dachten dat een strakke SLA op conceptkwaliteit plus repreview genoeg zou zijn. Dat was zo, voor kleine orders. Voor alles boven de €15.000 begonnen de reps meer tijd te steken in het twijfelen aan het concept dan ze voorheen aan het zelf opstellen kwijt waren.

We voegden de drempel van €25.000 toe op basis van de verdeling van historische orders. Ongeveer 6% van de aanvragen overschrijdt die. Die gaan naar de salesmanager, die het werk van de agent, de staffel-logica en het recente betaalgedrag van de klant beoordeelt voordat de offerte het pand verlaat.

Dit is een feature, geen omweg. Niemand bij de groothandel wil een agent die zonder mens tussen het model en de klant een offerte van 40 stuks koolstofstaal naar een Tier-1 automotive buyer mailt. Een mens tekent af boven een drempel, en de drempel wordt gezet door het bedrijf, niet door het model.

Kern

De SLA van 90 seconden is het eigenlijke product. Het model is een component. Het product is een concept op het scherm van de rep voordat de klant zijn koffie op heeft.

Drie dingen die in productie braken

In volgorde van hoeveel pijn ze deden.

Klantspecifieke artikelnummers

Een klant in Twente bestelt al negentien jaar dezelfde zes SKU's met hun eigen interne codes. We moesten de kruisreferentietabel seeden met hun historische orders voordat de agent ze niet meer als nieuwe artikelen behandelde. Er was geen spec sheet voor de mapping. De mapping zat in het hoofd van de rep die het account sinds 2007 bedient.

Meertalige handtekeningen

Outlook-handtekeningen in de Duitse threads werden steeds als onderdeel van de regellijst OCR'd. "Geschäftsführer Hans Müller" werd even een offerte voor een SKU genaamd MÜLLER. We patchten de parser om alles onder de eerste -- of Mit freundlichen Grüßen over te slaan, met een fallback-heuristiek voor threads zonder ondertekening.

PDF-oriëntatie

Sommige gescande aanvragen komen zijwaarts binnen. De OCR-stap draait en probeert nu opnieuw voor hij extraheert. Achteraf voor de hand liggend, op de dag dat een offerte van €31.000 met een ontbrekende kolom de deur uit ging behoorlijk duur.

Negentig dagen in productie

De agent is live sinds 13 maart. Tot en met 14 juni heeft hij 23.840 offertethreads verwerkt.

  • 71,4% verstuurd door de rep zonder andere bewerking dan een aanhef.
  • 22,1% verstuurd na een kleine aanpassing (meestal een levertijdnotitie of een wijziging in de leverweek).
  • 4,3% door de rep herschreven voor verzending.
  • 2,2% naar de salesmanager-wachtrij onder de €25k-regel.

De mediane reactietijd op first-touch RFQ's ging van 11 uur naar 38 minuten. De verkoopvloer haalde zo'n 4,5 dag aan senior-reptijd per week terug, die nu naar outbound en de strategische-accountgrids gaat.

De hefboom voor je eigen inbox

Als je offertes draait op een ERP dat ouder is dan je verkopers, zit het werk niet in het model. Het werk zit in vier moeilijke dingen op rij: het ERP lezen zonder het te slopen, klantspecifieke artikelnummers oplossen tegen je master, de juiste kortingstier voor het juiste account uitrekenen, en een menselijke check zetten op de bedragwaarde waar een fout echt zeer doet.

Toen we de email agent voor de Nijmeegse groothandel bouwden, was het probleem dat de staffeltabellen in Ridder iQ geen gedocumenteerd schema hadden en drie accounts een custom mix-bracket-regel gebruikten waar niemand in het huidige team van wist. We hebben dat opgelost door twee weken mee te lopen met de senior rep voordat we een regel integratiecode schreven.

De audit van vijf minuten, als je wil zien of jouw inbox een kandidaat is: trek de laatste vier weken mail uit je sales-team-alias, sorteer op taal, tel hoeveel threads first-touch RFQ's zijn, en kijk naar je mediane time-to-first-reply. Zit dat getal boven de vier uur en kopen je klanten bij de acht minuten al bij de concurrent, dan is het gat het product.

Kern

De SLA van 90 seconden is het product. Het model is een component. Een concept staat op het scherm van de rep voordat de koffie van de klant koud is.

FAQ

Hoe gaat de agent om met artikelnummers van klanten die niet matchen met de eigen catalogus?

Hij draait een vector lookup over de historische orders van de klant plus de officiële kruisreferentietabel. Nieuwe klanten zonder historie worden bij het eerste contact handmatig door een rep gemapt, waarna de mapping wordt geleerd.

Waarom een goedkeuringsdrempel van €25.000 en geen percentage van de orderwaarde?

Het getal komt uit de verdeling van historische orders. Ongeveer 6% van de aanvragen overschrijdt het, wat de salesmanager de juiste belasting geeft zonder dat de gate een bottleneck wordt.

Werkt dit ook met een ERP dat helemaal geen API heeft?

Ja, maar je hebt een leespad nodig. Een SQL-replica, een nachtelijke export of een SOAP-endpoint volstaat allemaal. De agent moet de prijslijst en klantvoorwaarden live kunnen lezen, anders kloppen de offertes niet.

Wat doet de agent met PDF- en Excel-bijlages?

PDF's gaan door OCR met rotatie-correctie. Excels worden tab voor tab geparsed met een heuristiek op tabbladnaam. Beide voeden dezelfde extractiestap voor regels als de body van de mail.

email automationai agentscase studyintegrationsworkflowprocess automation

Iets bouwen?

Start een project