App Tracking Transparency (ATT)

App Tracking Transparency (ATT) is Apple’s privacy framework, introduced with iOS 14.5 in April 2021, that requires every iOS, iPadOS, and tvOS app to obtain a user’s explicit permission before tracking their activity across other companies’ apps and websites. When an app calls the ATT API, the system displays a standardized prompt with two choices: “Allow” or “Ask App Not to Track.” Without consent, the app cannot access the device’s Identifier for Advertisers (IDFA), fundamentally reshaping how mobile marketers measure ad campaigns, attribute installs, and personalize user experiences on Apple devices.

How App Tracking Transparency works

ATT is built around a single piece of UI: a system-rendered permission dialog that an app must trigger before it can read the device’s IDFA or otherwise track the user across third-party properties. The prompt is delivered through Apple’s AppTrackingTransparency framework, and its wording is fixed by Apple — developers can only customize a short purpose string that appears beneath the system text.

According to Apple, “tracking” specifically means linking user or device data collected from your app with data collected from other companies’ apps, websites, or offline sources for advertising or advertising measurement. Sharing data with a data broker also qualifies as tracking, regardless of whether your app reads identifiers like the IDFA.

Tracking

The ATT prompt

Every ATT prompt has three components:

  1. A fixed system question: “Allow [App Name] to track your activity across other companies’ apps and websites?”
  2. A short, developer-supplied purpose string explaining why tracking is requested.
  3. Two buttons: “Ask App Not to Track” and “Allow.”

The user is opted out by default until they tap “Allow.” Apps can show a custom pre-prompt screen beforehand to educate users on the value of opting in, but the system prompt itself cannot be modified, skipped, or replaced.

Authorization states

The ATT framework returns one of four authorization statuses, each of which determines what your app can and cannot do.

StatusMeaningIDFA returned
Not determinedPrompt has not yet been shownAll zeros
AuthorizedUser tapped “Allow”Real IDFA
DeniedUser tapped “Ask App Not to Track” or disabled tracking globallyAll zeros
RestrictedTracking is blocked at the device level (e.g., child accounts, MDM)All zeros

Why Apple introduced ATT

ATT is the operational core of Apple’s broader privacy strategy. Before iOS 14.5, every iPhone shipped with the IDFA available to apps by default, and users had to dig into Settings to enable “Limit Ad Tracking” if they wanted to stop personalized advertising. Roughly 70% of users never did, which gave ad networks, attribution providers, and developers nearly unrestricted ability to build cross-app behavioral profiles.

Apple flipped that default. ATT moved the iOS ecosystem from opt-out to opt-in tracking and tied access to the IDFA — the linchpin of cross-app attribution — to a single tap on a system dialog. Combined with App Store privacy nutrition labels and SKAdNetwork, ATT was Apple’s mechanism for forcing the entire mobile advertising stack to either earn user consent or operate on aggregated, anonymized data.

ATT and the IDFA: what changed

The Identifier for Advertisers (IDFA) is the unique, per-device ID iOS exposes to apps for advertising and attribution. Before ATT, it was always available; after ATT, it’s only returned to apps that obtain explicit consent. Apps that don’t get consent receive a string of zeros instead of a real ID.

AspectBefore ATT (pre-iOS 14.5)After ATT (iOS 14.5+)
Default tracking stateOpted inOpted out
IDFA accessAvailable unless user enabled LATAvailable only with user permission
User-level attributionDefaultOnly for opted-in users
Consent UXSettings toggle (LAT)Per-app system prompt
Aggregated alternativeNot widely usedSKAdNetwork / AdAttributionKit

Impact on advertisers and subscription apps

ATT compressed the amount of deterministic, user-level data available to advertisers on iOS, with knock-on effects across user acquisition, attribution, and lifetime-value modeling. For subscription apps in particular — where the unit economics depend on tracking trial-to-paid conversion and renewals over months — the loss of granular IDFA-based attribution forced a wholesale rethink of how marketing performance is measured.

Attribution challenges

Two consent layers compound the problem. To stitch a paid install back to an ad impression, both the publishing app (where the ad ran) and the destination app (the advertiser) need to obtain ATT consent — a “dual opt-in” that drops effective IDFA-based attribution well below the headline opt-in rate. Without it, MMPs cannot deterministically link an install to its source, and probabilistic methods carry meaningful margins of error.

SKAdNetwork and AdAttributionKit

Apple’s privacy-preserving alternative is SKAdNetwork (SKAN), since complemented and partially superseded by AdAttributionKit. Both frameworks deliver attribution at the campaign level rather than the user level: ad networks learn that a campaign produced installs, but not which user installed. Postbacks are delayed, conversion values are quantized, and aggregation thresholds limit how granular reporting can get. For a fuller picture of how this plays out on iOS, see Adapty’s deep dive on iOS 14, IDFA, and attribution.

How to implement ATT in an iOS app

Implementing ATT is a two-step process: declare the tracking purpose in your app’s Info.plist, then call the ATT API at an appropriate moment in your user flow.

