| name | ios-app-growth-marketing |
| description | Grow an iOS/iPadOS app: paid UA and ad attribution under ATT (SKAdNetwork v4, AdAttributionKit, AppsFlyer/Adjust/Branch/Singular, Apple Search Ads, Meta/TikTok/Google), subscription pricing and paywall price display (StoreKit 2 + RevenueCat), PPP territory pricing, CRO, launch (Product Hunt, App Store featuring), referral/viral loops (K-factor), retention/churn/LTV, marketing psychology. Use when: "market my app", "grow my app", "user acquisition", "paid ads", "ROAS", "CAC", "ATT", "SKAdNetwork", "conversion value", "MMP", "Apple Search Ads", "pricing strategy", "paywall", "free trial", "PPP pricing", "referral program", "launch strategy", "retention", "churn", "LTV". |
| license | MIT |
iOS App Growth & Marketing
End-to-end growth engineering for iOS/iPadOS apps. This skill covers the four
pillars of app growth and the iOS-native plumbing each one depends on:
- Acquisition — paid UA, ad-attribution measurement under ATT (the
iOS-specific part most generic marketing advice gets wrong).
- Monetization — subscription/IAP pricing strategy, StoreKit 2 + RevenueCat
paywall pricing display, purchasing-power-parity territory pricing.
- Activation & retention — onboarding-to-paywall flow, CRO, referral/viral
loops, churn reduction.
- Strategy — launch sequencing, growth-tactic selection, marketing
psychology, competitor positioning.
Scope boundary. This skill is about growing an app that already exists.
It does not cover App Store listing optimization (keywords, screenshots,
title/subtitle — that's the app-store-optimization / ASO skill), the
release/submission mechanics (asc CLI, TestFlight, build upload — that's
app-store-release), or App Review compliance checks (that's
app-review-preflight). When a request is purely ASO, release, or review,
delegate. This skill owns demand generation, attribution measurement, pricing,
CRO, and viral/retention loops.
Decision tree — route to the right reference
What does the user need?
│
├─ "Installs going Organic / attribution missing / ATT prompt / SKAN / AdAttributionKit
│ / conversion value / Meta AEM / MMP setup / IDFA / postback receiver / dual-call"
│ └─→ references/attribution-and-att.md
│ The iOS-native acquisition-measurement layer. SDK init order, ATT 4-state
│ handling, SKAdNetwork v4 + AdAttributionKit (incl. iOS 18 PostbackUpdate +
│ server-side postback receiver), per-channel measurement, MMP troubleshooting.
│
├─ "TikTok SDK / TikTokBusinessSDK / disableSKAdNetworkSupport / tiktokAppId / SKAN owner"
│ └─→ references/tiktok-channel.md
│ Business-SDK-vs-OpenSDK trap, SKAN-ownership decision matrix, init order,
│ hybrid event_id dedup, Events API S2S.
│
├─ "Meta AEM greyed-out / extinfo / ATE verification error / CAPI app events / CUID"
│ └─→ references/meta-attribution.md
│ 7-prereq AEM checklist, ATE 5-cause list, the extinfo 16-position array.
│
├─ "Apple Search Ads / ASA / CPT / keyword bids / campaign structure / Search Terms / CPP"
│ └─→ references/apple-search-ads.md
│ Readiness gate, CPT-by-category, bid formula, CPP routing, 2025-26 changes.
│
├─ "In-App Events / Today tab event / event card / live event / challenge"
│ └─→ references/in-app-events.md (free discovery + no-opt-in re-engagement push)
│
├─ "App Clip / instant experience / SKOverlay / App Clip card / 3-5x conversion"
│ └─→ references/app-clips-growth.md
│
├─ "Benchmarks / retention bands / D1/D7/D30 / cohort analysis / LTV by market / churn"
│ └─→ references/metrics-benchmarks.md
│ Per-category Poor/Avg/Good/Excellent bands, cohorts, sourced 2026 sub data.
│
├─ "Rating prompt / requestReview / star rating / pre-prompt survey / rating reset"
│ └─→ references/ratings-and-reviews.md
│
├─ "Paid ads / ROAS / CPA / campaign structure / ad creative / audiences / retargeting"
│ └─→ references/paid-acquisition.md
│ Platform selection, campaign structure, ad copy/creative frameworks,
│ audience targeting, optimization levers, blended-CAC accounting.
│
├─ "Pricing / subscription tiers / freemium / free trial / willingness to pay /
│ value metric / price increase / Van Westendorp / MaxDiff / unit economics"
│ └─→ references/monetization-and-pricing.md
│ Value-based pricing, research methods, tier structure, freemium vs trial,
│ app subscription unit economics, when/how to raise prices.
│
├─ "Paywall price display / RevenueCat / StoreKit price / currency / trial copy /
│ savings badge / hardcoded $ / per-month equivalent"
│ └─→ references/paywall-pricing-display.md
│ The hard rule: prices come from StoreKit/RevenueCat, never Swift literals.
│ Locale-correct price formatting, derived savings %, trial labels.
│
├─ "PPP / purchasing power parity / per-territory pricing / regional pricing /
│ price import / storefront equalization"
│ └─→ references/ppp-territory-pricing.md
│ `asc` CLI flows for subscription + IAP territory pricing via CSV import.
│
├─ "Onboarding / questionnaire flow / activation / CRO / paywall conversion /
│ permission priming / signup flow"
│ └─→ references/onboarding-and-cro.md
│ The 14-screen high-converting onboarding framework, permission priming,
│ paywall placement, CRO levers.
│
├─ "Launch / Product Hunt / go-to-market / waitlist / early access / feature announcement"
│ └─→ references/launch-strategy.md
│ ORB channel framework, 5-phase launch, Product Hunt playbook, ongoing launches.
│
├─ "Referral / affiliate / viral loop / refer-a-friend / K-factor / word of mouth"
│ └─→ references/referral-and-viral.md
│ Referral loop design, incentive sizing, viral-coefficient modeling, fraud.
│
├─ "Marketing psychology / mental models / cognitive bias / persuasion / why people buy"
│ └─→ references/marketing-psychology.md
│ 70+ mental models mapped to app marketing applications.
│
├─ "Marketing ideas / growth ideas / how to market / tactics / ways to promote"
│ └─→ references/growth-tactics-library.md
│ 140 growth tactics organized by category, stage, budget, timeline.
│
└─ "Competitor pages / vs pages / alternatives / comparison landing pages"
└─→ references/competitor-pages.md
Four comparison-page formats, centralized competitor data, SEO + schema.
Read the relevant reference(s) before answering. Each is self-contained.
The iOS growth equation (read this first)
App growth compounds three multipliers. Optimize the constraint, not your
favorite lever (Theory of Constraints — see references/marketing-psychology.md):
Growth = Installs × Activation × (Monetization − Churn) × Virality
└ acquisition ┘ └ onboarding ┘ └ pricing ┘ └ referral ┘
attribution CRO StoreKit/RC K-factor
tells you which
installs actually
work
Why attribution comes first. On iOS post-14.5, if your install measurement
is broken, every downstream optimization is flying blind — you can't tell which
campaign, creative, or channel produced a paying user, so you scale the wrong
spend. The #1 iOS-specific growth bug is "installs going Organic": a
marketing SDK fires its install event before the user answers the ATT prompt, so
the install is sealed with a zero IDFA and can never be re-attributed. Fix
measurement (references/attribution-and-att.md) before scaling acquisition.
Core iOS attribution model (post iOS 14.5, current through iOS 26)
Three layers run simultaneously. A healthy stack wires all three; if only
one is connected you lose 30-70% of attribution coverage.
┌─────────────────────────────────────────────────────────────────┐
│ Layer 1 — Deterministic (IDFA) │
│ Requires ATT .authorized (~25-50% opt-in, varies by category) │
│ → full user-level events to AppsFlyer / Adjust / Branch │
├─────────────────────────────────────────────────────────────────┤
│ Layer 2 — SKAdNetwork v4 + AdAttributionKit (iOS 17.4+) │
│ Privacy-preserving, no IDFA, Apple-mediated postbacks 24-48h │
│ Conversion values: fine 0-63 OR coarse low/medium/high │
│ Apple evaluates SKAN + AAK together; one impression wins │
├─────────────────────────────────────────────────────────────────┤
│ Layer 3 — Probabilistic / modeled (MMP-side, where Apple allows) │
│ Statistical modeling for non-consented users │
└─────────────────────────────────────────────────────────────────┘
The two production failures that account for most iOS attribution loss:
- ATT wait-scope trap — the MMP's wait API (
waitForATTUserAuthorization,
attConsentWaitingInterval, enableFirstSessionDelay()) only queues that
SDK's events. Backend/CAPI sends, direct Meta/TikTok SDK calls, and events
fired before the wait is configured still leak with zero IDFA.
- Silent consent-denied paths — marketing SDKs early-return without logging
when ATT is denied; the dashboard quietly drops 50% of events.
Full diagnosis and code: references/attribution-and-att.md.
Monetization quick rules (apps live and die on subscription economics)
- Never hardcode a price in Swift. Prices come from StoreKit (via RevenueCat).
A hardcoded
$2.50/mo label that drifts from the real charge is an App Review
3.1.2 violation and a refund storm. Full rule: references/paywall-pricing-display.md.
- Price the value, not the cost. Set price between the next-best alternative
and the customer's perceived value; cost is a floor. Use Van Westendorp /
MaxDiff to find the range. See references/monetization-and-pricing.md.
- Model before you ship — pricing is a one-way door. Once a tier is live and
purchased, you can't materially raise it without grandfathering chaos. Verify
P95/P99 cost-of-service stays below price after Apple's 15%/30% cut.
- Use PPP for international. Lower-income storefronts get stronger discounts
via
asc subscriptions pricing prices import (CSV, dry-run first). See
references/ppp-territory-pricing.md.
- Onboarding sells the paywall. A 14-screen questionnaire onboarding that
surfaces the user's pain, mirrors it back, primes permissions, and lets them
use the core mechanic before the paywall converts dramatically better than a
cold paywall. See references/onboarding-and-cro.md.
Operating sequence for any growth task
- Identify the pillar (acquisition / monetization / activation / strategy)
and route via the decision tree.
- Gather context the reference lists (product, stage, budget, current
metrics — ARPU, CAC, conversion, churn, opt-in rate). Ask if not provided.
- For audits (e.g. "is our attribution healthy?", "is our pricing right?"):
produce a scored PASS / WARNING / FAIL per check, citing the exact code call
site (
file:line) in the user's project when fixing.
- For new setups: walk the reference's checklist step by step, gating on each
prerequisite.
- Always reason about second-order effects (a flash sale trains discount
waiting; a loose referral reward attracts fraud) — references/marketing-psychology.md
catalogs the traps.
Per-channel acquisition quick reference (iOS)
| Channel | iOS measurement mechanism | ATT dependency | Key SDK |
|---|
| Apple Search Ads (ASA) | AdServices token + AAK/SKAN | Not IDFA-dependent | AdServices API / MMP |
| Apple Search Ads — keyword strategy | — (delegate to ASO/ASA skill) | — | — |
| Google App Campaigns | SKAdNetwork + Firebase events | Required for user-level | Firebase + Google Ads |
| Meta App Install | AEM + SKAN + SDK/CAPI app events | Authorized → IDFA-level signal | Meta SDK / CAPI / MMP |
| TikTok App Install | SKAN + SDK/S2S events | Required for user-level | TikTok SDK / MMP |
| Snap App Install | SKAN | Required | Snap SDK / MMP |
| Branch/Adjust/AppsFlyer/Singular (MMP) | Aggregator across all above + IDFA | Required for user-level | Their SDK |
What this skill deliberately does NOT do
- App Store listing / keyword optimization (ASO) → delegate to the
app-store-optimization skill.
- Build upload / TestFlight /
asc release flow / submission → delegate to
app-store-release.
- App Review compliance / privacy-manifest deep audit → delegate to
app-review-preflight.
- Web/SPA attribution → use a web-analytics skill.
- Android-only attribution / Privacy Sandbox → Android parity notes only.
- Writing the StoreKit/RevenueCat purchase engine → this skill covers
pricing strategy and price display; the transaction code (Transaction
listener, entitlement gating) belongs to a StoreKit implementation skill.
References
| File | Covers |
|---|
| references/attribution-and-att.md | ATT timing, 4-state consent gating, SKAdNetwork v4 + AdAttributionKit conversion values (incl. iOS 18 PostbackUpdate, AAK server-side postback receiver, SKAN→AAK dual-call regression), per-channel measurement, MMP troubleshooting, pre-launch checklist |
| references/tiktok-channel.md | TikTok Business SDK (vs OpenSDK), SKAN-ownership decision matrix, init order, tiktokAppId/appId, hybrid event_id dedup, Events API S2S |
| references/meta-attribution.md | Meta AEM 7-prereq checklist, "AEM greyed-out" causes, ATE 5-cause list, CUID timing, Conversions API extinfo 16-position positional array |
| references/apple-search-ads.md | ASA readiness gate, CPT-by-category, Target CPT = CPI × CVR, bid-signal table, CPP routing (+15-30%), KPI ranges, budget tiers, 2025-26 product changes |
| references/in-app-events.md | In-App Event card specs/limits, indexed-search names, no-opt-in re-engagement push, algorithmic eligibility |
| references/app-clips-growth.md | App Clips as a discovery→install funnel (3-5×), 15 MB cap, SKOverlay-after-value handoff, card limits |
| references/metrics-benchmarks.md | Per-category Poor/Avg/Good/Excellent bands, formulas, cohort analysis (3 types + 7 mistakes), sourced 2026 subscription benchmarks |
| references/ratings-and-reviews.md | requestReview 3/365 limit, when-to-ask table, pre-prompt survey filter (+0.3-0.8★), per-version reset tradeoff, recovery campaign |
| references/paid-acquisition.md | Platform selection, campaign structure, ad copy/creative, audience targeting, optimization, retargeting, blended CAC |
| references/monetization-and-pricing.md | Value-based pricing, Van Westendorp/MaxDiff, value metrics, tier structure, freemium vs trial, app unit economics, price increases |
| references/paywall-pricing-display.md | StoreKit/RevenueCat as price source of truth, locale formatting, derived savings/trial labels, banned Swift literals |
| references/ppp-territory-pricing.md | asc CLI subscription + IAP territory pricing via CSV import, PPP strategy patterns |
| references/onboarding-and-cro.md | 14-screen questionnaire onboarding framework, permission priming, paywall placement, CRO levers |
| references/launch-strategy.md | ORB channel framework, 5-phase launch, Product Hunt, ongoing launches |
| references/referral-and-viral.md | Referral loop design, incentive sizing, K-factor modeling, fraud prevention, tools |
| references/marketing-psychology.md | 70+ mental models mapped to app marketing applications, pricing psychology |
| references/growth-tactics-library.md | 140 growth tactics by category / stage / budget / timeline |
| references/competitor-pages.md | 4 comparison-page formats, centralized competitor data, SEO + schema |
Scripts
scripts/diagnose-att.sh [project-root] — static-analysis pass for iOS
marketing + ATT health (CI-friendly, read-only, no network). Flags the
init-order no-op (wait config after start()), the capture-protection
silent-defer ATT bug, ungated marketing-event call sites, and inventories
AppsFlyer/Adjust/Branch/Singular/Meta/TikTok/Firebase/AdMob. Run it as the
mechanical first pass of an "is our attribution healthy?" audit, then read
references/attribution-and-att.md for the fixes.