Glossary/Android platform
App Set ID
Definition
The App Set ID is an Android identifier consistent across all apps published by the same developer on one device, provided for analytics and fraud prevention and barred by Google Play policy from any advertising use.
It exists to remove a bad incentive. Developers were using the GAID for legitimate non-advertising work — deduplicating users across a portfolio, spotting abusive accounts — which meant those use cases broke when a user opted out of ads. The App Set ID separates the two: it needs no consent and no permission, and in exchange it is scoped so narrowly that it is useless to an ad network.
Reading it
dependencies {
implementation("com.google.android.gms:play-services-appset:16.1.0")
}import com.google.android.gms.appset.AppSet
import com.google.android.gms.appset.AppSetIdInfo
AppSet.getClient(context).appSetIdInfo
.addOnSuccessListener { info: AppSetIdInfo ->
val id = info.id // UUID string
val scope = info.scope // SCOPE_APP or SCOPE_DEVELOPER
// Persist it, but expect it to change — see the reset rules below.
onAppSetId(id, scope)
}
.addOnFailureListener {
// No Play services, or the service is unavailable. There is no
// fallback identifier here by design; degrade rather than substitute.
onAppSetIdUnavailable()
}| Scope | Consistent across | When you get it |
|---|---|---|
SCOPE_DEVELOPER | All your apps on the device, matched by Play developer account | Apps published on Google Play under the same account |
SCOPE_APP | This app only | Sideloaded builds, or apps not distributed via Play |
Always read the scope, never assume developer scope
A debug build installed over adb typically returns SCOPE_APP, so cross-app deduplication that works in production silently does nothing in testing — or worse, appears to work because you only tested one app. Branch on info.scope and treat app-scoped values as non-comparable across your portfolio.
When it resets
The App Set ID is stable but not permanent, and the reset conditions are what make it a privacy-preserving identifier rather than a device fingerprint.
- It resets when all of your apps sharing the developer scope are uninstalled from the device. One remaining app preserves it.
- It resets after a prolonged period — on the order of thirteen months — with no app in the set installed.
- It resets on a factory reset.
- It does not reset when a user clears app data, and it is not resettable by the user in Settings the way the GAID is.
This makes it wrong for long-window cohorts
An analysis keyed on the App Set ID over more than a year will show reset devices as churned and re-acquired. For anything longer than a few months, key on your own account identifier and use the App Set ID for the pre-login stretch only.
The policy line, and why it is enforced
Google Play policy permits the App Set ID for analytics and fraud prevention, and prohibits it for ads personalisation and advertising measurement. That is not a technical limitation you can engineer around — it is a distribution requirement, and a violation is an app-removal risk rather than a warning.
| Use case | Permitted |
|---|---|
| Deduplicating users across your own apps | Yes |
| Detecting abusive or fraudulent accounts | Yes |
| First-party analytics and funnel measurement | Yes |
| Frequency capping an ad | No |
| Attributing an install to an ad campaign | No |
| Building an audience segment for targeting | No |
| Sharing with an ad network or data broker | No |
| App Set ID | GAID | |
|---|---|---|
| Scope | One developer's apps | Every app on the device |
| Requires a manifest permission | No | Yes — AD_ID at API 33+ |
| Affected by ads opt-out | No | Yes — returns zeros |
| User-resettable in Settings | No | Yes |
| Usable for advertising | No — policy prohibited | Yes, when available |
| Visible to an ad network | No | Yes |
The two are complements, not alternatives. If you are trying to substitute the App Set ID for a zeroed GAID in an attribution join, you are solving the problem in the wrong place — the install referrer is the identifier-free attribution signal, and it is deterministic, permitted, and unaffected by any of this.
Android SDK documentation
Our Android SDK does not read the App Set ID for attribution, because policy does not permit it. The documentation sets out which signals it does use, so you can confirm the integration keeps your Play Data Safety declaration accurate.
Open the android sdk documentation →Frequently asked questions
- What is the App Set ID on Android?
- It is an identifier that is consistent across every app a developer publishes on one device, retrieved through Google Play services with no manifest permission and no user consent required. It was introduced so that legitimate non-advertising work such as cross-app deduplication and fraud prevention would not depend on the advertising ID, which disappears when a user opts out of ads personalisation.
- Can I use the App Set ID for attribution?
- No. Google Play policy limits it to analytics and fraud prevention and explicitly prohibits ads personalisation and advertising measurement, and a violation risks removal from Play rather than a warning. It is also scoped to a single developer's apps, so an ad network's app would compute an entirely different value for the same device and no match would be possible anyway.
- When does the App Set ID reset?
- When every one of your apps sharing the developer scope has been uninstalled from the device, after roughly thirteen months with no app from the set installed, or on a factory reset. Clearing an app's data does not reset it, and unlike the advertising ID the user cannot reset it directly from Settings.
- What is the difference between SCOPE_APP and SCOPE_DEVELOPER?
- Developer scope means the value is shared across all your Play-published apps on that device, which is what makes cross-app deduplication possible. App scope means the value is unique to that single app, and it is what you receive for sideloaded builds or apps not distributed through Google Play — so values from different apps must not be compared.
- Is the App Set ID a replacement for the GAID?
- Not for advertising purposes, since policy prohibits that use and the developer scoping makes cross-party matching impossible by construction. It replaces the GAID only for the non-advertising work developers were previously doing with it, and for install attribution the actual replacement on Android is the Play Install Referrer API.
Related terms
- GAID — The GAID, or Google Advertising ID, is a resettable per-device identifier that Android provides for advertising and analytics, and which is replaced by a string of zeros for users who opt out of ads personalisation.
- Play Install Referrer — The Play Install Referrer is a Google Play API that lets a newly installed Android app read the referrer string and click timestamps recorded when the user arrived at its Play Store listing.
- Privacy Sandbox on Android — The Privacy Sandbox on Android was Google's initiative to replace cross-app advertising identifiers with on-device APIs for interest inference, audience targeting and conversion measurement, and Google announced its retirement in October 2025.