Hoe wij een casinobonus verifiëren
Van scrape tot publicatie in 11 stappen
De datapijplijn achter BonusWijs.nl. In een maand gebouwd en bijgeschaafd, met zes frontier-LLM's die er om beurten gaten in schoten. Draait nu dagelijks langs 30 vergunninghouders van de Ksa.
Het probleem
Operators met een Ksa-vergunning zetten hun bonusvoorwaarden in lange juridische lappen tekst. Match-percentages weggestopt in alinea vier. Inzetvereisten die op één pagina op drie manieren zijn opgeschreven. En "keuzebonussen", waarbij de speler kiest tussen alternatieve armen (100% match tot €250 OF 100 free spins), zien er tegenstrijdig uit voor alles wat er één waarde uit probeert te halen.
Affiliates en vergelijkingssites hebben twee opties. De marketingtekst van de operator klakkeloos overnemen: weinig vertrouwen, veel volume, en wat het grootste deel van de markt doet. Of de data met de hand bijhouden: traag, foutgevoelig, en het houdt op bij een handvol operators.
Allebei schieten ze tekort sinds de Ksa de lat in 2024 hoger legde. Toon je iets dat niet klopt met de live bronpagina, dan zet je meer op het spel dan je reputatie. Dan vraag je om een brief van de toezichthouder.
Wij hadden een derde optie nodig. Iets dat een pagina leest zoals een mens dat doet, de structuur vastlegt zoals een database dat doet, en weigert te publiceren zodra het twijfelt.
Hoe het systeem in elkaar zit
Stappen 01 tot en met 04 halen de ruis eruit. Stappen 05 tot en met 07 bepalen wat veilig is. Stappen 08 tot en met 11 publiceren, bewaken en herstellen. Het loopt één kant op, met een gedocumenteerde overdracht tussen de blokken.
Uitdunnen
01 - 04
Scrapen, uitlezen, vergelijken, ruis wegfilteren.
Beslissen
05 - 07
Werk bij wat veilig is, escaleer wat dat niet is, valideer alles voordat het live gaat.
Publiceren & bewaken
08 - 11
Schone runs uitrollen, dichtklappen bij oude data, nieuwe armen in de wachtrij, hallucinaties afvangen.
De 11 stappen
Elke stap lost één probleem op en geeft het stokje door aan de volgende. Samen brengen ze een bonus van operatorpagina naar gepubliceerde data, met bij elke stap een gedocumenteerde audittrail.
Dagelijkse scrape
Elke ochtend om 06:00 halen we de officiële voorwaardenpagina op van iedere operator met een Ksa-vergunning. Playwright met stealth-flags, Nederlandse geo via NordVPN, opnieuw proberen bij tijdelijke fouten. 30 operators, niemand kijkt mee.
LLM-extractie
Claude leest de gescrapte HTML en levert gestructureerde velden op: match-percentage, maximale bonus, free spins, inzetvereiste, inzetdoel, tijdslimieten, bonustype. Het model ziet de pagina; het schema ziet alleen getypte waardes.
Vergelijken met oog voor keuzebonussen
De verse waardes gaan langs de opgeslagen data, maar de comparator kent keuzebonussen. Kan een speler kiezen tussen alternatieve armen, dan ligt elke arm apart vastgelegd. Klopt er één, dan geldt de bonus als bevestigd.
Suppressiefilter
Bekende missers van de extractie lossen we automatisch op: proza dat als null wordt gelezen, keuze-armen die door elkaar lopen, aanbiedingen met meerdere armen die onterecht als "combined" worden bestempeld. Negen terugkerende patronen filteren we eruit, zodat er geen mens naar hoeft te kijken.
Automatisch bijwerken van veilige velden
Velden waar de extractie het met hoge zekerheid eens is en waar niets bonuskritisch aan hangt (tijdslimieten, opmaak) werken we automatisch bij. Bonuskritische velden (match %, maximale bonus, free spins, inzet, type) gaan nooit automatisch. Nooit.
Mens beslist bij echte signalen
Alles wat het filter overleeft en niet vanzelf mag worden bijgewerkt, leggen we handmatig naast de live bronpagina. Elke beslissing komt in openbare verificatienotities te staan: wat er veranderde, waarom, met een verwijzing naar de pagina van de operator.
Validatiepoort met vier lagen
Voordat er iets live gaat: schema-guards met zod en harde plafonds, een heuristische validator die rare uitkomsten opmerkt (inzet op een no-deposit bonus = waarschuwing), een pre-commit hook die voor bonuskritische wijzigingen gedocumenteerd bewijs eist, en regressietests die elk incident uit het verleden afdekken.
Automatisch publiceren, automatisch deployen
Schone runs committen, de npm-versie ophogen, publiceren naar GitHub Packages, de afnemer stroomafwaarts (BonusWijs.nl) meebumpen en een Vercel-deploy aftrappen. Bij een groene run komt er geen hand aan te pas.
Veiligheidskleppen
Publicatie gaat op slot zodra een getoonde bonus langer dan 30 dagen onbevestigd is. Een watchdog per arm slaat aan op 60, 90 en 180 dagen. Bij twijfel klapt de boel dicht: liever een oude datum in de footer dan verkeerde voorwaarden op de pagina.
Wachtrij voor nieuwe armen
Geeft een scraper drie runs op rij een waarde terug die bij geen enkele bekende arm past, dan komt die voor handmatige review op tafel. De eerste keer dat een casino zo'n arm krijgt, keurt een mens dat expliciet goed; daarna gaan volgende treffers vanzelf. Nieuwe aanbiedingen raken niet zoek, maar glippen er ook niet doorheen.
Bescherming tegen hallucinaties
Op het moment van doorvoeren leest een tweede extractie de pagina opnieuw, met een prompt die structureel anders is opgebouwd. Zijn de twee het oneens, dan gaat het naar handmatige review. Twee goedkope leesbeurten zijn beter dan één duur herstel van een verzonnen veld.
Wat het opleverde
De pijplijn verving een handmatige reviewwachtrij die zo'n 9 false positives per dag opleverde. Sinds het suppressiefilter en de comparator voor keuzebonussen draaien, blijven er 0-3 meldingen per dag over waar iemand echt iets mee moet.
9 → 0-3
False positives per dag, voor en na het filter en de keuze-armvergelijking
6
Frontier-LLM's die het schema in 3 rondes uit elkaar trokken
30
Vergunninghouders van de Ksa in de dagelijkse run
100%
Bonuskritische wijzigingen vastgelegd in openbare verificatienotities
Adversarial peer review
Het schemaontwerp ging door drie reviewrondes met zes frontier-modellen: DeepSeek V4 Pro, Minimax M1, GPT-5.5 Pro, Kimi K2.6, Claude Sonnet 4.6 en Gemini 2.5 Pro. Juist waar ze elkaar tegenspraken kwamen randgevallen boven die in de oorspronkelijke spec ontbraken. Het schema dat er nu ligt, is de versie waar alle zes mee akkoord gingen.
Waarom dit uitmaakt voor operators en affiliates
Drie eigenschappen van de pijplijn raken direct waar onze klanten wakker van liggen.
Klaar voor de toezichthouder
Bij elke bonuskritische wijziging zit een verwijzing naar de live pagina van de operator. Vraagt een toezichthouder waarom er staat wat er staat, dan vind je het antwoord in version control. Niet in iemands inbox.
Vertrouwen als onderdeel van het product
Bezoekers kunnen de verificatienotities gewoon lezen. De audittrail is de marketing. Vergelijkingssites die ongecontroleerde operatortekst overnemen kunnen dat niet zeggen, en dat verschil zie je steeds vaker terug in zoekverkeer en conversie.
Verder komen dan handwerk
Operator nummer 31 toevoegen kost een regel configuratie, geen extra collega. Dat dat economisch uit kan, ligt aan de ruis die structureel is verdwenen: de keuze-armvergelijking en het suppressiefilter doen dat werk.
Bij twijfel: niet publiceren
Twijfelt de pijplijn, dan gaat er niets live. Hij blokkeert de verouderde waarde en legt het hiaat bloot. Die scheve afweging, liever een ontbrekende datum dan een verkeerd getal, zit hard in de poortlogica.
De kern
Bonusdata is niet lastig omdat de waardes ingewikkeld zijn. Het is lastig omdat de bronpagina's rommelig zijn, de structuur nergens expliciet staat en één verkeerd getal een zaak voor de toezichthouder wordt. De pijplijn probeert niet slimmer te zijn dan de pagina. Hij probeert consequenter te zijn dan een mens die 30 operators met de hand nakijkt.
Diezelfde aanpak werkt breder. Overal waar je gereguleerde content publiceert, gestructureerde vergelijkingsdata bijhoudt en daartussen een muur juridische brontekst hebt staan, kun je hem inzetten.
Run je een operatormerk of een portfolio aan affiliates in een gereguleerde markt, en herken je deze problemen in je data? Dan moeten we even praten.
Zie het live
BonusWijs.nl draait volledig op deze pijplijn. De verificatienotities staan openbaar.
Bezoek BonusWijs.nl →