Buienalarm, Marktplaats en 9292 sturen je profiel een veiling in

Een doodgewone Nederlander opent 's ochtends de weer-app, plant 's middags een reis en scrolt 's avonds over Marktplaats. Bij elk van die handelingen vertrekt, voordat je de advertentie ziet, een bid-request met je advertentie-ID, locatie en netwerkgegevens naar een advertentieveiling. Ik ving en ontcijferde die bid bij Buienalarm en Marktplaats, mat wat de advertentielaag je bundel kost, en houd eerlijk uit elkaar wat hard gemeten is en wat niet.

Illustratie: een man kijkt op zijn telefoon terwijl 9292, Marktplaats en Buienalarm elk een bod uitbrengen op zijn profiel, onder de kop 'Actieve verkoop van jouw gegevens op 9292, Marktplaats en Buienalarm'. Tekening door Mick Beer

Een doodgewone Nederlander opent ‘s ochtends de weer-app, plant ‘s middags een reis, scrolt ‘s avonds over Marktplaats. Bij elk van die handelingen vertrekt er, voordat je de advertentie ziet, een berichtje naar een advertentieveiling. Daarin staat je advertentie-ID, je locatie, je telefoonnetwerk en je taal. Honderden partijen bieden mee en zien dat profiel. Dit is wat ik bij drie Nederlandse apps zelf heb vastgelegd, en wat ik niet kon vastleggen, eerlijk uit elkaar gehouden.

Het werkt zo onzichtbaar dat niemand het merkt. Je vraagt of het gaat regenen, en in diezelfde seconde wordt je toestelprofiel een veiling in geschoten waar advertentiebedrijven op bieden. Niet de weersinformatie is het product. Jij bent het. En het kost je, gemeten, je databundel en je accu, terwijl je dacht dat je gewoon het weer checkte.

Ik heb het verkeer van drie alledaagse Nederlandse apps onderschept en ontcijferd, het toestel uitgelezen tot op de simkaart, en de app-code uit elkaar getrokken. Hieronder staat per app de keten: wat vertrekt, waarheen, en wat het voor jou betekent.

“Laat Mick maar praten, het zijn maar advertenties…” De reactie die ik het vaakst krijg.

Wie, wat, waarheen
WieWatWaarheen
Je toestel praat met een advertentie-exchange, voor de meeste apps PubMatic OpenWrap. Die exchange veilt jouw advertentieplek door aan honderden bieders.Een bid-request met je advertentie-ID, je locatie, je netwerkcode, je carrier, je taal en je toestemmingsstatus. Het volledige profiel dat je toestel aanbiedt, ongefilterd.Naar de exchange en alle meebiedende partijen. En, zo blijkt uit gelekte broker-lijsten, een deel belandt bij databrokers die uit de veiling oogsten.
Stroomschema van app naar veiling: jij opent de app, het toestel bouwt een bid-request, het profiel met advertentie-ID, locatie, netwerk en taal gaat naar de advertentieveiling, bieders zien het profiel, en de winnaar krijgt jouw scherm.
Van app naar veiling: je toestel levert het profiel, alle bieders zien het mee.

De korte versie

Keten 1 · Buienalarm: het weer als lokaas

Je opent de app om te zien of je droog thuiskomt. Buienalarm (van Infoplaza) toont je de regengrafiek, en laadt daarbij een advertentie. Op dat moment bouwt het toestel een OpenRTB-bid en stuurt die naar PubMatic OpenWrap (ow.pubmatic.com). Ik heb die bid onderschept en ontcijferd.

In de bid zit de advertentie-ID (device.ifa), plus land, netwerkcode (mccmnc), carrier, taal en locatie, samen met de IAB-toestemmingsstring en de package-naam van de app. Het volledige profiel dat je toestel aanlevert, ongefilterd de veiling in.

