SKAdNetwork (SKAN) solution guide

At a glance: Attributing app installs using SKAN.

5754

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. 

Tip

  • 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.
  • Want to understand more about the AppsFlyer SKAN solution? Check out this short, informative course on the AppsFlyer Learning Portal.

Definitions

  • SDK: Current version of the AppsFlyer iOS SDK integrated in an app.
  • SKAN measurement window: Relevant for SKAN 4+. There are 3 time periods (windows) during which user post-install activity is measured:
    • Window 1: 1-2 days
    • Window 2: 3-7 days
    • Window 3: 8-35 days
  • Conversion Value (CV): The measure of user quality reported in the postbacks sent by iOS at the end of the SKAN 4 measurement windows or, for SKAN 3 and below, at the end of the Activity Window. The AppsFlyer SDK sets the CVs for you. However, if you want to set the CV use Decode to upload your CV mapping file.
    • For SKAN 4+, there are both fine and coarse conversion values.
  • Conversion Studio: AppsFlyer solution for mapping infrastructure Conversion Values (CV) to events
  • Solution: SDK, Infrastructure, Conversion Studio, and AppsFlyer platform working together. The AppsFlyer SKAN solution provides advertisers and ad networks with LTV data via dashboard analytics, reports, and postbacks. 
  • Activity Window: Relevant for SKAN 3 and below. Has a set duration, default of 24 hours, starting with the first app open. If you're using SKAN 4+, but user devices or ad networks don't support SKAN 4 yet, the Activity Window is 48 hours. 

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
Prerequisites

To enable the use of SKAN in the app:

*Note: Make sure you don't have another SDK that sets conversion values integrated into your app.

Supported
  • The version of SKAdNetwork supported is iOS version dependent:
    • iOS 11-13: V1 (installs only without CV)
    • iOS 14-14.5: V2+ (has CV)
    • iOS 14.6-16: V3 (has CV)
    • iOS 16.1+: V4+ (has CVs for 3 windows, and both fine and coarse values)
  • App-to-app attribution
Limitations
  • Apple Search Ads not supported
  • Mobile web not supported
  • Until SKAN, 4 campaign ID 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.
  • From SKAN 4, source identifier is from 1-10,000. 
  • 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 dependent.
    • iOS sends postbacks to the attributed ad network. Starting iOS 15, advertisers can send a copy of the postback directly to AppsFlyer. 
Crowd anonymity

Apple sends some postbacks with limited data to protect user privacy in the eve. According to Apple, the postback won't include the fine or coarse CVs, nor the source app ID or complete source identifier if doing so contravenes Apple privacy tier limits. Learn more

AppsFlyer SKAN solution

AppsFlyer provides aggregated iOS attribution results using SKAN postbacks from iOS. These postbacks are sent by iOS to ad networks who then forward them to AppsFlyer. The postbacks contain anonymized attribution records enriched with a conversion value (CV) set by the advertiser. The CV is a measure of user quality during an initial post-install window.

The AppsFlyer SKAN solution provides advertisers with:

  • SKAN data in dashboards and reports derived by aggregating postbacks from all ad networks enriched with other data points like cost. 
  • The ability to control, via the AppsFlyer Conversion Studio, what the CV measures without the need to make changes to the app code. The CV can be used to measure revenue, engagements, or conversion events.
    Note: Only the AppsFlyer SDK should have the ability to set conversion values. Make sure you don't have another SDK that sets conversion values integrated into your app.

Principles and flow


SKAN attribution flow

SKAN_flow_-_Affinity_diagram_2.png

  1. Advertiser sets SKAN measurement settings in the AppsFlyer Conversion Studio.
  2. The user opens the app for the first time. 
  3. During each window, AppsFlyer sets the CV based on user actions and the defined CV schema. 
  4. After the window closes, iOS sends the postback to the ad network and a postback copy to AppsFlyer. The postback arrives with some delay:
    • For SKAN 4 measurement window 1: 24-48 hours
    • For SKAN 4 measurement windows 2-3: 24-144 hours
    • For SKAN 3: 24-48 hours after the most recent increase in the CV value.
  5. Postback copies sent directly from the iOS device to AppsFlyer are forwarded to the advertiser's defined endpoint. See send SKAN postback copies to AppsFlyer.
  6. Ad network forwards enriched postback to AppsFlyer or SRN communicates postback data by API. 
  7. AppsFlyer validates and decodes the CV. Decoded data is recorded and attributed before being made available in AppsFlyer via dashboards, reports, and APIs.

To overcome the functional and structural limitations of the SKAdNetwork infrastructure, the AppsFlyer SKAN 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.
Agility 

Advertisers can change measurement configurations as needed in the dashboard.

Conversion Studio

The AppsFlyer Conversion Studio is at the heart of the SKAN solution. It provides you with maximum flexibility to make every bit of a conversion value 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. There are several measurement modes you can use to configure your CV settings.

