Is bidstream data personal data under GDPR?
Short answer
For a typical bid request, yes. GDPR Article 4(1) counts online identifiers as personal data, and an ordinary OpenRTB request carries several: device.ifa or cookie-derived ids in user.eids, device.ip or ipv6, geo coordinates, and the page or app being viewed, all attached to one browsing event. In 2024 the Court of Justice of the EU held in C-604/22 that even the TCF consent string is personal data when it can be combined with an IP address. This is engineering guidance, not legal advice.
Why the answer is usually yes
GDPR Article 4(1) defines personal data as information relating to an identified or identifiable natural person, and it names online identifiers explicitly as a way a person can be identified. A standard OpenRTB bid request carries several at once, all tied to a single moment of browsing:
| Path | What it carries |
|---|---|
device.ifa | The platform advertising identifier for the device |
device.ip, device.ipv6 | Network address, often stable enough to identify a household |
device.geo.lat, lon, type | Location, sometimes precise to a few metres |
user.id, user.buyeruid | Exchange-side and buyer-side user identifiers from cookie syncs |
user.eids[] | Extended identifiers, frequently derived from a hashed email |
site.page, app.bundle, content.* | What the person is reading, watching, or listening to right now |
Any one of these might be argued about in isolation. Together, in one message, about one person, at one instant, they are what the definition was written to cover. The field-by-field breakdown is in what is bidstream data.
What the courts and regulators have said
The most cited decision is the Belgian Data Protection Authority's 2022 finding against IAB Europe's Transparency and Consent Framework, followed by the Court of Justice of the EU in Case C-604/22 in March 2024. The Court held that a TC String is personal data when it can be combined with an identifier such as an IP address, and that IAB Europe is a joint controller for that processing.
Note the shape of that reasoning, because it generalises: the string alone is not obviously about a person, but it travels next to an IP address, and the combination makes the person identifiable. The same logic applies to most of the fields above, which is why arguments of the form "this single field is not personal data" rarely survive contact with how a bid request is actually structured.
What the protocol gives you to work with
OpenRTB does not decide legality; it carries the declarations. The signals that matter, with their exact paths:
regs.gdpr(0 or 1): whether the request is subject to GDPR, first-class since 2.6, previouslyregs.ext.gdpr.user.consent: the TCF consent string, first-class since 2.6, previouslyuser.ext.consent.regs.gppandregs.gpp_sid: the Global Privacy Platform string and the section ids it contains. These two are a pair; one without the other is unusable, which is why RTBlint flagsopenrtb.regs.gpp_without_gpp_sidandopenrtb.regs.gpp_sid_without_gpp.regs.coppa,device.lmt,device.dnt: child-directed treatment and the user's tracking preference.
Full paths, versions, and the migration from the ext locations are in the privacy signals reference.
The engineering consequences
- Correctness of the signal is a compliance artefact. A request that says
regs.gdpris 1 with nouser.consent, or a GPP string with no section ids, does not fail safe: it fails ambiguously, and every downstream recipient resolves the ambiguity its own way. - Old paths still leak. Sending consent only at
user.ext.consentmeans partners reading the 2.6 path see no consent at all. RTBlint reports this asopenrtb.field.moved. - Minimisation is a field-level decision. Precise coordinates, full IPs, and identifiers with no legitimate downstream use are the ones that draw scrutiny. Coarsening them is a change to the payload, which means it is testable.
- Every recipient is a decision. A bid request is broadcast to many bidders at once, so the number of parties receiving the data is a design choice, and it is visible in
source.schainand your partner list.
Validate the privacy block on real traffic in the tester, and keep a fixture per market in CI so a refactor cannot silently drop a consent field.
Scope of this answer
This page describes how the fields work and what has been decided publicly. It is engineering guidance for people building bid requests, not legal advice, and it does not address whether any particular processing has a valid legal basis. That question depends on your role, your jurisdiction, and facts that are not in the payload.