Your Matchmaking Model Is a Consumer Profile With a Leaderboard
Live-service telemetry was scoped as product analytics. What it actually produces is a per-person behavioural profile that decides what each player is offered, who they are matched against and how hard the game gets — which is regulated conduct, applied to an audience that includes people who cannot legally opt themselves in.
The Category Error at the Root
Studio privacy work is usually built around the storefront and the account system, because those are the surfaces where a person types their email address. Telemetry sits outside that boundary. It was instrumented by engineers, it is measured in events per second rather than in records, and the people reading it think in cohorts. Nobody maps it as a data product because on a dashboard it does not look like one.
But the pipeline does not store cohorts. It stores an ordered history of one person's behaviour keyed to an identifier that follows them across every session, and every aggregate on the dashboard is computed from those rows. When LiveOps reports that a segment of lapsing mid-spenders responds to a starter bundle, the segment is a list of individuals, and the campaign is executed against them one identifier at a time.
That is the whole analysis. Once the system can treat one player differently from another based on what it has learned about them, the law's language about profiling, inferences and unique identifiers applies to the thing you actually built, regardless of the vocabulary your team uses internally.
What the Model Layer Adds
Raw events are the smaller half of the exposure. The derived layer — predicted lifetime value, churn-risk band, skill rating, toxicity score, refund-abuse likelihood, bundle affinity — is personal information in its own right, and it is the part your notice at collection almost certainly fails to describe. "We collect gameplay data to improve the game" is a true sentence about a system that also decides which player sees a discount.
Write the notice against the model inventory, not against the event schema. For each model, record what it predicts, which features feed it, what business decision consumes the output, and how long the score is retained. Studios that do this discover two recurring surprises: a model whose owner left the company and whose output still gates a production offer, and a feature set that quietly includes a category the studio would not have chosen to collect had anyone asked.
Sensitive Categories Hiding in a Game Build
Several data types that carry heightened obligations show up in games without a deliberate decision. Precise geolocation arrives through an ad SDK's default configuration or a location-based event. Voice chat is content of a communication and, if you run voiceprint-style speaker identification for moderation or anti-cheat, it reaches biometric territory. Account recovery flows collect credentials. Some accessibility and wellbeing features touch health-adjacent inferences.
Each of these implicates the right to limit use of sensitive information, which is a separate control from the sale-and-sharing opt-out and needs its own surface. The audit question is narrow and answerable: for every SDK in the build, what does it collect at default settings, and did anyone change those settings deliberately?
Making the Opt-Out Actually Reach the SDKs
The most common defect in this category is a preference that exists in the database and nowhere in the runtime. A player toggles a setting, a row is written, and the ad SDK still initialises at launch with the same identifier as before because initialisation happens before the preference is fetched. It is a design bug rather than a legal one, and it is provable from outside your company with a proxy and ten minutes.
Fix it in the load order: resolve consent state locally before any third-party SDK initialises, ship a conservative default for a first launch where the state is not yet known, and propagate the signal forward to partners with the mechanism each one supports rather than assuming your flag is honoured implicitly. Then verify the opt-out the same way a regulator would — install the build, toggle the setting, and capture the traffic. Honour the browser-level global privacy signal on your marketing site as well; it is a frequent, easily checked miss on the exact surface that is easiest to check.
The Minors Question Studios Prefer Not to Ask
Opt-in consent for under-sixteens, with parental consent below thirteen, changes the architecture rather than the copy. A conservative reading forces age assurance ahead of the advertising and profiling pipeline, which means the gate must be evaluated before the first identifier leaves the device. Deferring it to first purchase or to a chat feature leaves the ad path ungated for exactly the population the rule exists for.
The wilful-disregard limb is what makes deliberate ignorance expensive. If your community data, support tickets, marketing channels or platform demographics indicate young players, the absence of an age question is not a defence. Decide the position explicitly, write down the evidence you relied on, and revisit it when the audience shifts — a documented and slightly wrong judgement reads very differently from no judgement at all.
Deletion Through a Warehouse That Was Built Append-Only
Analytics stacks are designed to never lose an event, which is the opposite of what a deletion request needs. Before you receive one, produce the fan-out map: live account store, raw event stream, daily and lifetime aggregates, feature store, model training snapshots, support ticket history, attribution and push partners, CRM segments, and backups. For each, write down the mechanism and the realistic latency.
Two judgement calls decide most of the work. Aggregates that no longer reference an individual can often stay if they are genuinely incapable of being associated back to the player, which is a real engineering standard rather than a naming convention. Training snapshots are harder: the defensible answer is usually a retention limit short enough that the snapshot ages out, combined with excluding deleted players from the next training run, because retraining on demand for one player is not operable.
A Studio Checklist That Fits on One Page
- Inventory every SDK in the shipping build and record what each collects at default settings.
- Inventory every model that scores a player, its features, its consumer and its retention.
- Rewrite notice at collection against those two inventories, including the monetisation purposes.
- Move consent resolution ahead of third-party SDK initialisation in the load order.
- Give sensitive-information limitation its own control, separate from the sharing opt-out.
- Gate the advertising and profiling pipeline behind age assurance, not behind first purchase.
- Map the deletion fan-out across warehouse, feature store, snapshots and partners.
- Test a real deletion end to end and record which steps required a human.
- Get contractual confirmation that partners and vendors do not train on your player content.
- Re-run the network capture after every release that changes SDKs or the launch sequence.
Frequently Asked Questions
Our publisher handles privacy. Does that remove the studio's exposure?
It allocates work, not obligations. The party that determines the purposes and means of the processing carries the duties, and in a typical publishing arrangement both parties determine something: the publisher runs the storefront, the marketing and often the attribution stack, while the studio decides what the client collects and which models consume it. Read the agreement for which party owns notice, rights-request fulfilment and SDK configuration, and look specifically for the gap between 'publisher handles player support' and 'publisher can actually delete rows from the studio's analytics warehouse'. That gap is where a request stalls. The fix is a written runbook naming a person on each side and a tested handoff, not a clause asserting that the other party is responsible.
Can we keep telemetry if we hash the player id?
Hashing is pseudonymisation, not deidentification. A hash that is stable across sessions still singles out one player and still lets you act on them differently, which is the capability the law is concerned with, and if you retain the mapping anywhere the linkage is trivially restored. Deidentification requires that the data cannot reasonably be associated with the person, plus technical safeguards against reidentification, a public commitment to maintain it in that form, and contractual obligations on recipients. The route that actually works for long-horizon analytics is aggregation to statistics that no longer carry a per-player row, which is a different dataset than a hashed event stream and usually answers the questions design and economics teams ask anyway.
Does personalised pricing or dynamic difficulty create extra risk?
It raises the stakes on everything above, because both are automated decisions with a direct financial or experiential consequence and both are highly visible to players. Two accounts comparing store offers is the most common way this becomes public, and the ensuing discussion is rarely about statutes. Practically: disclose the practice in plain language rather than burying it, keep the feature inputs documented so you can explain what drives an offer, exclude categories you would not defend in public, and make sure the profiling opt-out genuinely removes a player from individualised offers rather than merely from ad targeting. The reputational exposure here typically arrives before the regulatory exposure does.
We are a small indie studio using off-the-shelf analytics. Are we in scope?
Possibly, and the thresholds are worth checking rather than assuming. Coverage turns on criteria including revenue and the number of California consumers whose personal information you buy, sell or share — and a free-to-play title with an ad SDK can reach a consumer count far faster than its revenue suggests, because every install with an advertising identifier counts toward the sharing limb. Run the numbers against your actual install base by region before concluding you are exempt. Independent of scope, the SDK inventory and the load-order fix are cheap, and platform holder requirements and store policies impose overlapping obligations that apply at any size.
How does this interact with platform holder and app store rules?
They are parallel regimes and the store rules often bite first. Console and mobile platforms impose their own privacy manifests, tracking-permission prompts, data-safety declarations and children's-category restrictions, enforced through certification and store review rather than through litigation. The failure mode to watch for is a declaration that no longer matches the build after an SDK update, because the declaration was written once at submission and the dependency moved. Tie the store declaration and the privacy notice to the same SDK inventory and regenerate both at release, so the artefact a platform reviewer reads and the artefact a regulator reads describe the same software.
Capture Your Own Launch Sequence Before Someone Else Does
Install the shipping build on a clean device, opt out of everything the settings screen offers, and record the network traffic from cold start. Write down every identifier that leaves the device after the opt-out and which SDK sent it.
That list is your compliance gap stated in engineering terms. Fix the load order first, then the notice, then the deletion runbook — in that order, because the first is the one an outsider can prove without your cooperation.