Loading...
Loading...
When the user wants to set up, debug, or interpret app install attribution — including SKAdNetwork (SKAN), Apple's AdAttributionKit, Google Play Install Referrer, MMPs (AppsFlyer, Adjust, Singular, Branch, Kochava), deep links, deferred deep links, conversion values, postback windows, or privacy thresholds. Use when the user mentions "SKAdNetwork", "SKAN", "SKAN 4", "AdAttributionKit", "AAK", "MMP", "AppsFlyer", "Adjust", "Singular", "Branch", "attribution", "conversion value", "postback", "Install Referrer", "deferred deep link", "iOS 14.5", "ATT", "App Tracking Transparency", "IDFA", or "I can't measure my ad campaigns". For paid campaign strategy, see ua-campaign and apple-search-ads. For analytics events, see app-analytics.
npx skill4agent add eronred/aso-skills attribution-setupapp-marketing-context.md| Mechanism | Status | Use for |
|---|---|---|
| IDFA (with ATT opt-in) | Available but ~25% opt-in rate | Deterministic attribution where you have it |
| SKAdNetwork (SKAN 4.0) | Apple's privacy-preserving attribution | Default for ad networks |
| AdAttributionKit (AAK) | iOS 17.4+, Apple's evolution of SKAN | Use alongside SKAN; required for some networks |
| MMP probabilistic | Banned by Apple for fingerprinting; allowed for limited use | Limited — check MMP terms |
| Apple Search Ads attribution | Detailed (campaign/keyword) for ASA only | Always on for ASA |
| Concept | What it means |
|---|---|
| Postback | The signal Apple sends to your ad network confirming an install |
| Conversion value (CV) | 6-bit (fine, 0–63) or 2-bit (coarse: low/medium/high) value you set to encode user behavior |
| Postback window | 3 windows: 0–2 days, 3–7 days, 8–35 days post-install |
| Privacy threshold | If install volume too low, value becomes coarse or null |
| Hierarchical source ID | 4-digit ID encodes campaign + ad + creative |
| Web-to-app | SKAN now supports Safari → App Store install attribution |
| CV | Behavior |
|---|---|
| 0 | Install only |
| 1–5 | Onboarding completed |
| 6–15 | Activation event done (e.g. first session ≥X) |
| 16–30 | Trial started |
| 31–45 | Paywall viewed N times (intent) |
| 46–63 | Subscription purchased |
AppsFlyerLib.shared().start()applicationDidFinishLaunchinglogEventAdjust.appDidLaunch(...)AdjustDeeplink| Mechanism | Use |
|---|---|
| Google Play Install Referrer API | Deterministic install source — always integrate |
| Google Ads Attribution | Built-in for UAC |
| MMP SDK | Same as iOS — for Meta, TikTok, etc. |
| Type | When to use |
|---|---|
| Universal Links (iOS) / App Links (Android) | Open app from web/email if installed; fallback to web |
| Deferred deep link | Install from ad → after first open, route to specific screen |
Custom URL scheme ( | Internal navigation only — don't use for ads |
| Symptom | Likely cause |
|---|---|
| MMP shows installs, ad network doesn't | Postback timing / privacy threshold not met |
| ASA Attribution shows higher installs than MMP | MMP missing |
| Conversion values all 0 or null | Privacy threshold (low volume) or schema not implemented in app |
| Install Referrer empty on Android | API not called within 60s of first launch |
| Deferred deep link drops parameters | App not handling cold-start launch params |
| Revenue mismatch MMP vs RevenueCat/ASC | Currency conversion + refunds + family sharing — expect 5–10% delta |
ATTRIBUTION SETUP — <App Name>
CURRENT STATE:
Platforms: iOS / Android
MMP: <name or none>
Channels live: <list>
Known issues: <list>
RECOMMENDED STACK:
iOS: <ASA Attribution + SKAN 4 + AAK + MMP + ASA API>
Android: <Install Referrer + MMP + Google Ads>
Deep linking: <Universal Links + Branch/AppsFlyer OneLink>
CONVERSION VALUE SCHEMA (iOS, 6-bit fine):
Window 1: <table of CV → event>
Window 2: <table>
Window 3: <table>
IMPLEMENTATION CHECKLIST:
[ ] <step 1>
[ ] <step 2>
TESTING PLAN:
- Install from each channel, verify postback in MMP within X hours
- Trigger CV update, verify it propagates
- Test deferred deep link from each ad sourceua-campaignapple-search-adsapp-analyticsasc-metrics