nverwante apps sturen je profiel dezelfde veiling in
Apps die niets met elkaar te maken hebben, blijken dezelfde advertentieveiling en dezelfde bieders achter zich te hebben. Je positie staat daardoor niet via een, maar via meerdere kanten tegelijk te koop. De veiling is geen eigenschap van een app, maar een gedeelde markt waar ze allemaal op aansluiten.
Wat ik in de biedstroom zag¶
Ik onderschepte de biedstroom van losse Nederlandse consumenten-apps. Een weer-app, een handel-app, een woon-app. Apps die niets met elkaar te maken hebben, van verschillende makers, voor verschillende doelen. Toch dook er telkens dezelfde advertentie-infrastructuur op. Een verkoopplatform dat de plek namens de app te koop aanbiedt, en een handjevol vaste bieders die overal terugkwamen.
Dat viel me op omdat ik het niet zocht. Ik keek per app naar waar het toestel naartoe praatte tijdens gebruik. De overlap kwam vanzelf naar boven toen ik de lijsten naast elkaar legde. Dezelfde domeinen, dezelfde partijen, in apps die op het scherm niets gemeen hebben. Je verwacht dat een weer-app en een woon-app langs gescheiden wegen lopen. In de biedstroom lopen ze samen.
Hoe een advertentieveiling in een app werkt¶
Het helpt om te weten wat er gebeurt op het moment dat een app een advertentie toont. De plek wordt in een fractie van een seconde geveild volgens het OpenRTB-model. De app stuurt via een verkoopplatform een bid request het veld in. Dat verzoek beschrijft de gelegenheid en het toestel, met identifiers en context erbij. Aangesloten bieders krijgen het verzoek, en wie het hoogste bod doet, mag de advertentie plaatsen.
De partij die de plek te koop aanbiedt, staat aan de verkoopkant. De partijen die bieden, staan aan de koopkant. Beide kanten zijn aangesloten op hetzelfde netwerk van veilingen. Een app kiest een verkoopplatform, en via dat platform komt hij automatisch in contact met het hele veld aan bieders dat daarop is aangesloten. De app kiest die bieders niet een voor een. Hij sluit aan op de markt, en de markt levert het veld.
Zes van de zeven overlappen¶
In een echte bid-respons uit een app zaten zeven biedende partijen. Zes daarvan staan ook in de partnerlijst van een totaal andere app. De namen die keer op keer terugkomen zijn PubMatic, Magnite, Criteo en Index Exchange.
Dat is de kern van de meting. Van de zeven partijen die in het ene geval een bod deden of mochten doen, is het overgrote deel ook aangesloten op een app die er verder los van staat. Bewijsniveau: dit is gemeten. De zeven partijen komen uit een echte bid-respons, de zes overlappende komen uit de partnerlijst van de andere app, en de vier genoemde namen zijn de exemplaren die ik in beide contexten terugzag. Het is niet gereconstrueerd uit vermoedens over de markt. Het staat in het onderschepte verkeer en in de partnerlijst zelf.
Een enkele overlap zou toeval kunnen zijn. Zes van de zeven, dwars door onverwante apps heen, is het patroon zelf. Dezelfde kopers zitten aan tafel, welke app je ook opent. De verzameling verandert nauwelijks als je van de ene app naar de andere gaat.
De veiling hoort bij de markt¶
Wie denkt dat hij zijn gegevens aan een app toevertrouwt, denkt te klein. De veiling waarin je positie wordt aangeboden, is een gedeelde markt waarop veel apps tegelijk zijn aangesloten. De app levert de gelegenheid. De markt levert de kopers, en die kopers zijn voor een groot deel dezelfde, ongeacht via welke app je binnenkomt.
Daardoor staat je positie via meerdere kanten tegelijk te koop, aan grotendeels dezelfde partijen. De weer-app biedt je aan, de woon-app biedt je aan, en aan de andere kant van beide veilingen zitten PubMatic, Magnite en de rest te wachten. Ze hoeven je gedrag in de ene app niet aan dat in de andere te koppelen om je vaker te zien. Ze zien je vaker omdat ze overal zitten. De app is uitwisselbaar, het veld aan kopers is dat niet.
Waarom toestemming per app een schijnkeuze wordt¶
Dit heeft een gevolg voor het idee dat je per app kunt kiezen. De toestemmingsvraag staat in de app en geldt voor die app. De veiling erachter is gedeeld. De partij die je in de ene app weigert, ziet je in de volgende alsnog, via dezelfde veiling waarop die volgende app is aangesloten.
Herkenning is daarmee een eigenschap van het netwerk geworden. Ze zit in de markt waarop de apps samen leunen, en ze reikt verder dan de grens van de app waarin je je keuze maakte. Je kunt een koper op een plek buitensluiten en hem twee apps verder gewoon terugzien. De keuze voelt als zeggenschap en werkt als een deur in een muur die aan de zijkanten open staat. Wie de markt wil weren, moet dat in elke app apart doen, en zelfs dan blijft de bieder aangesloten op de veilingen van alle apps waar de weigering niet is gezet.
Hoe de koppeling technisch zou lopen¶
Ik heb de koppeling zelf niet gemeten, dus wat hier volgt is het bekende mechanisme en geen bevinding uit deze meting. Bieders herkennen een toestel aan identifiers. Op mobiel is dat vaak de reclame-id van het besturingssysteem, die in de bid request meereist. Twee apps op hetzelfde toestel sturen dezelfde reclame-id de veiling in. Een bieder die in beide apps meedoet, ziet daardoor twee keer hetzelfde toestel, zonder enige moeite.
Waar de identifiers verschillen, is er cookie-sync. Twee partijen wisselen achter de schermen uit dat hun eigen nummer voor jou naar dezelfde persoon verwijst. Zo lijmen losse waarnemingen aan elkaar tot een profiel dat over apps heen loopt. De overlap in bieders die ik wel heb gemeten, is precies de laag waarop dit mechanisme kan draaien.
Ik noem dit met opzet als achtergrond en niet als resultaat. Mijn meting toont de gedeelde markt. Het koppelen tot een persoonsprofiel is het vak van de partijen op die markt. Het is aannemelijk gezien hoe die markt werkt, en tegelijk staat het niet in mijn onderschepte verkeer. Bewijsniveau: de overlap is gemeten, de koppeling is vermoed op grond van het bekende mechanisme.
Wat dit voor de beoordeling betekent¶
Voor mijn werk betekent het dat een app niet los te beoordelen is. De vraag naar wie je gedrag ziet, houdt op bij de app-grens, en het antwoord ligt buiten die grens, op de gedeelde markt. Wie een app schoon of vuil verklaart op grond van die app alleen, meet de verkeerde eenheid.
Het betekent ook dat de meest zeggende meting de vergelijking is. Een enkele biedstroom levert een geval. Twee onverwante biedstromen naast elkaar leggen levert het patroon, en het patroon is wat de gedeelde markt zichtbaar maakt. Precies daar zit de overlap van zes op zeven die deze notitie draagt. De losse app toont een symptoom. De vergelijking toont de structuur eronder.
Voor de wet heeft dat een consequentie die verder gaat dan een enkele app. De AVG vraagt om een grondslag en om transparantie over met wie je gegevens worden gedeeld. Als de partij die je in de ene app afwijst je in de volgende alsnog bereikt, dan is de transparantie per app onvolledig, want ze verzwijgt de gedeelde markt waarop de app is aangesloten. Wie eerlijk wil zijn over wie meekijkt, moet het veld benoemen en niet alleen de app. Zolang de toestemmingsvraag bij de app-grens blijft staan, meet ze een deel van het probleem en laat ze het grootste deel ongenoemd.
Zie ook Real-time bidding biedt jouw toestel in een veiling aan, in milliseconden, De locatiedatahandel draait op een handvol vaste spelers en Een biedstroom kan een veiling ingaan waar buitenlandse partijen op meebieden.
- Mick Beer, "Buienalarm, Marktplaats en 9292 sturen je profiel een veiling in"de meting waarin apps zonder onderling verband in dezelfde biedstroom uitkwamen
- IAB Tech Lab, "OpenRTB API Specification"waarom losse apps bij dezelfde ontvangers belanden