← Blog

E-commerce

Returns-agent unit economics: 13 misrekeningen in je marge

Een Returnly-extensie geoffreerd op €58k per jaar. Een Sonnet plus PostNL cache build voor een derde. Dertien plekken waar je marge-spreadsheet stil tegen je liegt.

Jacob Molkenboer· Oprichter · A Brand New Company· 21 jun 2026· 9 min
Koperen weegschaal op ivoorpapier, drie pakjes met touw links, groene kaart rechts, register met rood lakzegel.

Het is zondagavond in Utrecht. Een founder van een accessoiremerk met €4M ARR staart naar een PDF op haar tweede monitor: een offerte van een Returnly-partner voor hun 'AI-gedreven returns-agent' extensie — fraude, eligibility, alles erop en eraan — €58.000 per jaar, drie maanden build, vastgeklikt in de webhook-envelope van het platform. Q1 sloot net af op 9.200 retouren. De board call is dinsdag. Ze opent haar unit-economics spreadsheet, die met de marge-per-bestelling formule die aan elkaar geknoopt is uit een carrier-audit van 2022, en de formule zegt ja, dit kan, op het randje.

Het kan niet. De formule klopt op dertien specifieke plekken niet, en we hebben dezelfde foute formule in elf Nederlandse sub-€10M shops gezien in de afgelopen achttien maanden. De vorm is zo consistent dat we inmiddels voor elke returns-agent-offerte een audit van veertig minuten draaien. Deze post is die audit.

Hoe het er wél hoort uit te zien

Voor we bij de misrekeningen komen: het alternatief. Een returns-agent die 9.200 retouren per kwartaal afhandelt heeft geen SaaS-extensie nodig. Hij heeft vier onderdelen:

  • Een PostNL track-and-trace cache die de pakketstatus oplost voordat er ook maar één LLM aan te pas komt. De meeste refund-beslissingen liggen al vast op het moment dat het pakket bij het sorteercentrum binnenkomt.
  • Een fraude-rubric gate: een handgeschreven checklist van zeven tot twaalf condities (refund-frequentie, IP-risico, productwaarde, eerdere chargebacks) die zonder LLM gescoord wordt.
  • Een Claude Sonnet-beslisstap, alleen aangeroepen op de gevallen die de gate als twijfelachtig markeert, met de rubric en de pakketstatus als context.
  • Een human-in-the-loop queue voor de rest, geschat op zo'n 3 tot 6% van het totaal.

De marginale kost per retour, volledig belast, ligt tussen €0,18 en €0,34, afhankelijk van hoe vaak Sonnet wordt aangeroepen. De Returnly-extensie was geoffreerd op grofweg €1,80 per retour. De factor is reëel. De spreadsheet verstopte hem omdat de formule de kosten verkeerd om optelde.

De dertien misrekeningen, gerangschikt

We rangschikken ze op hoeveel het kost om ze terug te draaien. Zeven los je vanavond op door één prompt-template of één config-bestand aan te passen. Zes dwingen je het retour-beleid te herzien en mogelijk de algemene voorwaarden opnieuw door legal te halen. De volgorde is belangrijk omdat hij vertelt waar de operations-manager zelfstandig kan handelen, en waar het op de volgende directie-agenda hoort.

Op te lossen in één prompt-template

  1. De LLM op listprijs rekenen in plaats van cached input. De rubric, het beleid, de SKU-catalogus: niets daarvan verandert tussen retouren. Cache het. De prompt-caching korting van Anthropic op cached input is de grootste swing in het hele model, en mensen vergeten hem omdat de pricing-pagina het headlinegetal als eerste laat zien.
  2. 'Fraudecheck' behandelen als één LLM-call. Het zijn er twee. Een goedkope classifier (Haiku, of helemaal geen LLM) maakt een shortlist. De dure judge (Sonnet) ziet alleen die shortlist. Wie de cascade overslaat, betaalt grofweg drie keer zoveel per beslissing.
  3. De LLM de track-and-trace string laten lezen. De API van PostNL geeft gestructureerde velden terug. Parseer ze. De LLM is voor gevallen waar de pakketstatus en de claim van de klant niet overeenkomen, niet voor OCR op een statuscode.
  4. Geen caching van carrier-responses. Een returns-agent die dezelfde barcode drie keer opvraagt tijdens één beslissing betaalt drie keer en wacht drie keer. Cache per barcode met een korte TTL. Onder de €10 per maand aan infra.
  5. Agent-turns tellen alsof elke turn een volledige system-prompt-reload is. Als je geen prompt-caching over de agent-loop gebruikt, betaal je input-tokens voor dezelfde rubric bij elke tool-call. Anthropic's caching guide beschrijft het patroon.
  6. Vergeten dat fraude-geweigerde refunds omzet zijn. De meeste spreadsheets boeken vermeden fraude als bespaarde kosten, niet als behouden omzet. Daardoor lijkt de ROI van de agent half zo goed als hij is. Zet het aan de omzetkant en je marge-per-bestelling model klapt om.
  7. Human review-tijd op nul zetten. Zelfs bij een queue-percentage van 3-6% gaat het om grofweg 270-550 retouren per kwartaal waar een mens aanzit. Bij zeven minuten per stuk hoort er een echte kostenregel onder te staan. De offerte van Returnly verstopte dit; jouw build mag dat niet.