Toon de velden in de bid-request
VeldWat het over je prijsgeeft
Wie je bent
device.ifaje advertentie-ID, een uniek nummer dat je toestel identificeert
user.ext.eidsde Infoplaza-PPID: een cross-app identiteit die een reset van je advertentie-ID overleeft
app.bundlede package-naam van de app (org.yoki.android.buienalarm)
app.publisher.idde PubMatic-publisher die de advertentieplek aanbiedt
Waar je bent
device.geoje locatie; op een echt toestel je precieze breedte- en lengtegraad
device.countryje land
device.carrierje telefoonmaatschappij
device.mccmncje netwerkcode (land plus operator)
device.ipje IP-adres
Welk toestel
device.make / modelmerk en model van je telefoon
device.osbesturingssysteem en versie
device.uade user-agent, een kenmerk van app en toestel
device.lmtde "Limit Ad Tracking"-stand; in mijn capture stond die uit
Wat je toestemde
user.ext.consentje IAB TCF-toestemmingsstring, zelf een persoonsgegeven
regs.ext.gdprof de AVG van toepassing is (1 = ja)
Welke advertentieplek
imp.tagidde advertentie-eenheid, bijvoorbeeld /7571/Buienalarm_NL/.../BannerFooter

Uit de gedecrypteerde OpenRTB 2.5-bid van Buienalarm en Marktplaats. Op een echt toestel staan in deze velden jouw werkelijke waarden; in mijn emulator-capture deels testwaarden (zie de eerlijke grens hierboven).

De last is ook in volume zichtbaar. In een gebruikssessie ging 87% van alle netwerkverzoeken en 54% van alle bytes naar de advertentie- en trackingketen, tegenover ongeveer 0,2 MB echt weerverkeer. Je betaalt databundel om advertenties op te halen, niet om het weer te zien.

Waar het heen gaat (gemeten)

De bid gaat naar PubMatic (OpenWrap), een advertentie-exchange. Vanaf daar wordt jouw plek doorgeveild aan de meebiedende partijen, die elk het profiel zien. Buienalarm staat daarnaast in de gelekte Gravy-lijst: een databroker die uit de bidstream oogst, doorgaans zonder dat de uitgever het weet.

Toon de gecontacteerde advertentiepartijen
PartijEndpointRol
De veiling
PubMatic OpenWrapow.pubmatic.com/openrtb/2.5de advertentieveiling in je toestel
Boden mee en zagen je profiel (uit de veiling)
Xandr (AppNexus)via de veilingbiedende SSP/DSP
Criteovia de veilingbiedende DSP
GroupMvia de veilingbiedende inkooporganisatie
Improve Digitalvia de veilingbiedende SSP
Index Exchangevia de veilingbiedende SSP
Magnite (Rubicon)via de veilingbiedende SSP
Direct door je toestel gecontacteerd (identiteitskoppeling)
Xandrib.adnxs.comcookie-sync
Index Exchangedsum-sec.casalemedia.comcookie-sync
TripleLifteb2.3lift.comcookie-sync
Equativrtb-csync.smartadserver.comcookie-sync
Andere demand, direct
Google Ad Managerpubads.g.doubleclick.netadvertentieserver en cookie-matching
Meta Audience Networkweb.facebook.com/adnw_sync2demand van Facebook
Outbrainb1t-dubdc2.outbrain.comnative advertenties en tracking
Teadsstatic.teads.tvvideo-advertenties
Toestemming (per app)
Didomisdk.privacy-center.orgtoestemmingsbeheer bij Buienalarm
Sourcepointin-app CMPtoestemmingsbeheer bij Marktplaats
Usercentricsapi.usercentrics.eutoestemmingsbeheer bij 9292

Waargenomen in de gedecrypteerde Buienalarm-capture (de meest complete); Marktplaats toont dezelfde structuur via PubMatic OpenWrap plus een Prebid Server. De biedende partijen komen uit de seatbid van de veiling.

Keten 2 · Marktplaats: scrollen kost je de helft van je bundel

’s Avonds op de bank, even over Marktplaats scrollen naar een tweedehands fiets. Bij elke listing en in de feed laadt de app advertenties, en stuurt het toestel bid-requests naar PubMatic OpenWrap, met een Prebid Server ernaast. Ook deze bid heb ik gevangen en ontcijferd: dezelfde structuur, advertentie-ID plus het volledige device-profiel.

