App Tracking Transparency (ATT) framework

As per Apple's guidelines, any app that collects end-user data and shares it with third parties for tracking or advertising-related purposes must use the AppTrackingTransparency (ATT) framework. This requires app publishers to obtain explicit consent from users to access their iOS advertising ID (IDFA).

To gain user consent, the ATT framework presents an app-tracking authorization request to the user. A user can still control privacy at the app level or block all apps from tracking them at a global level.

AppTrackingTransparency is required from iOS 14.5, iPadOS 14.5, and tvOS 14.5.

Here, you'll find out how to set up ATT consent management with Adjust, and view your raw data.

Before you begin

To use this feature, you first need to download and set up the Adjust SDK for your platform. Follow the instructions linked below to get started.

This feature requires Adjust SDK v4.23.0 and later.

⚙️ iOS / Unity / Cordova / Flutter / Titanium / Corona / Cocos2d-x / React Native

Once you have the Adjust SDK installed and configured, follow the guides linked below to use this feature:

📖 iOS / Unity / Cordova / Flutter / Titanium / Corona / Cocos2d-x / React Native

We recommend using the latest stable version of Xcode to build your app.

How it works

By default, a user is opted-out of tracking from app launch. When the AppTrackingTransparency framework is triggered, users are served a pop-up requesting consent to track them across the app. The ATT request works on a per app basis, meaning that users can decide to opt-in for specific apps as they choose.

For users who opt-out of tracking, the IDFA returns a string of 0s. For users who opt-in, the IDFA is available and can be used for attribution purposes.

ATT statuses

The ATT framework has five states of user consent. These determine access to app-related data that can be used for tracking the user or the device. For more information about each of the status values for app tracking authorization, see Apple's developer documentation.

null-The value returned if a user is on a pre-iOS 14 device, or the developer has not implemented the ATT framework in the app.
0Not DeterminedThe value returned if a user has not yet received a request to authorize access to app-related data that can be used for tracking the user or the device.
1RestrictedThe value returned if authorization to access app-related data that can be used for tracking the user or the device is restricted.
2DeniedThe value returned if the user denies authorization to access app-related data that can be used for tracking the user or the device. This includes having "Allow apps to request to track" switched OFF at a global level.
3AuthorizedThe value returned if the user authorizes access to app-related data that can be used for tracking the user or the device.

What does "Restricted" really mean?


Global-level setting

In the iPhone, there is a setting that allows users to control app-tracking requests at a global level. The default setting is to allow apps to ask for permission to track you. When this setting is switched OFF, a user's ATT status is returned as Denied.

Launch the ATT consent pop-up via Adjust

You can use the Adjust SDK wrapper function to present the app-tracking authorization request to users.

Adjust’s SDK wrapper for the ATT framework means you don’t have to do any extra work to implement Apple’s ATT API. When the wrapper is called the first time, the iOS pop-up launches. Every time after, the wrapper retrieves the tracking authorization status. This is sent to the Adjust backend, and Adjust relays the information directly to you.

Raw data exports

The Adjust SDK lets you receive the ATT status when a user performs in-app actions, as well as enrich your data with the IDFA if it becomes available.

Adjust uses the activity type ATT update (iOS) to send information about a user's ATT status in your callbacks. This is included by default in your global callbacks, which provide a full list of data points from all Adjust-tracked activities. 

If you are using global callbacks and a user’s authorization status changes, user-level data is sent directly to your servers just seconds after Adjust tracks the event. To quickly find these events, filter the {activity_kind} for att_update.

For a full overview of how to create global callback URLs, follow Adjust’s guide to Real-time Callbacks.

For all raw data exports our current waterfall attribution methods persist. If a user has not opted-in, you can see their status via {att_status}.

Attribution updates on iOS 14.5+

If a device's ATT status changes to Authorized, Adjust can now access the IDFA. This lets us check for a matching engagement to use for attribution. If there is a change in attribution source, Adjust sends updated attribution information in your raw data and an in-app attribution callback on the next event or session.

ATT status change attribution updates only apply to:

  • iOS 14.5+ devices.
  • Devices currently attributed to Organic.

How do I receive attribution updates?



The Adjust placeholder {att_status} lets you receive information about how an iOS 14+ user chooses to share their data. Add the placeholder to your callback URL or CSV definition to receive the ATT status in your raw data. The user status is populated using four possible integer values.

Example: att_status=2

Changes to {tracking_enabled} and {tracking_limited}

There are changes to two existing placeholders to assist you with the transition to ATT tracking. This change is applicable for supported SDK versions and iOS14.5+ users.

The behavior for {tracking_enabled} and {tracking_limited} changes in the following way:

  • Returns 1 if the user opt-in status is authorized
  • Returns 0 if the user opt-in status is denied, not determined, or restricted
  • Returns 1 if the user opt-in status is denied, not determined, or restricted
  • Returns 0 if the user opt-in status is authorized

For iOS 14.0-14.4 users

Changes to the Limit Ad Tracking (LAT) KPI

Apple plans to deprecate the Limit Ad Tracking (LAT) setting. This means that if you don’t update to the minimum supported SDK version, Adjust sets the LAT value based on whether the IDFA is present. If the IDFA is a string of zeroes, LAT is considered ON.

In addition, Adjust has transitioned how the LAT KPI behaves in the dashboard. Until you switch to using {att_status}, note these changes. This is only applicable for supported SDK versions and iOS14+ users.

The LAT KPI is filled using the following behavior:

For iOS 14.5 and above

For iOS 14.0-14.4