SKAdNetwork (SKAN) solution guide

At a glance: Attributing app installs using SKAN.



SKAdNetwork (SKAN), part of Apple iOS, lets advertisers measure campaign performance while simultaneously preserving user privacy. SKAN operates without IDFA or other advertising ID. SKAN functions without the need for ATT consent. 

iOS 15 news

Starting iOS 15 we recommend that you send SKAN postback copies to AppsFlyer. Doing so enables AppsFlyer to verify that Conversion Values in postbacks haven't been manipulated. 

Related reading


  • SDK: Current version of the AppsFlyer iOS SDK integrated in an app.
  • Conversion Value (CV): The measure of user quality reported in the postback sent by iOS at the end of the Activity Window. The AppsFlyer SDK sets the CV for you. However, if you want to set the CV use Decode to upload your CV mapping file. 
  • Conversion Studio: AppsFlyer solution for mapping infrastructure Conversion Values (CV) to events
  • Solution: SDK, Infrastructure, Conversion Studio, and AppsFlyer platform working together. The Solution provides advertisers and ad networks with LTV data via dashboard analytics, reports, and postbacks. 
  • Activity Window has a set duration, default of 24 hours, starting with the first app open. 

This article describes the relevant characteristics of the infrastructure and the solution. To set up measurement see SKAN Conversion Studio.

About Apple SKAN

Characteristic Description