Ieder van deze is een config- of template-aanpassing. Geen ervan vereist een gesprek met legal. Als je operations-manager de agent-code heeft, kan ze het pakket in een middag uitrollen en valt de kost-per-retour met ruwweg 55%.

Vereist een herziening van het retour-beleid

  1. 'Retour accepteren' verwarren met 'refund zonder inspectie'. Dat zijn twee beslissingen. De agent zou de retour altijd moeten accepteren (juridisch moet dat meestal ook, onder EU-consumentenrecht, met smalle uitzonderingen). De fraudevraag is of je terugbetaalt vóór het pakket terug is en gecontroleerd. Wie ze door elkaar haalt, krijgt een spreadsheet die zowel juridisch risico als magazijnkost te laag inschat.
  2. De per-bestelling fee van Returnly als marginaal behandelen. Het grootste deel is vast: het platform, de integraties, de dashboards. De marginale kost van één extra retour door Returnly ligt veel lager dan de fee suggereert, wat betekent dat het build-vs-buy-omslagpunt bij hoger volume ligt dan de spreadsheet impliceert. De andere kant: bij 9.200 retouren per kwartaal zit je er al voorbij.
  3. Eén marge-per-bestelling voor alle retour-redenen. Sizing-retouren van een vaste klant kosten bijna niets aan verwachte fraude. Damaged-on-arrival kost bijna niets aan fraude en bijna alles aan leverancier-claim werk. 'Veranderd van gedachten' op een artikel van €180 is waar de fraude-rubric zijn geld verdient. Middel ze samen en je bouwt de verkeerde agent.
  4. Marge berekenen op bruto orderwaarde, niet op contribution margin na COGS, carrier en betalingskosten. Een bestelling van €60 met een contribution margin van €22 is geen risico van €60. De fraude-gate moet contribution margin als referentie nemen, niet bruto. Anders staat je drempel voor auto-refund in de verkeerde valuta.
  5. Carrier-cost arbitrage volledig vergeten. PostNL-retourzegel en DHL-pickup zijn anders geprijsd per pakketgewicht. Onder de €10 SKU-waarde verslaat de goedkoopste reverse logistics vaak de waarde van het artikel zelf, en je agent zou dat moeten weten en de klant een refund zonder retour moeten aanbieden voor die staart. De meeste retour-beleidsdocumenten die we lezen, staan dit niet toe. Dat zou wel moeten.
  6. De identiteits-verificatie kost bij de agent-provider niet meemodelleren. Anthropic's aankondiging dat ID-verificatie voor bepaalde capabilities vanaf 8 juli verplicht wordt, verandert de operating overhead voor iedereen die een agent draait met verhoogde tool-permissies. Klein geld, echt geld, vaste-kostenregel. Wat betekent dat het in het voordeel werkt van zelf bouwen boven een per-order extensie huren.
Let op

Als de marge-per-bestelling formule in je spreadsheet ergens bruto orderwaarde gebruikt, kun je niet eerlijk redeneren over een returns-agent. Repareer die cel eerst. De rest hangt eraan.

De rekensom, simpel

Reken het zelf na, met cached-input pricing in gedachten. De grove vorm, geschaald op het kwartaal met 9.200 retouren:

RETOURNS_PER_QUARTER = 9_200

# Gate filters ~70% deterministically (track-and-trace closed loop, trusted customer)
GATE_RESOLVES = 0.70
SONNET_CASES  = RETOURNS_PER_QUARTER * (1 - GATE_RESOLVES)  # 2,760

# Per-decision LLM cost, with prompt caching on the rubric+policy
RUBRIC_TOKENS_CACHED   = 4_200
DECISION_INPUT_TOKENS  = 600
DECISION_OUTPUT_TOKENS = 220

# Sonnet reference prices in EUR per Mtok (check the pricing page; FX moves)
PRICE_CACHED_INPUT = 0.30
PRICE_INPUT        = 3.00
PRICE_OUTPUT       = 15.00

