SaaS & data
Van anoniem bezoek naar bruikbare attributie
Een first-party meetketen voor bezoeken, formulieren en boekingen, met expliciete consent-status en een aparte route voor rapportagedata.
De situatie
Het platform koppelt websitebezoeken aan formulieren, meetings, leads, reserveringen en orders. Daarbij moeten campagnegegevens zoals UTM-parameters en Google Ads-click identifiers bewaard blijven, ook wanneer een conversie pas veel later binnenkomt.
Waar het vastliep
De tracker draait op websites met verschillende formulieren en consentmanagers. Zonder toestemming mag hij niet zomaar een herkenbaar bezoekersprofiel opbouwen, maar volledig niets opslaan maakt latere attributie onmogelijk. Bovendien komen browser-events, webhooks en externe API-data niet altijd in dezelfde volgorde binnen.
De technische vraag
Dezelfde sessie moest van anoniem naar herkenbaar kunnen promoveren zonder dubbele bezoekers of bezoeken te creëren. Tegelijk moest ieder bedrijf zijn eigen data houden en mochten zware attributieberekeningen de trackingrequest niet vertragen.
Mijn aanpak
Ik bouwde een expliciete consent-state-machine met een beperkte session-only modus en een idempotente session-upgrade zodra toestemming wordt gegeven. Laravel verwerkt attributie en integraties via queues. Transactionele gegevens blijven in PostgreSQL; rapportage-events worden via dezelfde repositorycontracten ook naar ClickHouse geschreven.
Wat het opleverde
Een toestemmingswijziging werkt zonder paginareload door in de meetketen. Nieuwe formulier- of boekingsbronnen kunnen als adapter worden toegevoegd, terwijl logging per stap zichtbaar maakt of een event ontvangen, gekoppeld en verwerkt is.
Onder de motorkap
Keuzes die het verschil maakten
Consent als toestand
Niet één losse cookiecheck, maar een overgang van session-only naar cross-session tracking met behoud van de bestaande sessie.
Idempotente activatie
Een herhaald upgrade-request mag nooit een tweede visitor, visit of conversie opleveren.
Twee soorten opslag
PostgreSQL voor relaties en actuele status; ClickHouse voor grote tijdreeksen en rapportagequeries.
Werk buiten de request
Attributie, imports en externe synchronisatie lopen via queues zodat de tracker snel kan antwoorden.