Maar bij Marktplaats is de kosten-kant het scherpst. Ik mat het dataverbruik twee keer onder identieke omstandigheden: een keer met de advertentiedomeinen toegestaan, een keer geblokkeerd. Het verschil is de pure advertentie-overhead.

Wat het je bundel kost (gemeten)

Tien minuten scrollen kostte met advertenties ongeveer 15 MB, zonder de advertentiedomeinen ongeveer 2 MB. Het overgrote deel van wat de app je bundel kost tijdens gebruik, ongeveer 85%, is de advertentie- en trackinglaag. De listings die je zoekt zijn een kleine fractie. Een deel van die 85% is de zichtbare advertentie zelf (het gratis-app-model), een deel is onzichtbare bied- en trackingoverhead die jou niets oplevert. De harde ondergrens van pure tracking-calls was ongeveer 5%.

Infografiek: een dag van een doorsnee-gebruiker met een krappe bundel. Per moment hoeveel van het dataverbruik de dienst zelf is en hoeveel de advertentie-laag. 9292 om 08:10 is bijna volledig dienst (1% ads), Marktplaats om 20:30 is 15% dienst en de rest advertentie-laag; Buienradar en VI zijn nog te meten.
Een dag van een doorsnee-gebruiker met een krappe bundel. 9292 en Marktplaats zijn op dataverbruik gemeten; voor Buienradar en VI is wel de advertentie-architectuur uitgezocht (zie hieronder), maar nog geen schoon overhead-percentage. De achtergrond-laag die apps 24/7 buiten beeld verbruiken en de maandoptelsom zijn doorrekeningen, geen metingen.

Keten 3 · 9292: de schone app die toch in de broker-lijst staat

’s Middags je trein plannen met 9292, de OV-reisplanner van Infoplaza. En hier wordt het verhaal genuanceerder, want 9292 is juist schoon in verbruik: in mijn meting was maar ongeveer 1% van het dataverkeer klassieke advertentie-/trackingdata. Een OV-utility eet je bundel niet op zoals een feed-app dat doet. Dat is het eerlijke contrast: niet elke app is een bundelvreter.

En tóch staat 9292 in de gelekte Gravy-lijst van de databroker. Dat is de kern van keten 3: een app kan relatief licht zijn in verbruik en tegelijk je gegevens bij een broker laten belanden. 9292 is bovendien het anker dat de broker-lijst verbindt met de Infoplaza-familie, dezelfde uitgever als Buienalarm.

Het mechanisme-onderscheid (streng)

Er zijn twee manieren waarop je gegevens bij een broker komen, en die horen niet op een hoop. De ene is bidstream-oogst: een broker als Gravy verzamelt uit de advertentieveiling, doorgaans zonder dat de uitgever het weet. De andere is een ingebouwde SDK: bij sommige apps (zoals de jRustonApps-weerserie) zit een locatie-SDK uit de X-Mode/Sense360-familie die de uitgever zelf heeft ingebouwd. Het eerste overkomt de uitgever, het tweede is een keuze van de uitgever.

Schema met twee ketens: bovenste rij gaat van NL-app (9292, Marktplaats, VI, Buienalarm) via bid-request met device-profiel naar advertentie-exchange (PubMatic, Magnite) naar Gravy, die uit de bidstream oogst zonder medeweten van de uitgever. Onderste rij gaat van jRustonApps (Moon Phase, Tide Times) via ingebouwde SDK Sense360 / X-Mode naar de Xoth-lijst, een door de uitgever zelf ingebouwde SDK. Beide eindigen bij een databroker die profielen verkoopt.
Twee mechanismen, streng gescheiden: Gravy oogst uit de bidstream, Sense360 is een zelf-ingebouwde SDK.

De status van 9292 blijft eerlijk: het staat in de Gravy-lijst en het ad-verkeer is waargenomen, maar de eigen bid met de 9292-package heb ik niet gevangen. Daarvoor zou ik een geroot toestel nodig hebben. Dus 9292 staat op lijst-vermelding plus waargenomen verkeer, niet op een eigen ontcijferde bid.

Keten 4 · Buienradar: dezelfde markt, andere route

