skills/app-store/ad-attribution/SKILL.md
Privacy-preserving ad measurement with AdAttributionKit (SKAdNetwork's successor) — install and re-engagement attribution, conversion-value strategy under crowd anonymity, and end-to-end postback testing. Use when running paid acquisition beyond Apple Ads, measuring re-engagement campaigns, designing conversion values, or migrating from SKAdNetwork.
npx skillsauth add rshankras/claude-code-apple-skills ad-attributionInstall 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.
You can't optimize paid traffic you can't measure. AdAttributionKit is Apple's privacy-preserving attribution framework — interoperable with SKAdNetwork, and the go-forward path (it also works in alternative marketplaces). This skill covers the advertised-app side: what an indie running paid campaigns must implement and how to design conversion signals that survive privacy thresholds.
Note the seam: Apple Ads attribution uses the AdServices framework, not AdAttributionKit —
campaigns there are measured in the Apple Ads console (see app-store/apple-search-ads). This
skill is for every other paid channel (ad networks, social, publishers).
Ad network signs an ad (compact JWS impression) → publisher app shows it → user installs (or re-engages) → after a privacy-delayed measurement window, a postback with your conversion info goes to the ad network (and optionally to you). Attribution requires no user tracking; the price is coarser data, governed by crowd anonymity.
source-identifier to as few as
its first 2 digits — so encode what matters most (campaign family, geo tier) in the
first two digits, detail in the rest.updateConversionValue(_:) / PostbackUpdate; set lockPostback when the value
is final to schedule transmission (still privacy-delayed, never instant).conversionTypes (.install / .reengagement); the first re-engagement update must land
within 48 hours.PostbackUpdate —
without a tag, updates hit only the most recent conversion.UIEventAttributionView over the tappable ad + appImpression.handleTap()
within 15 minutes of creating the impression.beginView()/endView() on the same instance; ≥2 seconds on screen to
count; one open view-through per network per advertised app.SKOverlay / SKStoreProductViewController: attach the impression — they count view on
present, click on tap.AdAttributionKitConfigurations → AttributionWindows); you can ignore "view" or "click"
(not both) per network.install-cooldown-hours, reengagement-cooldown-hours) so a
re-engagement tap minutes after an install isn't double-attributed.EligibleForAdAttributionKitOverlappingConversions = YES in Info.plist.kid), the network ID is always development.adattributionkit, and
the advertised item ID may be 0 from Xcode.lockPostback fired once value is final; re-engagement first update < 48hgrowth/analytics-interpretation (source-type funnel) —
attribution tells you which ad, App Analytics tells you what they did afterapp-store/apple-search-ads (Apple Ads uses AdServices, not this), growth/analytics-interpretation, growth/store-growth-audit (P7.3 halo tracking)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.
tools
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."