cost_per_decision = (
    RUBRIC_TOKENS_CACHED   / 1_000_000 * PRICE_CACHED_INPUT +
    DECISION_INPUT_TOKENS  / 1_000_000 * PRICE_INPUT +
    DECISION_OUTPUT_TOKENS / 1_000_000 * PRICE_OUTPUT
)

llm_cost_quarter   = SONNET_CASES * cost_per_decision           # ~€10
human_cost_quarter = RETOURNS_PER_QUARTER * 0.04 * (7/60) * 22  # ~€944
infra_cost_quarter = 180     # cache + queue + observability

total = llm_cost_quarter + human_cost_quarter + infra_cost_quarter
print(round(total, 2), "EUR per quarter, all-in")

Dat totaal komt uit op ongeveer €1.130 per kwartaal tegenover een Returnly-extensie die op grofweg €14.500 per kwartaal is geoffreerd. De asymmetrie zit niet in dat Returnly te duur is. Het komt doordat de SaaS-prijs het volledige productoppervlak van het platform moet afschrijven over klanten die het meeste daarvan niet nodig hebben. Jij hebt fraude-gating en een Sonnet-oordeel op 30% van de gevallen nodig. Je betaalt voor veertig andere dingen.

Waar de HN-voorpagina dit raakt

Twee recente threads zijn relevant voor de build. Anthropic's mededeling dat ID-verificatie voor bepaalde capabilities vanaf 8 juli verplicht wordt, betekent dat de houder van de API-key een reëel, geverifieerd entiteit moet zijn. Prima voor de founder, frictie als je van plan was de agent eigen credentials te geven. Het bijbehorende stuk over tijdelijke Cloudflare-accounts voor AI-agents schetst een patroon voor kortlevende, scoped credentials voor de downstream-tools die de agent aanroept. Samen suggereren ze dat productie returns-agents binnenkort meer op service-accounts met audit trails gaan lijken dan op prompts in een Lambda.

Het derde HN-stuk, over het bouwen van betrouwbare agentic systems, komt op hetzelfde punt uit dat we klanten blijven vertellen: de LLM is het kleinste deel van de agent. De saaie onderdelen — de carrier-cache, de rubric, de queue, de audit log — daar woont de betrouwbaarheid.

Wat je morgenochtend doet

Open de marge-per-bestelling spreadsheet. Zoek de cel die bruto orderwaarde gebruikt. Vervang die door contribution margin. Zet er één tabblad naast dat de retour-redenen splitst in vier bakken: sizing, damaged, changed-mind, suspected-fraud. Die vier getallen vertellen je in ongeveer tien minuten of je returns-agent project past in één prompt-template of in een volledige herziening van het retour-beleid. De meeste van de elf shops die we hebben geaudit, leerden dat ze alleen de prompt-template nodig hadden.

Toen we de returns-agent bouwden voor een Nederlands fashion-accessoires merk op grofweg deze schaal, liepen we ertegenaan dat de PostNL track-and-trace cache de weekend-vertragingen bij het sorteercentrum moest opvangen zonder refunds 72 uur in limbo te laten hangen; we losten dat uiteindelijk op door die pakketten meteen naar de human queue te routeren met een 'carrier delay' tag. Daar komt het werk rond AI-agents altijd op neer: de LLM is prima, het werk zit in de naden.

Kern

De LLM is de kleinste regel op de P&L van een returns-agent. De carrier-cache, de rubric en de human queue: daar zit de unit economics in.

FAQ

Kan een returns-agent echt refund-beslissingen nemen zonder menselijke review?

Ja voor de deterministische meerderheid, nee voor de rest. Een goed gebouwde agent lost 60-75% van retouren automatisch op via de carrier-cache en de rubric, en routeert de twijfelgevallen naar een human queue, met alle context erbij.

Wat verandert Anthropic's ID-verificatie-eis voor mijn agent?

Vanaf 8 juli moet de houder van de API-key voor bepaalde capabilities een geverifieerd entiteit zijn. Voor een enkele shop is dat papierwerk. Het maakt zelf-gehoste, geauditeerde agent-infrastructuur ook aantrekkelijker dan per-order SaaS.

Waarom een gate op PostNL track-and-trace voor je Sonnet aanroept?

Omdat de meeste refund-beslissingen al vast liggen zodra de pakketstatus bekend is. €0,02 uitgeven aan een carrier-API-call om een LLM-call van €0,15 te vermijden is de goedkoopste optimalisatie in de hele stack.

Is Returnly altijd de verkeerde keuze?

Nee. Onder ongeveer 2.000 retouren per kwartaal valt de build-vs-buy-rekensom meestal in het voordeel van de SaaS. Het omslagpunt hangt af van contribution margin en fraude-percentage, niet van orderaantal alleen.

ai agentsautomatione-commerceprocess automationoperationsintegrations

Iets bouwen?

Start een project