’s Ochtends even Buienradar (van RTL Nederland, sinds de overname onder DPG Media) openen om te zien of je droog wegkomt. Ook hier laadt de app een advertentie. Maar als je nu naar het netwerkverkeer kijkt, mist er iets: er vertrekt geen zichtbare bid-request uit je toestel. Geen PubMatic, geen veiling-in-je-telefoon. Het toestel praat voor advertenties alleen met Google.

Dat lijkt schoner, en op één punt is het dat ook. Maar het is vooral een andere route. De advertentieveiling draait niet in je toestel maar server-side bij Google (Ad Manager, Open Bidding); jij ziet alleen de winnaar. Je profiel wordt niet zichtbaar de ether in geschoten, het wordt bij Google verhandeld, daar waar je het niet kunt onderscheppen.

En “schoner” betekent hier niet “zonder identifier”. De app leest gewoon je advertentie-ID, vraagt achtergrondlocatie (met geofencing, waarschijnlijk voor regen-alarm, maar het blijft een brede toestemming) en omarmt Google’s nieuwe advertentie-API’s (Topics, Attribution). De advertentiebeelden komen via LemonPI, een Nederlands platform voor dynamische advertenties uit Eindhoven.

Wat erbij komt: een eigen meetlaag (uit de APK)

Buienradar draagt boven op Google nog een laag die de andere apps niet zo hebben: een eigen, door DPG en RTL gehoste meetpijplijn (Snowplow) die je schermgedrag, je scrollen en je locatie-context vastlegt, plus Kantar NMO, het Nationaal Media Onderzoek, dat een gebruikers-ID naar Kantar stuurt voor de kijkcijfers. Toestemming loopt via OneTrust, met de IAB-toestemmingsstring plus Google’s eigen partnerlijst, achter de bekende betalen-of-toestemmen-muur.