To enable the use of SKAN in the app:

  • The version of SKAdNetwork supported is iOS version dependant:
    • iOS 11-13: V1 (installs only without CV)
    • iOS 14+: V2+ (has CV
  • App-to-app attribution
  • Mobile web not supported
  • Campaign numbering is restricted to the range 1-100; means 100 unique values per ad network per app. Ad networks provide AppsFlyer with their campaign ID and name. This reflects in AppsFlyer dashboards and reports. 
  • Organic installs: SKAN doesn't support organic installs.
  • Re-engagement.
SKAN Attribution principles
  •  SKAN attributes using the following attribution model
    • The user, clicks an ad, within 30 days installs (downloads the app), and thereafter within 60 days opens the app for the first time. 
    • The user views an ad, within 24 hours installs (downloads the app), and thereafter within 60 days, opens the app for the first time. 
    • Starting SKAdNetwork V2.2, click-through attribution takes priority over view-through attribution. SKAN version is iOS version dependant.
    • iOS sends postbacks to the attributed ad network. Starting iOS 15, advertisers can send a copy of the postback directly to AppsFlyer. 
Privacy thresholds 

Apple sends some postbacks without a CV. According to Apple, the postback won't include the CV nor the source app ID if doing so contravenes Apple privacy threshold limits. 

AppsFlyer SKAN solution

AppsFlyer Conversion Studio is at the heart of the SKAN solution. It provides you with maximum flexibility to make every bit count. You determine precisely what measurement data should be encoded within the CV—including what activity and for how long to measure during the post-install period. 



Description Activity window



[Best practice]

Set a combination of revenue, conversion (in-app events), and engagement measurements during a configurable activity window. 12-72h




Measure revenue using one of the following ranges: 

  • $1-$630 in steps of $10
  • $1-$63 in steps of $1
  • $0.01-$0.63 in steps of $0.01



Select 1-6 in-app events. 24h



Number of times a user performs an event 24h



Create your own CV to event mapping and set the CV in the app yourself. Use this option if you can't integrate the AppsFlyer SDK into your app. To use Decode, go to SKAN Conversion Studio, click options (⋮), select Upload custom decode mapping file

12-1512h (63 days)
Measurement modes

Solution principles and flow

To overcome the functional and structural limitations of the SKAdNetwork infrastructure, the Solution takes into consideration the characteristics in the table that follows.

Characteristic Description
Data collection
  • For the advertiser, SKAdNetwork postbacks are collected from multiple ad networks.
  • Advertisers don't need to integrate individually with each ad network—a complex and tedious task.
Data validation
  • Ensures postbacks are signed by Apple; this reduces the chances of postback manipulation.
  • Uses the transaction ID field to validate that postbacks are unique.
Data enrichment
  • Enriches SKAdNetwork postback data with other data points to provide complete ROI analysis. For example, campaign name provided by the ad network, and so on. 
  • Data points include impressions, clicks, cost, and more.
Data delivery

Enriched SKAdNetwork data is available using the following: 

Seamless integration
  • Full encapsulation enables a near-zero effort by the advertiser via the app settings page.
  • No coding is required. The app requires the latest SDK version. 
  • Includes support for expected changes by Apple in the SKAdNetwork infrastructure.

Advertisers can change measurement configurations as needed in the dashboard.

SKAdNetwork attribution flow


  1. Advertiser sets SKAN measurement settings in the Platform.
  2. After the user opens the app for the first time, Platform instructs SDK how to calculate the CV using the current configuration set by Advertiser.
  3. During the Activity Window SDK updates the CV for each measurable user action.
  4. 24-48 hours after the most recent CV update, iOS sends the postback to ad network.
  5. Ad network forwards the postback to AppsFlyer.
  6. AppsFlyer validates and decodes the CV. Decoded data is:
    • Recorded and attributed before being made available in AppsFlyer via dashboards, reports, and APIs.
    • Sent via a postback to the Ad network to enable campaign optimization.

More about timers

Additional SKAdNetwork information

Reporting options

SKAdNetwork reports don't contain user-level identifiers. 

Report name  Type Enriched by AppsFlyer Delivery method Premium feature

SKAN aggregated performance report. Aggregates of install, in-app events, and revenue. The data is similar to that found in the SKAN dashboard. 

Aggregated using install or postback arrival date




SKAN aggregated postback report. SKAN postbacks aggregated to the most granular level possible. Postback aggregation using postback arrival date No API  No

SKAN raw-data (row-level) reports via Data Locker (with examples). Reports available:

  • Postbacks sent by iOS with data enrichment provided by ad network partners
  • Installs
  • Redownloads
  • In-app events
  Yes Data Locker

Yes. Raw data required. Data Locker subscription isn't required.

SKAN data via Push API

  Yes Push API


SKAdNetwork Solution implementation checklist

No. Action Description Responsibility
1 Prepare Marketer, Developer
2 Configure 

In AppsFlyer, configure the SKAdNetwork solution

3 Prepare the app

Migrate the app to AppsFlyer V6 SDK

  • No change to app logic nor to app code is required.
  • The Solution relies on in-app events to set the CV Send in-app events in the usual manner. No Solution specific testing is required. 
  • See developer considerations for specific measurement scenarios.
  • Submit the app to the App Store
  • No SKAdNetwork registration or process is required in the app store.
4 Partner integrations 

Ad network partners must integrate with AppsFlyer using SKAdNetwork integration. Note! AppsFlyer SKAdNetwork simulation contains the data of all your partners irrespective of their current integration status. This won't be the case for the live data reported by SKAdNetwork postbacks.

In relation to partners running your campaigns complete the following as required: 


  1. Verify that the partner has an AppsFlyer SKAdNetwork capability badge.
  2. Verify that your in-app event names are mapped to partner in-app event names. 


SKAdNetwork implementation checklist

Troubleshooting guide



The dashboard doesn't contain any non-organic installs.
  1. Verify that SKAdNetwork measurement is on.
    1. Go to Configuration > SKAN Conversion Studio. 
    2. Click options (⋮)examinine the SKAN measurement setting. 
  2. Verify that your SDK version is 6.2.6+.
    • To do so, go to Integration > SDK Information > Users by SDK version. 
  3. If you use SDK plugins, verify that you implement a version that supports AppsFlyer SKAdNetwork. 
  4. Verify that your ad network partners are integrated with AppsFlyer and that they forward iOS postbacks to AppsFlyer.
The dashboard contains non-organic installs but no in-app events at all.
  1. Verify that your SDK version is 6.2.6+.
    • To do so, go to Integration > SDK Information > Users by SDK version. 
  2. If you use SDK plugins, verify that you implement a version that supports AppsFlyer SKAdNetwork.
  3. Do you send events using S2S? If so, verify that Record in-app events sent by server-to-server API is on. 
    1. Go to Configuration > SKAN Conversion Studio. 
    2. Click options (⋮), verify that Record in-app events sent by server-to-server API is on
The dashboard contains installs and some in-app events. Some in-app events are missing.
  1. Do you send events using S2S? If so, verify that Record in-app events sent by server-to-server API is on. 
    • Go to Configuration > SKAdNetwork settings. 
  2. In some cases, due to Apple iOS thresholds, postbacks are sent without a CV or publisher ID. This means installs are recorded without in-app events. Inspect your postback raw data to see if this is the case. 
Geo (country) locations are misleading

Geo data is derived as follows:

  • According to the country associated with a campaign and reported to AppsFlyer by the ad network.
  • Using the device IP address. Starting iOS 14.6, this address is a proxy address and doesn't truly represent the user geolocation. 

Timing from app install until dashboard update

Key Element name Description Example A  Example B 
A Activity Window
  • During the window, the CV is set by the app. 
  • The window begins when the app is opened for the first time.
  • Duration 12-72 hours. A longer duration can be set if you use encode mode. 



B SKAdNetwork timer 
  • Countdown timer: 24 hours
  • Each time the CV increases, the timer is reset. Means start counting down from 24 hours.
0-24h 0-24h
C SKAdNetwork random delay timer

Random postback delay time. The countdown starts at the end of the period defined by A+B. 

Note! In deriving the install date, AppsFlyer uses the average of A+B=36 hours. This doesn't apply to installs brought by Google. 

0-24h 0-24h
D AppsFlyer processing Postbacks received on a given day are processed at the end of the day UTC starting at 00:01 on the following day. The data is available 8 hours later. Average delay of 20 hours. For example, a postback received on Monday is processed on Tuesday. The dashboard updates by 08:00 UTC.  8-32h 8-32h
E Summary The total time that can elapse  32-104h 80-152h

Organic metrics in the context of SKAdNetwork

Organic metrics in the SKAdNetwork dashboard are calculated using the following mechanism:

  • Organic metrics aren't available if your selected measurement mode is custom or encode.
  • Apple SKAdNetwork sends postbacks relating to users who install after engaging with a media source. This provides the non-organic metrics. 
  • AppsFlyer attribution dashboards contain metrics of all installs irrespective of source.  See view AppsFlyer attribution side-by-side with SKAN attribution.
  • Using this data organic metrics are calculated as A-B where: 
    • A = Total of all users based on the traditional overview dashboard
    • B = Non-organic users as reported by SKAdNetwork postbacks

Caveat relating to Apple Search Ads: Installs brought by Apple Search Ads in the traditional dashboard are non-organic. However, in the context of SKAdNetwork, they form part of the organic metric. 

Traits and limitations

SKAdNetwork Solution traits and limitations
Trait Remarks 
Ad network access Ad networks are provided with postbacks

Not supported. This means that agencies mustn't enable ad networks running SKAdNetwork campaigns. Agency! Ask the advertiser to enable the Ad network don't do it yourself. Agencies can indicate that they brought the user by implementing SKAN agency recognition

Agency transparency N/A
Timezone UTC
Currency  USD
Organic data Based on SDK event data. For example, organic install metrics are calculated as follows: Data of all installs reported by the SDK minus non-organic installs reported by SKAdNetworks.
Non-organic data Based on SKAdNetwork postbacks
Data freshness

Daily. Due to SKAdNetwork timing issues on average 68 hours (~3 days) after app open. Range: 32-104 hours. 

Historical data

Earliest date, availability of iOS 14 (September 16, 2020)

Team member access Available. According to account permissions
App clips App clips are attributed to organic in the SKAdNetwork dashboard. Use the Overview dashboard to view invocation media sources.

SKAdNetwork integrated partners

Recording ad revenue

Attribute ad revenue generated during the SKAdNetwork Activity Window to the campaign bringing the user. Currently, this is limited to advertisers integrated with MoPub impression-level ad revenue via SDK.

To record ad revenue in your SKAdNetwork dashboard: 

MoPub mediates the following ad networks: 

  • AdColony
  • AdMob (Google)
  • Google Ad Manager (Google)
  • AppLovin
  • Chartboost
  • Facebook Audience Network
  • Fyber
  • InMobi
  • ironSource
  • Mintegral
  • Ogury
  • Pangle
  • Snap Audience Network
  • Tapjoy
  • Unity Ads
  • Verizon Media
  • Vungle

See Mopub network mediation.

Sending postbacks to integrated partners

AppsFlyer sends integrated partners postbacks relating to SKAdNetwork attribution. Take note of the various options and requirements in the table that follows

Subject Description

Transaction ID sharing

Action required: Check with the integrated partner if they require the transaction ID and configure the setting accordingly.

AppsFlyer sends the attributed ad network partner postbacks. Meaning the decoded postbacks, not a copy of the SKAdNetwork postback received from iOS. These postbacks contain decoded CV data relating to the install and associated in-app event data of actions performed by the user during the Activity Window.

Because the transaction ID can be used to decode your CV, we don't share it without your permission. 

Transaction ID sharing

Advertisers enable transaction ID sharing as follows: In AppsFlyer, go to Configuration > Integrated Partners > select a partner > Integration tab > Data sharing.

In-app event mapping verification

Was this article helpful?