SKAdNetwork and AdAttributionKit
Apple's privacy-preserving attribution works for every iOS install, whatever the user answered to the tracking prompt. AppRefer sets the conversion value for you and collects copies of Apple's postbacks.
How it works
When someone installs your app from an ad, Apple later sends the ad network an anonymous postback with the campaign and a conversion value (0 to 63, plus a coarse low, medium or high). Apple sends no postback until the app sets a conversion value, and only the app can set it. Postbacks arrive in up to three windows after install (days 0 to 2, 3 to 7 and 8 to 35).
AppRefer supports both SKAdNetwork and its successor AdAttributionKit. The SDK updates both frameworks, because your ad networks may use either.
Conversion values (SDK 0.7.0+)
The iOS, Flutter and React Native SDKs register each install on first launch (value 0, coarse low). After that they ask AppRefer for the install's value on launch, when the app becomes active, after trial and purchase events and after AppRefer Billing purchases, and set it on the device through AdAttributionKit (iOS 17.4+) and SKAdNetwork (iOS 15+). Values only go up, and windows are never locked early. There is nothing to configure.
| Fine value | Coarse | Meaning |
|---|---|---|
| 0 | low | Opened the app |
| 10 | medium | Started a free trial |
| 20 + US dollars paid, rounded up (max 63) | high | Paid within 35 days of install, for example $4.99 → 25, $9.99 → 30, $39.99 → 60, $43 or more → 63 |
Amounts come only from store-verified purchases (AppRefer Billing, or a RevenueCat webhook), converted to USD and each counted once. SDK events can mark that a trial started or that the user paid, but never set an amount. A reinstall starts a new 35-day window.
If you take payments some other way, ask for an update straight after the purchase so the value is set sooner:
await AppRefer.updateConversionValue()The SDK reads the value from POST /api/track/conversion-value (SDK key, {device_id, installed_at}), which returns {fine, coarse, windowEndsAt}. You don't need to call it yourself.
Tell your ad networks the schema
A network can only optimise on conversion values if it knows what they mean. Enter the schema above wherever the network lets you map conversion values. Meta documents importing a schema through its own SDK or its partner measurement providers; we haven't confirmed that Meta accepts this schema for apps measured with AppRefer, so check in Events Manager before relying on Meta's SKAdNetwork reporting.Receive postback copies
Apple can send you a copy of each winning postback. Set AppRefer as the copy endpoint in your app's Info.plist:
<key>NSAdvertisingAttributionReportEndpoint</key>
<string>https://apprefer.com</string>
<key>AttributionCopyEndpoint</key>
<string>https://apprefer.com</string>Apple then posts to https://apprefer.com/.well-known/skadnetwork/report-attribution/ and https://apprefer.com/.well-known/appattribution/report-attribution/. AppRefer checks Apple's signature on every postback (SKAdNetwork 2.1 and later, and AdAttributionKit), stores each one once, and matches it to your app by its App Store ID. Postbacks with a bad signature are refused. If more than one app in AppRefer claims the same App Store ID, the postback is kept but not assigned to an app.
Postbacks are anonymous. AppRefer counts them by ad network, campaign (source identifier), window and value, and never links them to an install or a user.
Read postbacks
curl "https://apprefer.com/api/v1/apps/$APP_ID/skan/postbacks?days=30" \
-H "Authorization: Bearer $AK_LIVE_KEY"days is 1 to 400 (default 30). The response has installs, trials and paid (first-window install postbacks whose value says the install started a trial or paid) and rows, each with framework, conversionType, adNetworkId, sourceIdentifier, sequenceIndex (the window), conversionValue, coarseConversionValue and postbacks. Only production postbacks are counted. The MCP tool get_skan_postbacks returns the same summary.
Works alongside click attribution
SKAdNetwork gives aggregate, campaign-level results from Apple. It complements AppRefer's click-based attribution, which on iOS only covers installs whose user allowed tracking. The older conversion-value table under/api/v1/apps/{appId}/skan is for display only and doesn't change the values the SDK sets.