Toon de diensten en endpoints van Buienradar
DienstEndpointRol
Advertenties (Google)
Google Ad Managergoogleads.g.doubleclick.netserver-side veiling en advertentieserver
IMA SDKimasdk.googleapis.comvideo-advertenties
OMIDin de Google-SDKviewability-meting
Privacy SandboxAndroid-APITopics, Attribution en de advertentie-ID
LemonPI*.lemonpi.iodynamische advertentiebeelden (via Google)
Toestemming
OneTrustmobile-data.onetrust.ioCMP: IAB TCF v2 plus Google Additional Consent
DPG Mediac.dpgmedia.netbetalen-of-toestemmen-muur en config
Meting (eerste-partij, DPG en RTL)
Snowplownl-rtl-prod1.collector.snplow.netschermgedrag, scroll, locatie-context (DPG-schema's)
FirebaseGooglecrash en remote config; analytics standaard uit
Kantar NMOnmortlendpoint.2cnt.netkijkonderzoek, stuurt een gebruikers-ID
Overig
Usabillasdk.out.usbla.netfeedback en enquêtes (VS)
Swrve*.swrve.comengagement- en push-campagnes
Bitmovinlicensing.bitmovin.comvideospeler
RTL-accountaccount.rtl.nllogin en identiteit
Opvallende permissies
AchtergrondlocatieAndroidplus geofencing (regen-alarm of profilering)
Install-referrerPlay Storeinstallatie-attributie

Uit de statische analyse van de APK (apktool plus jadx), gekruist met mijn eigen netwerkcapture. Géén PubMatic, Prebid, Meta, Outbrain of Criteo aangetroffen: de inventaris bevestigt de Google-only architectuur.

Nog één: VI

VI (Voetbal International) doet iets dat de andere niet zo openlijk doen: het stuurt je advertentie-ID rechtstreeks naar een databedrijf. In mijn capture ging je advertentie-ID naar Lotame (crwdcntrl.net), een Data Management Platform dat profielen over apps en sites heen bouwt, georkestreerd via het Nederlandse advertentienetwerk Next Day Media. Daarnaast meet VI je mee met comScore, serveert advertenties via Google Ad Manager, en draait de eigenlijke veiling via een Prebid Server bij Magnite. VI staat ook in de Gravy-lijst. Wat ik hier zag is dus niet alleen een veiling, maar een rechtstreekse levering van je identifier aan een profielenbouwer.

Waarom je dit niet op je eigen toestel kunt zien

Er zit een ongemakkelijke kant aan dit onderzoek: je kunt zelf bijna niet controleren wat je apps versturen, en dat is zo ontworpen.

Sinds Android 7 (2016) vertrouwen apps voor hun beveiligde verbindingen standaard alleen de certificaten van het systeem, niet die jij als gebruiker zelf installeert. Wie het bid-verkeer wil meelezen wordt genegeerd, tenzij je je toestel “root”, en dat verzwakt de beveiliging van je telefoon juist. Dat geldt voor het bid-verkeer van Buienalarm, Marktplaats en VI; VI zet er bovendien code-pinning overheen. De keten die je gegevens doorverkoopt is daarmee precies de keten die je niet mag inzien.

Beslisboom: de app vraagt een advertentie aan, de bid gaat over HTTPS naar de exchange, en de app vertrouwt voor dit verkeer alleen de systeem-CA. Als het toestel niet geroot is wordt een gebruiker-CA genegeerd en is de bid niet te onderscheppen (Android 7+ ontwerp sinds 2016). VI heeft bovendien code-pinning. Daarom gedrag op emulator, identiteit los op echt toestel.
Zonder root komt het onderscheppingscertificaat er niet doorheen, ongeacht de aanpak.

Daarom legde ik het gedrag vast op een emulator en mat ik de Nederlandse identiteit los op een echt Odido-toestel. De plek waar dit zichtbaar wordt is een ingerichte testopstelling, niet je eigen telefoon, en dat is precies het punt.

Wat je kunt doen · Trek de stekker uit het profiel, niet uit de app

Hoe hard is elke laag?

Bevinding Hardheid Beste bron
Buienalarm stuurt RTB-bid met identifier + profiel hard eigen gedecrypteerde bid
Marktplaats stuurt RTB-bid met identifier + profiel hard eigen gedecrypteerde bid
Marktplaats ~85% verbruik is ad-laag (in-sessie) hard eigen twee-runs-meting
9292 ~1% ad-laag (schone utility) hard eigen twee-runs-meting
9292 / Marktplaats / VI in databroker-lijst hard Gravy-lijst (404 Media)
VI stuurt advertentie-ID naar Lotame (DMP) hard eigen capture (crwdcntrl.net)
Buienradar Google-only, veiling server-side hard eigen capture + statisch
Bid onvangbaar zonder root (systeem-CA) hard NSC-analyse + Android-docs
NL-waarden organisch op echt toestel redenering baseline + bewezen gedrag
9292 eigen bid (package-niveau) open vereist geroot toestel
Buienradar / VI overhead-percentage open vereist schone WiFi-meting
Maand- en accu-impact cumulatief schatting doorrekening met aannames

Methode (voor wie het zelf wil nalopen)

Het toestelprofiel (Bewijs A) is read-only van een fysiek toestel gelezen met getprop: model SM-A528B, simkaart-netwerkcode 20416 (Odido), taal nl-NL, geen enkele hook. Het gedrag (Bewijs B) is op een Android-emulator vastgelegd met mitmproxy als onderschepper, met een veld-voor-veld-analyse op de ontcijferde OpenRTB-bid; elke bid is gecontroleerd tegen de package die hem hoort te versturen. De grens is bepaald met statische analyse van de network_security_config van elke app. Een onafhankelijke verificatielaag herscoorde alle captures met een strengere tool en zette overclaims terug; geen enkele bevinding is als gebonden bewijs op een echt toestel geclaimd. De overhead is gemeten met een twee-runs-vergelijking (met en zonder advertentiedomeinen) onder identieke omstandigheden.

Wat nog open staat (onderzoeksagenda)

Een eerlijk onderzoek laat zien waar het ophoudt. Dit zijn de open einden, en wat elk ervan vergt om te sluiten.

Bronnen en verantwoording

De technische bevindingen (de gedecrypteerde bids, het toestelprofiel, de overhead-metingen) zijn eigen metingen uit juni 2026, gehasht bewaard en reproduceerbaar. De databroker-vermeldingen komen uit de bovengenoemde openbare bronnen.

← terug naar artikelen