Type Measurement mode Description Activity window

Flexible

SKAN 4.0

[Best practice]

Set a combination of revenue, conversion (in-app events), and engagement measurements during 3 configurable measurement windows.
  • Window 1: 1-2 days
  • Window 2: 3-7 days
  • Window 3: 8-35 days

Flexible

Custom

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

Fixed

Revenue

[Default]

[Legacy]

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
24h

Fixed

Conversion

[Legacy]

Select 1-6 in-app events. 24h

Fixed

Engagement

[Legacy]

Number of times a user performs an event 24h

Flexible

Decode

  • 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)

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

Yes

API 

No

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
  • SRN advertising dimensions 
  Yes Data Locker

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

SKAN data via Push API

  Yes Push API

Yes

SKAdNetwork solution implementation checklist

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

In AppsFlyer, configure the SKAdNetwork solution in the SKAN Conversion Studio.

Marketer
3 Prepare the app

Migrate the app to AppsFlyer V6 SDK

  • No change to app logic nor to app code is required.
  • The AppsFlyer SKAN solution relies on in-app events to set the CV Send in-app events in the usual manner. No SKAN solution-specific testing is required. 
  • Submit the app to the App Store
  • No SKAdNetwork registration or process is required in the app store.
Developer
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: 

Non-SRNs:

  1. Verify that the partner has an AppsFlyer SKAdNetwork capability badge and that in the partner UI, SKAdNetwork campaign reporting is enabled.
  2. Verify that your in-app event names are mapped to partner in-app event names.

Meta ads:

Marketer

Troubleshooting guide

Symptom

Description

The dashboard doesn't contain any non-organic installs.
  1. Verify that SKAdNetwork measurement is on.
    1. Go to Settings > SKAN Conversion Studio. 
    2. Click options (⋮)examine 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 Settings > SKAN Conversion Studio. 
    2. Click options (⋮), verify that S2S configuration is on. Note: In Custom and Decode measurement mode, this setting is always on and can't be changed. 
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. 
    1. Go to Settings > SKAN Conversion Studio. 
    2. Click options (⋮), verify that S2S configuration is on. Note: In Custom and Decode measurement mode, this setting is always on and can't be changed. 
  2. Inspect your postback raw data to see if all events are reported. 
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 and reports update

Key Element name Description Example A  Example B  Example C Example D Example E
A SKAN 4 measurement window 1
  • During the window, the CVs are set by the app
  • 0-2 days
  • Window can be locked before 2 days in Conversion Studio

-

-

2 days

-

-

B SKAN 4 measurement window 2
  • During the window, the CV is set by the app
  • 3-7 days
  • Window can be locked before 7 days in Conversion Studio

-

-

-

7 days

-

C SKAN 4 measurement window 3
  • During the window, the CV is set by the app
  • 8-35 days
  • Window can be locked before 35 days in Conversion Studio

-

-

 

-

35 days

D SKAN 4 measurement window 1 postback delay

24-48 hours

-

-

24-48h

-

-

E SKAN 4 measurement window 2-3 delay

24-144 hours

-

-

-

24-144h

24-144h

F

Activity Window

(Not relevant for SKAN 4)

  • During the window, the CV is set by the app. 
  • The window begins when the app is opened for the first time.
  • Duration 12 hours - 63 days.

24h

72h

-

-

-

G

SKAdNetwork timer

(Not relevant for SKAN 4)

  • Countdown timer: 24 hours
  • Each time the CV increases, the timer is reset. This means it starts counting down from 24 hours.
0-24h 0-24h - - -
H

SKAdNetwork random delay

(Not relevant for SKAN 4)

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

0-24h 0-24h - - -
I 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. Meaning processing takes 8-32 hours. 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 8-32h 8-32h 8-32h
J Summary The total time that can elapse  32 hours-104h 80-152h 80-128 hours 200-344h 872-1016h

Organic metrics in the context of SKAdNetwork

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

  • Organic metrics for in-app events aren't available if your selected measurement mode is SKAN 4, Custom, or Decode.
  • 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

Trait Remarks 
Ad network access Ad networks are provided with postbacks
Agencies

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

Historical data

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

User access Account users must have the necessary permissions
App clips App clips are attributed to organic in the SKAdNetwork dashboard. Use the Overview dashboard to view invocation media sources.

SKAN integrated partners

Recording ad revenue

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

To record ad revenue in your SKAN dashboard: 

Note: See generic SDK connector documentation for information on ad sources available for mediation. 

Sending postbacks to integrated partners

AppsFlyer sends integrated partners postbacks relating to SKAN attribution (for SKAN 4, postbacks are sent only for window 1).

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 Collaborate > Active Integrations > select a partner > Integration tab > Data sharing.

In-app event mapping verification