Add the privacy description

Add the NSUserTrackingUsageDescription key to your Info.plist with a one- or two-sentence string explaining why your app wants to track. This string appears below the system prompt, and Apple rejects apps that ship vague, generic, or misleading text.

Request authorization

Call ATTrackingManager.requestTrackingAuthorization(completionHandler:) from the main thread when your app is in the foreground. The system shows the prompt only on the first call per app install — subsequent calls return the cached status without re-prompting. Always check the returned status before reading ASIdentifierManager.advertisingIdentifier; if the status is anything other than .authorized, the IDFA will be all zeros.

Best practices for the ATT prompt

Wording is fixed, but timing and context aren’t. Three placement strategies dominate, each with a different tradeoff between audience reach and consent quality.

Funnel stageTriggerAudience reachTypical opt-in rate
Early funnelFirst app launch or first sessionLargestLower
Mid funnelAfter onboarding or first value momentMediumMedium to high
Late funnelAccount creation or first purchaseSmallestHighest

The most consistent levers are: showing a pre-prompt that explains a concrete benefit (“personalized recommendations” or “free, ad-supported content”), waiting until users have experienced value before asking, and being honest about what data is shared. Pre-prompts must not visually mimic the system dialog — Apple’s review team rejects apps that try to confuse users into tapping “Allow,” and forbids offering incentives in exchange for opt-in.

ATT opt-in rates: current benchmarks

Opt-in rates have trended upward as users become more familiar with privacy prompts and developers refine their pre-prompt and onboarding flows. Adjust’s Q2 2025 data places the global average around 35%, while AppsFlyer’s earlier benchmarks reported figures closer to 50% in some cohorts. Variance by country and vertical is significant — gaming and entertainment tend to underperform, while utilities and finance often see higher consent.

MetricApproximate value
Global ATT opt-in ~35%
Reported high-end ~50%
Effective IDFA attribution rate (after dual opt-in)Significantly lower
Restricted devices (cannot be prompted)~14% of iOS users

ATT vs Android privacy frameworks

Google has taken a different path with Android. The Google Advertising ID (GAID) — Android’s IDFA equivalent — has historically been accessible by default, but Android 12 introduced an opt-out toggle, and Google’s Privacy Sandbox aims to phase out cross-app identifiers in favor of on-device, aggregated signals. The user-level identifier IDFV (Identifier for Vendors), which is shared across apps from the same publisher, remains available on iOS without ATT consent and continues to be useful for first-party measurement.

AspectiOS (ATT)Android (GAID + Privacy Sandbox)
Consent modelOpt-in, per appOpt-out, system-wide
Default trackingDisabled until permission grantedEnabled until user resets ID
Aggregated frameworkSKAdNetwork / AdAttributionKitPrivacy Sandbox APIs
Identifier when deniedZeroed IDFAZeroed GAID

FAQ

Apple announced ATT at WWDC 2020 and rolled it out in iOS 14.5, released on April 26, 2021. Enforcement began at the same time, meaning any app submitted to the App Store after that date had to use the ATT framework if it wanted to access the IDFA or otherwise track users across third parties.

The prompt is only required if your app actually engages in tracking as Apple defines it — linking app data with data from other companies for advertising or sharing data with brokers. Apps that don’t track don’t need to call the ATT API. However, if you do track without prompting, your app will be rejected during App Store review or removed if discovered later.

The system returns a denied status, the IDFA reads as a string of zeros, and your app cannot share device-level data with third parties for advertising purposes. You can still use first-party data — including the IDFV — for in-app analytics, personalization, and cross-app measurement within your own publisher account.

Only partially. The system question and button labels are fixed. You control the purpose string in your Info.plist (the small print under the system text) and you can show your own pre-prompt screen before triggering the system dialog. Apple’s review guidelines forbid pre-prompts that mimic the system UI, offer incentives for opting in, or shame users for declining.

The IDFA is the actual identifier — a string that uniquely identifies a device for advertising. ATT is the consent framework that controls access to it. ATT is the gate; the IDFA is what’s behind the gate.

No. ATT is Apple-only. Android uses the Google Advertising ID (GAID), which has historically been opt-out rather than opt-in, although Google’s Privacy Sandbox is gradually moving Android toward more privacy-preserving, aggregated measurement.

No. The system displays the prompt only on the first call to requestTrackingAuthorization; subsequent calls return the cached status without showing UI again. To change their answer, users have to manually open Settings → Privacy & Security → Tracking and toggle the per-app permission.

Subscription apps depend on long-horizon attribution — connecting an ad impression today to a paid subscription that materializes weeks later, then renews for months. Without IDFA, MMP-based deterministic attribution covers only opted-in users. Most subscription teams now combine SKAdNetwork or AdAttributionKit postbacks for paid acquisition with first-party event tracking (via the IDFV or internal user IDs) to measure trial-to-paid conversion, retention, and LTV inside their own data. For a deeper walkthrough, see Adapty’s guide to App Tracking Transparency 
Table of contents