Does Your Analytics SDK Require the ATT Prompt? A 2026 Decision Tree for iOS Developers
Analytics does not automatically require Apple's App Tracking Transparency prompt. This decision tree explains exactly when ATT applies, what NSPrivacyTracking means, and how popular analytics SDKs behave in their default configurations.
Give iOS developers a definitive, per-SDK answer to whether analytics requires App Tracking Transparency.
Summary
Short answer: measuring how people use your own app does not require the App Tracking Transparency prompt. ATT governs tracking — linking user or device data with other companies' data for advertising or sharing it with data brokers — and the practical trigger for most apps is accessing the advertising identifier (IDFA). Analytics SDKs that never touch the IDFA and never share data for cross-app advertising do not need the prompt. This guide gives you the decision tree, the per-SDK reality in default configurations, and what to check in each SDK's privacy manifest. It is a practical developer guide, not legal advice; verify against Apple's current documentation and each SDK's own manifest before submission.
ATT is about tracking across companies, not measurement inside your app. First-party, anonymous analytics does not trigger it.
The practical trigger is the IDFA: any SDK or code path that reads the advertising identifier requires an authorized ATT prompt first.
Attribution and ad SDKs are the usual reason apps need ATT — not analytics SDKs, most of which stopped touching the IDFA years ago.
A privacy manifest's NSPrivacyTracking flag tells you what the SDK vendor itself declares; check it for every SDK in your app before filling out your privacy label.
What ATT actually governs
Apple's App Tracking Transparency framework requires user permission before an app tracks them. Apple's definition of tracking is specific: linking user or device data collected in your app with user or device data collected by other companies' apps, websites, or offline properties, for targeted advertising or advertising measurement — or sharing that data with data brokers.
Two things follow from the definition. First, the word 'analytics' never appears in it. Measuring feature usage, funnels, retention, or crashes inside your own app — even at scale, even with a third-party analytics vendor processing the data on your behalf — is not tracking, provided the data is not linked with other companies' data for advertising purposes. Second, the enforcement mechanism is concrete: the advertising identifier (IDFA) returns all zeros unless the user has granted ATT permission, and App Review looks for tracking behavior without a prompt. If nothing in your app reads the IDFA and nothing shares user-level data into the ad ecosystem, ATT is simply not your framework.
The decision tree
Walk your app through these questions in order. The first 'yes' tells you where you stand.
- 1. Does any SDK in your app read the IDFA (AdSupport / ASIdentifierManager)? → ATT prompt required before that read. This includes attribution SDKs configured for IDFA-based attribution.
- 2. Do you share user or device-level data with an ad network, measurement partner, or data broker for advertising? → ATT prompt required, IDFA or not.
- 3. Do you run third-party ads with personalization? → The ad SDK will require ATT for personalized ads (and typically falls back to contextual ads without it).
- 4. Do you only measure your own app's usage with anonymous or hashed identifiers, no IDFA, no ad-ecosystem sharing? → No ATT prompt required for analytics. Your privacy label still declares the collection; 'tracking' answers are No.
- 5. Unsure about an SDK? → Open its privacy manifest (PrivacyInfo.xcprivacy) and check NSPrivacyTracking, then its documentation. If a vendor cannot answer clearly, treat that as a red flag.
How popular SDKs behave in their default configurations
The table below reflects each vendor's publicly documented default behavior as of July 2026. Configurations change and many SDKs have optional ad-related features that change the answer — always verify against the SDK's current documentation and its bundled privacy manifest before submission.
Analytics and adjacent SDKs vs the ATT prompt (default configurations, July 2026 — verify before submission)
| SDK | Reads IDFA by default | ATT prompt required (default use) | Notes |
|---|---|---|---|
| AppMetricsKit | No | No | Anonymous hashed IDs only; no ad-ecosystem sharing |
| TelemetryDeck | No | No | Anonymized signals; privacy-first by design |
| Aptabase | No | No | Privacy-friendly event analytics |
| Firebase Analytics | No | No (default) | Ad personalization features / Google Ads linking change the analysis |
| Mixpanel | No | No | Stopped default IDFA collection in 2020 |
| Amplitude | No | No | No IDFA in default config |
| PostHog | No | No (default) | Configurable; replay/autocapture raise separate disclosure questions |
| AppsFlyer / Adjust / Branch | Only with ATT consent | Yes, for IDFA-based attribution | Can run consentless via SKAdNetwork-style attribution instead |
| Meta (Facebook) SDK with ads | For personalized ads | Yes, for tracking-based features | Personalized ads and some measurement require ATT consent |
NSPrivacyTracking and privacy manifests: the paper trail
Since Apple began requiring privacy manifests, every SDK that qualifies as third-party must ship a PrivacyInfo.xcprivacy file declaring three things you care about here: NSPrivacyTracking (a boolean: does this SDK engage in tracking as Apple defines it), NSPrivacyTrackingDomains (network domains that only operate with ATT consent), and NSPrivacyCollectedDataTypes (what it collects and whether it is linked to identity).
This gives you a fast audit method: search your derived data or SPM checkouts for PrivacyInfo.xcprivacy files and read the NSPrivacyTracking value for each dependency. An analytics SDK declaring NSPrivacyTracking true in default configuration is telling you it does something beyond first-party measurement. Note the flag describes the SDK's behavior, not your obligations — an SDK with tracking false can still become tracking if you feed its data into an ad platform yourself. Your app's ATT answer is the union of every SDK's behavior plus your own data flows.
Common misconceptions that cause App Review problems
Misconception one: 'I use analytics, so I need the ATT prompt to be safe.' Showing the prompt when nothing tracks is not harmless — you are asking users a scary question for no benefit, opt-in rates hover low, and you have now declared tracking behavior your app may not actually have. Show the prompt only when something genuinely requires it.
Misconception two: 'No ATT prompt means no privacy label disclosures.' Wrong direction — the App Store privacy label declares collection regardless of tracking. Anonymous analytics still typically declares usage data collection, just marked as not linked to identity and not used for tracking. Misconception three: 'ATT consent equals GDPR consent.' They are unrelated legal frameworks; an EU app can need a lawful basis under GDPR while requiring no ATT prompt, and vice versa. Data-minimal analytics helps both cases, but they are separate analyses.
Misconception four: 'The prompt is required for crash reporting or push notifications.' Neither tracks across companies in default configurations. The recurring pattern in App Review rejections is the opposite case: an app reads the IDFA somewhere — often via a stale ad or attribution SDK — without showing the prompt, or shows the prompt while its privacy label claims no tracking.
What this means for choosing an analytics stack
If you want the simplest possible compliance story, choose analytics that never touches the question: anonymous or on-device-hashed identifiers, no IDFA, no ad-ecosystem data sharing, and a privacy manifest declaring NSPrivacyTracking false. Your ATT analysis then reduces to the SDKs that actually do advertising work, your privacy label shrinks, and your App Review surface gets smaller.
That is the design position AppMetricsKit takes — no advertising identifiers, no cross-app tracking, payload guardrails that catch accidental PII, and privacy label helpers generated from the events you actually send. But whichever stack you choose, the decision tree above is the same: find every IDFA read, check every manifest, and let the answer follow from what your app actually does rather than from folklore.
Implementation checklist
How to apply this analytics SDK ATT prompt guide
Treat this article as an instrumentation brief before adding or changing analytics code. The goal is not to send more events. The goal is to make every event answer a specific product, revenue, privacy, or debugging question for your app team.
Define the decision first
Write down the decision this privacy & compliance work should support. Good examples are whether onboarding is leaking users, whether a paywall variant changes purchase intent, or whether a provider webhook is missing subscription lifecycle events.
Map the smallest event set
Choose the fewest event names and payload fields that answer the decision. Prefer stable names such as App.launch, Paywall.viewed, Purchase.completed, Subscription.renewed, and Error.occurred over ad hoc labels that only one release understands.
Verify in test mode
Send events from a debug build first, inspect the live event stream, and confirm that environment, platform, app version, product ID, paywall variant, and revenue fields appear where expected before counting the data in production dashboards.
Run a privacy pass
Review every payload key before launch. Remove email addresses, names, advertising IDs, phone numbers, precise location, free-form user text, raw payment tokens, and other fields that make analytics harder to defend during an app privacy review.
In AppMetricsKit, the safest workflow is to create an ingest key, install the iOS or Android SDK in test mode, send the first event, review Live Events, then promote the same taxonomy to production. After events are stable, connect RevenueCat, Adapty, Superwall, or server-side sources so subscription changes that happen outside the app are reconciled with client events.
Revisit this checklist whenever a new paywall, onboarding step, plan, trial offer, release channel, or data export is introduced. Most analytics quality problems come from small schema changes that were never reviewed, not from the dashboard itself.
FAQ
Common questions
Does using an analytics SDK require the App Tracking Transparency prompt?
Not by itself. ATT governs tracking across companies — chiefly IDFA access and sharing user-level data for advertising. Analytics SDKs that measure only your own app's usage with anonymous identifiers, in their default configurations, do not require the prompt. Attribution and ad SDKs are the usual reason an app needs ATT.
Does Firebase Analytics require the ATT prompt?
Not in its default configuration — Firebase Analytics does not read the IDFA by default. Enabling ad personalization features or linking with Google Ads changes the analysis, because analytics data then feeds advertising use cases. Verify your specific configuration and Firebase's current privacy manifest.
What is NSPrivacyTracking in a privacy manifest?
A boolean in an SDK's PrivacyInfo.xcprivacy file declaring whether the SDK engages in tracking as Apple defines it. Paired with NSPrivacyTrackingDomains, it lets you audit each dependency: any SDK declaring tracking true needs ATT consent before its tracking domains are contacted.
If my analytics needs no ATT prompt, is my App Store privacy label empty?
No. The privacy label declares data collection independently of tracking. Anonymous analytics typically still declares usage or diagnostics data — marked as not linked to identity and not used for tracking. The label must reflect every SDK in the app, not just analytics.
Is ATT consent the same as GDPR consent?
No. They are separate frameworks: ATT is Apple's platform rule about cross-company tracking; GDPR is EU law about processing personal data with a lawful basis. An app can require one, both, or neither. Data-minimal, anonymous analytics simplifies both analyses but does not merge them.