
ATT pre-prompt optimization: a testing framework for mobile apps
Structure tests for iOS App Tracking Transparency pre-prompts, timing, and copy so you improve opt-in without sacrificing onboarding conversion or trial starts.
iOS App Tracking Transparency (ATT) forced every growth team to relearn measurement. The system dialog is fixed; the pre-prompt screen before it is yours. That screen, its timing in onboarding, and what happens on deny vs allow drive opt-in rates and downstream campaign performance.
This post offers a testing framework for ATT pre-prompts: principles, variants to try, metrics, and how to run experiments in Rheo alongside RevenueCat paywalls and your MMP (AppsFlyer, Adjust, etc.).
ATT basics (what you control vs what you do not)
| Layer | Who controls it |
|---|---|
| System ATT dialog copy and buttons | Apple |
| Pre-prompt screen copy, design, and timing | Your app |
When requestTrackingAuthorization is called | Your app (via Rheo OS permission step or host code) |
| Post-deny product experience | Your app |
Apple expects pre-prompts to explain why you ask, without mimicking the system dialog or offering incentives for tracking. Rheo's builder warns when flows mix attribution-sensitive steps without guidance; treat that as a compliance nudge, not legal advice.
Why pre-prompt testing belongs in onboarding experiments
ATT is not independent of monetization:
- Showing ATT before a paywall can reduce trial starts (friction and privacy salience).
- Showing ATT after purchase may improve trials but delay attribution for paid campaigns.
- Denied users may still convert organically but look worse in ROAS reports.
Testing ATT in isolation on a test build while production onboarding changes invalidates learnings. Include ATT position in full-flow experiments when possible.
The framework: four dimensions
Structure tests across four dimensions. Change one dimension per variant when starting out.
Dimension 1: Timing in the funnel
| Position | Trade-off |
|---|---|
| Early (after splash) | Maximum attributed installs; highest funnel risk |
| After value (post preview or personalization) | Better context; fewer starts see ATT |
| After trial / purchase | Protects conversion; hurts paid UA measurement |
| On second session | Minimal first-session friction; delayed attribution |
Document primary metric upfront: opt-in rate, trial starts, or CAC payback from MMP dashboards.
Dimension 2: Pre-prompt creative
Elements to test on the Rheo screen before the OS permission step:
- Headline clarity: "Help us keep the app free" vs "Support relevant ads"
- Length: One sentence vs three bullets
- Visual: Illustration vs plain text
- CTA on pre-prompt: Continue vs "Next" (system dialog follows)
Do not replicate Apple's dialog. Do not gate core features on tracking consent.
Dimension 3: Deny and allow branches
Wire OS permission outcomes in the flow graph:
| Outcome | Branch behavior |
|---|---|
| Authorized | Continue to next onboarding step or paywall |
| Denied | Same path vs reduced personalization vs explicit "you can change in Settings" |
Denied users should still complete onboarding unless product policy says otherwise. Measure completion by ATT outcome to detect punitive branching.
Dimension 4: Coupling with other permissions
ATT plus push plus location in one session stacks friction. Test:
- Staggered: One permission per session
- Bundled pre-prompt explaining multiple asks (still separate system dialogs)
- Paywall first: Monetize before any permission
Metric matrix
Track all of the following per experiment variant:
| Metric | Source |
|---|---|
| ATT opt-in rate | OS outcome events in Rheo timeline |
| Flow completion | Rheo flow analytics |
| Trial starts | Rheo iap_purchase + RevenueCat |
| Paywall dismiss | RevenueCat surface_outcome |
| Installs attributed (delayed) | MMP, with SKAN where applicable |
| If opt-in rises but trials fall | Interpretation |
|---|---|
| Yes | Timing too early or pre-prompt scary |
| Opt-in flat, trials up | Timing helped; keep variant |
| Both rise | Rare win; promote quickly |
Suggested test sequence (12 weeks)
| Week | Test | Variants |
|---|---|---|
| 1-2 | Timing baseline | Early vs after screen 2 value |
| 3-4 | Pre-prompt copy | Short vs bullet benefits |
| 5-6 | Post-deny path | Same path vs settings education |
| 7-8 | Paywall interaction | Paywall before vs after ATT |
| 9-10 | Second session ATT | Session 1 skip vs show |
| 11-12 | Winner validation | Holdout 10% on old control |
Adjust length to traffic. Low volume: run timing and paywall interaction as one combined experiment with fewer arms.
Implementation in Rheo
- Add an OS permission step for App Tracking Transparency on the canvas (enabled under App settings → Canvas controls if restricted).
- Place pre-prompt screen immediately before the permission step.
- Connect branches on grant vs deny.
- Publish variant flows and assign to a channel experiment.
- Filter analytics by experiment variant and compare opt-in from customer timelines.
Pair with AppsFlyer (or your MMP) via Rheo integrations for attribution context on decisions. Attribution is cached client-side (~24 hours) to avoid hammering the MMP.
iOS review and privacy
Align timing with Apple guidelines. Flows that branch on attribution for pricing or sensitive treatment may trigger review questions. Use builder validation messages as a pre-flight check.
Pre-prompt copy patterns (starting points)
Test legally reviewed copy for your app. Patterns that often test well:
Transparency:
"We use data to measure which ads bring people to the app and to improve your experience. On the next screen, you can choose whether to allow tracking."
Outcome-focused:
"Allowing tracking helps us show you more relevant offers and keep subscription prices lower."
Short:
"Tap Continue, then choose whether to allow tracking on the next screen."
Avoid: "Allow tracking to unlock features" (incentive). Avoid fake system dialogs.
SKAN and MMP reality check
Even perfect ATT opt-in does not restore pre-iOS 14 granularity. Pre-prompt tests optimize fraction of IDFA-bearing users, not perfect cohorts. Combine with:
- SKAN campaign structure from your MMP
- Broad vs narrow campaign evaluation windows
- On-platform metrics (trial starts) as guardrails
Rheo does not replace SKAN modeling. It keeps in-app outcomes visible while you tune ATT.
Sample size and ethics
ATT opt-in is binary per user. Use standard proportion power calculators. Typical apps need thousands of starts per arm for a few-point lift detection.
Do not dark-pattern. Sustainable opt-in comes from timing and honest copy, not trick screens.
Troubleshooting
| Symptom | Check |
|---|---|
| Opt-in 0% on TestFlight | ATT prompt may not show in some test builds |
| Different opt-in iOS versions | OS adoption mix in segment filters |
| MMP mismatch vs Rheo | Event order and 24h attribution cache |
| Completion drop only on iOS | ATT position or pre-prompt load |
Checklist before launch
- Legal reviewed pre-prompt copy
- Primary metric chosen (opt-in vs trials vs composite)
- Variants differ on one dimension
- Deny branch is non-punitive
- Experiment end date set UTC
- MMP dashboard aligned on date range
- Post-test promote plan documented
Regional and demographic notes
ATT applies to iOS only, but onboarding tests often run on both platforms. Report:
| Report slice | Include |
|---|---|
| Executive summary | iOS opt-in + global trial starts |
| Product deep dive | iOS ATT branch vs Android same funnel step |
| UA team | MMP opt-in cohorts by campaign |
Android does not use ATT, but parallel permission tests (notifications, location) benefit from the same timing framework.
Advanced: coupling with AppsFlyer decisions
With Rheo + AppsFlyer enabled, decision nodes can branch on attribution context cached client-side. Example: show a shorter pre-prompt for users already attributed from a trusted campaign. Test carefully; over-personalization can confuse holdout analysis.
See Rheo + AppsFlyer for setup. Align ATT timing with AppsFlyer's iOS guidance.
Post-test playbook
| Outcome | Action |
|---|---|
| Winner clear | Promote flow version; update internal wiki |
| Inconclusive | Extend 7-14 days |
| Opt-in up, trials down | Revert timing; try copy-only variant |
| Trials up, opt-in down | Accept if UA uses SKAN; else compromise timing |
Schedule a holdout (5-10% on old control) only if compliance allows continuous assignment splits.
Long-term governance
Name ATT experiments att-timing-2026q3 in your experiment titles. Privacy and growth leads should co-sign pre-prompt copy changes. Re-test after major iOS releases (Apple occasionally adjusts ATT UX surrounding the dialog).
Store results in the same repo as onboarding experiments so institutional memory survives team changes.
Bring ATT into the same experiment as onboarding
The teams that win treat ATT as a funnel step, not a compliance checkbox. Model it in the same graph as your paywall, measure it with the same rigor, and ship improvements OTA when Apple and your lawyers agree. Combined with RevenueCat for trials and your MMP for campaigns, you get a complete picture: opt-in, completion, and revenue in one assignment.