skills/growth/store-growth-audit/SKILL.md
Stage-by-stage audit of an app's App Store growth machinery against a 54-item P0–P9 playbook — every item scored from an App Store Connect MCP call, a codebase check, or an explicit question to the user, then routed to the skill or command that fixes it. Read-only on App Store Connect. Use for a growth audit or scorecard, a pre-launch growth plan, a quarterly re-audit, or "which growth levers am I missing."
npx skillsauth add rshankras/claude-code-apple-skills store-growth-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Walk an app — new or live — through the full App Store growth playbook, phase by phase, and produce a scorecard: what's installed, what's missing, what to do next, and who fixes it.
The invariant: every item has a detection rule. Status comes from an ASC read, a codebase check, or an explicit question — never from vibes. If the user doesn't know, the item is 🟠 unverified, not assumed ✅.
store-signals. That is the continuous signal → backlog loop: are the numbers moving,
did last cycle's bets pay off? This is the structural audit: is the machinery even installed?
Run this quarterly (or pre-launch); run store-signals monthly. Trend questions route there.analytics-interpretation. Metric-quality judgments ("is 3.2% conversion good?") route
there; this skill only records the baseline and whether benchmarks were checked./apple:* command. This skill detects, scores, and routes. Read-only on ASC.54 items across ten phases. Each phase is a theme; the item detail lives in the checklist files.
| Phase | Theme | Items | Goal | |-------|-------|-------|------| | P0 | Day-one money toggles | 4 | Free margin + a measurement baseline before anything else | | P1 | On-metadata ASO | 7 | Every indexed field working (title, subtitle, keywords, events, IAPs) | | P2 | Conversion assets | 5 | Icon, screenshots, trust signals that convert impressions | | P3 | Localization | 5 | Metadata-first market expansion + PPP pricing | | P4 | Ratings machinery | 4 | Prompting, replying, and protecting the rating | | P5 | Experimentation | 4 | PPO, CPPs, events as a testing habit | | P6 | Featuring & free discovery | 6 | Nominations, new-OS adoption, storefronts, web presence | | P7 | Paid & external traffic | 8 | Apple Ads ladder, launch spikes, pre-orders, codes | | P8 | Earnings | 7 | Paywall experiments, win-backs, web checkout, bundles | | P9 | Retention loop & ops | 4 | Retention surfaces + the recurring refresh calendar |
Compressed priority (used for action selection, not the maturity ladder): P0 money toggles first → P1–P3 (metadata, conversion, localization) → P8.4 web checkout + P8.6 volume purchasing (the 2026-era revenue unlocks) → everything else → P7 paid traffic last. Paid spend on top of broken free machinery is burned money.
| File | Purpose |
|------|---------|
| detection-playbook.md | Gather-once machinery: the MCP batch table, the codebase grep table, the single MANUAL question batch |
| audit-checklist-p0-p4.md | Items P0.1–P4.4 (25): foundations — money toggles through ratings |
| audit-checklist-p5-p9.md | Items P5.1–P9.4 (29): growth loops — experimentation through ops |
appId (from .planning/STATE.md when driven by
SwiftShip, else list_apps + confirm with the user). App live on the store → existing mode;
not yet shipped → pre-launch mode. Scope defaults to the full P0–P9; a named phase runs
scoped (see Scoped Runs). A prior scorecard (GROWTH.md), if present, is the diff baseline.detection-playbook.md. Run the full MCP read batch, the
full codebase grep pass, and ONE batched AskUserQuestion round for every MANUAL item. Never
interleave gathering with scoring; never ask questions one at a time.rule:. Honor
applies-if: guards (⚪ N/A) and ⏳ ANNOUNCED flags. Every status carries a terse, citable
evidence string (locales: en-US only, SBP: enrolled (user, 2026-07))..planning/GROWTH.md
(schema in SwiftShip's templates/GROWTH.md); standalone, write GROWTH.md beside the audit.
Append an audit-history row; refresh the recurring calendar's next-due dates.Each checklist item is a stanza:
#### P3.1 Metadata-only localization (ja de fr es pt ko zh-Hans) — core
- detect: MCP `list_locales`
- rule: ✅ ≥7 target locales localized · 🟠 1–6 non-English locales · 🔴 en-only
- new-app: plan — seed target locales in the first submission
- fix: product/localization-strategy → /apple:localize
P<phase>.<n>) is stable forever — scorecards diff by ID; never renumber.core (phase-gating), RECURRING (calendar-driven), ⏳ ANNOUNCED (WWDC26).MCP <tool> · CODE <grep> · MANUAL <question> · HYBRID (combination).applies-if: guard → ⚪ N/A when it fails.plan / code / defer (see Modes).sibling-skill → /apple:command — the skill path works standalone; the command half
applies when driven from SwiftShip.Status vocabulary: ✅ done/healthy · 🟠 partial, stale, or unverified · 🔴 missing ·
⚪ N/A (applies-if failed; excluded from denominators) · ⏳ ANNOUNCED (not yet scoreable; excluded
from denominators; carries prep: and recheck: lines instead of a live rule).
✅ n / N applicable — ⚪ and ⏳ items are excluded from N.Complete — all applicable items ✅Working — ≥50% ✅ and no core item 🔴Gaps — any core item 🔴, or <50% ✅Not started — no applicable item ✅core items (13): P0.1, P0.2, P1.1, P2.2, P2.4, P3.1, P4.1, P4.2, P5.1, P6.1, P8.1, P8.4, P9.2.Working. An app with P0–P3 working but P4 in gaps is Level 3, no matter how good P5–P9 look.
The ladder follows numeric phase order; the compressed priority shapes only action selection.Top-5 action selection: from all applicable 🔴 + 🟠 items, order by compressed-priority tier
(T1: P0 · T2: P1–P3 · T3: P8.4 + P8.6-when-live · T4: P4–P6, rest of P8, P9 · T5: P7), then within
a tier: core first, 🔴 before 🟠, lowest effort first. Two overrides: an overdue RECURRING
calendar item jumps to the top; always include at least one metadata-only quick win (shippable
without a binary release).
| | Existing app | Pre-launch |
|---|---|---|
| Evidence | ASC reads + codebase + MANUAL | .planning/ docs + codebase + MANUAL |
| new-app: plan items | scored normally | planned-in-docs → 🟠 planned; absent → 🔴 |
| new-app: code items | scored normally | scored normally (greps work pre-launch) |
| new-app: defer items | scored normally | ⚪ with an activation trigger noted (e.g. "30 days post-launch") |
| Output framing | audit + deltas | launch plan (history row tagged mode: pre-launch) |
The first post-launch audit diffs cleanly against the pre-launch scorecard — same IDs, same schema.
"Run phase 3" = audit + worklist for that stage only.
P3, bare 3 accepted) or a short range/list (P1-P3, P0,P4).
Default remains the full P0–P9 audit.detection-playbook.md rows whose items are in scope — MCP calls,
greps, and MANUAL questions alike. A P1 run needs get_metadata/list_locales/list_iap/
list_app_events, not sales reports or paywall greps.scope: P3. Recompute the maturity level from the refreshed rows plus the untouched
remainder — mark it (est.) if any out-of-scope phase has never been audited.core first, 🔴 before 🟠, lowest effort first.
End by offering to start the first route (gated, as always).The scorecard file (schema = SwiftShip templates/GROWTH.md):
header (app, date, mode, maturity) · phase-score table · top-5 actions · ten per-phase tables
(ID | Item | Status | Evidence | Next step | Route) · Watchlist (⏳ announced) · Recurring
Calendar · Baseline Metrics Snapshot · append-only Audit History.
The printed digest never dumps 54 rows:
Growth audit: <App> — Level 4/9 (existing, re-audit)
P0 ▓▓▓░ 3/4 · P1 ▓▓▓▓▓░░ 5/7 · P2 ▓▓▓░░ 3/5 · P3 ▓░░░░ 1/5 · P4 ▓▓▓▓ 4/4 …
Top 5: 1) P0.1 Apply to Small Business Program (route: growth/indie-business) …
Since last audit: 3 fixed, 1 regressed (P9.3 update freshness)
Unverified (you were unsure): P0.3 peer benchmarks, P7.2 brand defense
Calendar: featuring nomination due in 12 days · keyword refresh due 2026-10-01
Next: /apple:localize (or product/localization-strategy standalone)
The only place the full route list lives; stanzas carry the short form.
| Audit area | Sibling skill (canonical) | SwiftShip command |
|---|---|---|
| SBP, business ops | growth/indie-business | — (ASC manual) |
| Billing grace/retry, subscription lifecycle | generators/subscription-lifecycle | /apple:subscription |
| Analytics baseline, benchmarks | growth/analytics-interpretation | /apple:learn-from-store |
| Keywords, metadata fields, AI tagging | app-store/keyword-optimizer | /apple:metadata (or /apple:aso if installed) |
| Apple Ads (discovery, exact, halo, brand) | app-store/apple-search-ads | /apple:aso if installed |
| Screenshots, previews, Creative Assets | app-store/screenshot-planner | /apple:screenshots |
| Icon + PPO + CPP experiments | generators/product-page-optimization, generators/custom-product-pages | /apple:experiment |
| In-app events | generators/in-app-events | /apple:event |
| Localization + PPP pricing | product/localization-strategy, monetization (pricing-models) | /apple:localize |
| Ratings: prompting, replies, protection | app-store/ratings-mechanics, generators/review-prompt, app-store/review-response-writer | /apple:ratings (health + replies); /apple:ship (phased release) |
| Featuring nominations | generators/featuring-nomination | — (ASC manual, calendar-driven) |
| New-OS adoption | — | /apple:modernize |
| App Intents / Spotlight | apple-intelligence/app-intents, generators/spotlight-indexing | /apple:plan |
| Web SEO, landing page, deal sites | app-store/web-presence | — |
| Pre-orders, offer codes, waitlist | generators/pre-orders, generators/offer-codes-setup, product/beta-testing | /apple:testflight |
| Paywall + pricing experiments | generators/paywall-generator, monetization | /apple:subscription |
| Win-backs, retention messaging | generators/win-back-offers | /apple:subscription |
| External purchase links / web checkout | monetization/external-purchases | — |
| Bundles, Family Sharing, volume licensing | monetization/bundles-and-licensing | — |
| Retention surfaces | generators/onboarding-generator, generators/push-notifications, generators/widget-generator, generators/live-activity-generator | /apple:plan |
/apple:learn-from-store). Surface → score → route.app-store/ratings-mechanics to stop it.retired.development
US web checkout via the StoreKit External Purchase Link entitlement — currently 0% Apple commission (litigation ongoing), how to ship it safely, and how to architect for a commission flip so a future ruling is a config change, not a rewrite. Use when adding external purchase links, weighing web checkout vs IAP, or planning US-storefront pricing strategy.
tools
Revenue beyond the single-app price tag — own-app bundles, Family Sharing as a conversion lever, cross-developer bundles & suites, and institutional licensing via Group Purchases / Apple School & Business Manager. Use when a developer has multiple apps, a subscription worth sharing, complementary indie partners, or school/clinic/business buyers.
testing
Run a structured accessibility audit on an iOS/macOS app — automated XCUITest audits, Accessibility Inspector, manual VoiceOver/Dynamic Type passes, and App Store Accessibility Nutrition Label evaluation. Use before release, when preparing Nutrition Label declarations, or for EU Accessibility Act compliance.
development
Performance profiling and SwiftUI debugging skills — Instruments guidance, hangs, memory issues, slow launches, energy drain, unnecessary re-renders, and view identity problems. Use when an app is slow, janky, or resource-hungry.