Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/rshankras-ad-attribution/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-18 | ✗→✓ | ▲ Improved | -54% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -11% | 0% |
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.
downgrade fine → coarse and can trim the 4-digit campaign 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.
purchase), not vanity events. 64 slots go fast; reserve ranges (e.g. 0–15 activation, 16–47 monetization ladder, 48–63 reserved).
updateConversionValue(_:) / PostbackUpdate; set lockPostback when the valueis final to schedule transmission (still privacy-delayed, never instant).
conversionTypes (.install / .reengagement); the first re-engagement update must land within 48 hours.
tag from the re-engagement URL's query items, store it, and pass it in 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 tocount; one open view-through per network per advertised app.
SKOverlay / SKStoreProductViewController: attach the impression — they count view onpresent, click on tap.
(AdAttributionKitConfigurations → AttributionWindows); you can ignore "view" or "click" (not both) per network.
install-cooldown-hours, reengagement-cooldown-hours) so are-engagement tap minutes after an install isn't double-attributed.
crowd-anonymity tier — a bonus signal when volume allows, never guaranteed.
EligibleForAdAttributionKitOverlappingConversions = YES in Info.plist.
randomization, shortens all conversion windows, sends postbacks on demand — full end-to-end rehearsal in minutes instead of days.
with a different key (kid), the network ID is always development.adattributionkit, and the advertised item ID may be 0 from Xcode.
a live campaign burns budget on unmeasurable installs.
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 after
app-store/apple-search-ads (Apple Ads uses AdServices, not this), growth/analytics-interpretation, growth/store-growth-audit (P7.3 halo tracking)Other measured skills in the registry, with their headline benchmark lift.