If a publisher or a user requires increased privacy protections, Google might
reduce the amount of information provided in the user agent fields. When the
information is reduced, these user agent representations are considered
generalized.

Generalized user agent representations provide increased privacy protections by
limiting information that might distinguish a given browser or a device from
other browsers or devices.

## Overview

The bid request contains two representations of User Agent information:
the `User-Agent` string found in `BidRequest.device.ua` and the
[`UserAgent` object](https://developers.google.com/authorized-buyers/rtb/openrtb-guide#useragent) found in
`BidRequest.device.sua`. Both fields contain information provided by the
request's user agent HTTP headers.

Non-generalized user agents can contain granular browser and operating system
versions and other detailed data that is reduced in the generalized form of the
user agent.

Generalization is backwards-compatible for browser and device type detection.
Bid requests indicate if the User Agent fields have been generalized in
[`BidRequest.ext.privacy_treatments`](https://developers.google.com/authorized-buyers/rtb/openrtb-guide#privacytreatments-object).

## Generalized UserAgent object

In the generalized `UserAgent`, the `version` fields from all `browser` entries
and from the `platform` are reduced to only contain the major version by
replacing any finer-grained version components with zeros. No other information
in the `UserAgent` object is removed.

The following example compares the original contents of `UserAgent.browser` to
its generalized form:

Original
`brand: "Chrome" version: ["96", "0", "4664", "92"]`

Generalized
`brand: "Chrome" version: ["96", "0", "0", "0"]`

Google doesn't always generalize browser and platform versions, in particular
when the full version is frozen by the browser. For example, the following
value of `UserAgent.browser` will not be modified:
`brand: "AppleWebKit" version: ["537", "36"]`.

When the `UserAgent` object is generalized, the bid request also contains the
`user_agent_data` field in the `PrivacyTreatments` object:

    BidRequest.ext.privacy_treatments: { user_agent_data: USER_AGENT_DATA_COARSENED }

## Generalized `User-Agent` string

In the generalized `User-Agent` string, browser and platform identifiers are
reduced to major versions only. For example, `"Chrome/96.0.4664.92"`
becomes `"​​Chrome/96.0.0.0"`. Frozen version components, such as
`"AppleWebKit/537.36"`, are preserved. These changes are equivalent to
what we described for the `UserAgent` object.

Unique to the `User-Agent` string, some details or non-standard elements
might also be redacted, for example the device's Build or firmware version, or
certain app-specific data that's often added at the end of the string.

The following example compares the original contents of the `User-Agent` string
to its generalized form:

Original
`Mozilla/5.0 (Linux; Android 11; M2007J20CG Build/RKQ1.200826.002; wv)
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0
Chrome/96.0.4664.92 Mobile Safari/537.36 [MyApp:CustomSignals:ABC123]`

Generalized
`Mozilla/5.0 (Linux; Android 11; M2007J20CG; wv)
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0
Chrome/96.0.0.0 Mobile Safari/537.36`

When the `User-Agent` string is generalized, the bid request contains the
`user_agent` signal in the `PrivacyTreatments` object:

`BidRequest.ext.privacy_treatments: { user_agent: USER_AGENT_COARSE }`

Google uses similar approaches to generalizing the `User-Agent` string and the
`UserAgent` object. As a result, the generalized `User-Agent` string and the
generalized `UserAgent` object carry a similar amount of information.