• 12 Jul 2022
  • 9 Minutes to read
  • Dark


  • Dark

Overview of SKAdNetwork

SKAdnetwork is the new way of attribution introduced by Apple for iOS 14. This is the official documentation provided by Apple.

When using SKAdnetwork, a signature is attached to each ad click. When the user opens your app for the first time, Apple will be able to verify if they are coming from a specific ad with this signature. Then, a postback is sent back to the ad network to attribute a new install.

In order to integrate with SKAdnetworks, you will have to call both of these two methods below in the SDK. We have already updated both our iOS and Unity SDK to support the two methods.

  • registerAppForAdNetworkAttribution(): This method should be called at first launch and register the user for attribution. If the user is from a signed ad, a postback will be fired in the following hours notifying the ad network of this app install.
  • updateConversionValue(_:): This method should be called every time you want to update the conversion value attached to this specific user. You can call this method as many times as you want, but the conversion value will only be updated if it is higher than the previous one.

Please check with your ad-networks if they are ready to run SKAdnetwork campaigns.

Conversion Value

Show more

Conversion value is a numeric value between 0 and 63 which you can assign to a specific install. It's a "signal" that will help you understand how valuable a specific user is without giving you a way to identify them. Ad networks can use this information to understand how valuable each install is for your business. This signal can help ad networks identify better audiences to serve your ads and improve your campaign performances.

Below are some important characteristics you need to remember for conversion values:

  • You can only update the conversion value with a value higher than your previous call (1-> 2 but not 3->2).
  • A limited value between 0-63.
  • You can measure conversion values for any time frame within the user's life time, but the longer you wait, the later the ad-networks will get the postback from Apple. In Tenjin, we recommend using 24 hours time window for this reason.
  • The conversion value only appears if there are enough installs from the publisher according to Apple’s privacy thresholds.

In Tenjin, we give developers full flexibility to choose whatever conversion values you want to map to a specific user event. Tenjin's Customer Success team is happy to work with you to figure out the best implementation for your app. Please contact support@tenjin.com. Below are a couple of basic recommendations for apps that are mainly monetized through in-app ads.

1. Map ad revenue to conversion values

  • Figure out the conversion value buckets for each accumulated ad revenue calculated on the device for 24 hours since the install using historical data.

  • Implement the conversion value buckets in the SDK: map accumulated ad revenue to conversion values.

  • Send the corresponding conversion value to Tenjin (and Apple) using updateConversionValue(_:) method in the Tenjin SDK when the ad impression happens every time until 24 hours of install.

    Note: The mapping of ad revenue to conversion values may change over time and require an updates in the app. You also need to integrate Impression Level Revenue Data(ILRD) in the mediation SDK.

2. Map ad impressions to conversion values

  • Figure out the conversion value buckets for each accumulated ad impressions calculated on the device for 24 hours since the install using historical data.

  • Implement the conversion value buckets in the SDK: map accumulated ad impressions to conversion values.

  • Send the conversion value (impression counts) to Tenjin (and Apple) using updateConversionValue(_:) method in the Tenjin SDK every time the impression happens until the first 24 hours of install.

    Note: The mapping of ad impressions to conversion values may change over time and require updates in the app.

3. Sessions

  • Count the sessions as they are accumulated over a 24 hour period since the install.
  • Send the CV (accumulated session count) to Tenjin (and Apple) using updateConversionValue(_:) method in Tenjin SDK every time the session occurs until the first 24 hours of install.

Here are some examples of conversion value implementation shared by other customers:

SKAdnetwork postback timer

Show more

In the postback sent from Apple to ad-network, there are two different types of timers:

  • 24 hours timer: can be reset multiple times and has a defined duration of 24 hours
  • Random timer: once it starts, it can't reset. The duration is random, between 0-24hours

When you fire registerAppForAdNetworkAttribution(), the 24 hours timer starts. If you decide to fire updateConversionValue(_:), the 24 hours timer is reset to zero and starts again. Every time you fire updateConversionValue(_:), the 24 hours timer will reset.
Suppose you don't fire updateConversionValue(_:) before the 24 hours timer expires, a random timer will start. Once the random timer starts, you can't update the conversion value anymore. At the end of the random timer, the postback is sent to the ad network. This postback may or may not include a conversion value (it will be the latest value you set for this specific user)

Feel free to email to support@tenjin.com if you have any questions.

List of supported networks

Show more

Here is the current list of the networks that support SKAdnetwork.

Network Status Postback or reporting API* Definition of reported_installs
AdColony Supported Postback MMP installs
AppLovin Supported Postback SKAdnetwork installs
Facebook Supported Reporting API SKAdnetwork installs
Google Ads Supported Reporting API ** (see below)
Kayzen Supported Postback MMP installs
ironSource Supported Postback MMP installs
Liftoff Supported Postback MMP installs
Mintegral Supported Postback MMP installs
Persona.ly Supported Postback MMP installs
Snap Supported Postback *** (see below)
Tapjoy Supported Postback MMP installs
TikTok Supported Postback SKAdnetwork installs
Unity Ads Supported Postback MMP installs
Vungle Supported Postback MMP installs

*: Does the network pass us SKAdnetwork conversions via postback or reporting API?

**: Conversions from dual opt-in users and Google's modeling conversions (https://support.google.com/google-ads/answer/10081327)

***: Conversions from dual opt-in users and Snap's proprietary attribution method, Advanced Conversions


Show more

I was told by Attribution partner A that they are a certified SKAdNetwork. Are you a certified SKAdNetwork?

  • There is no such thing as certification by SKAdNetwork. In Apple's documentation, attribution partners are not mentioned as part of SKAdNetwork.

What do I, as an app developer, need to do to run iOS 14 compatible campaigns?

  • You need to release an update of your iOS app compatible with iOS 14 using the latest Tenjin SDK, and make sure you are sending us your conversion value. App developers have the flexibility to decide the Conversion Values. If you need ideas on what to map to conversion value, Tenjin can provide you with trainings.

Will I still be able to see all my metrics on app + country level on the Tenjin dashboard?

  • Yes, app + country data will still be available during the phases of our Attribution Modeling solution.

With iOS 14, as you are not FB MMP, will it become completely impossible for you to attribute FB installs?

  • It's the opposite; under iOS 14 there is no exclusivity of data access for FB MMPs. The Facebook API with SKAN is open to everyone. The only benefit for a FB MMP is to sync the conversion value mapping between FB and MMP dashboard. However, you can do this manually and Tenjin can provide you with specific documentation. Please contact support@tenjin.com for these instructions.

Can the ATT consent popup be preceded by the custom popup by the app developer (to encourage the user to accept the consent)?

  • Yes, you can decide on the timing to show the popup, but in the context of attribution we will collect the IDFA at the first app open so the popup should be at that moment to increase the rate of attribution based on IDFA.

Do I need to do anything on the monetization side for SkAdnetwork to work?

  • Yes, if you monetize via ads, your app will be a "source-app" as per Apple language, and you need to add to the list file the SKADnetwork ID of each monetization channel you are working with. See this page for further details.

Why are there some SKAdnetwork postbacks with conversion value NULL?

There are two scenarios:

  1. "If the installed app provides it" - So conversion value(CV) becomes NULL if the app calls registerAppForAdNetworkAttribution but never calls updateConversionValue. Any call to updateConversionValue will set CV to non-null (0 to 63). It could probably mean users are poorly retained and never generate a CV, or the app doesn’t call updateConversionValue often enough.
  2. "meets Apple’s privacy threshold" - Irrespective of what happens in condition (1) above, Apple can decide to set CV=NULL in the postback. Initially, a single campaign for an app will have ALL postbacks with CV=null. After about 50-100 postbacks for that app+campaign, the CV can be non-NULL. At this point the privacy threshold is met, and condition (1) is the only reason future CVs for this campaign may remain NULL.

How does the count of conversion value that I see in Tenjin SK Ad Network tab(Data Exporter) relate to reported and/or tracked installs from Tenjin User Acquisition tab? Which data should I use for my daily operations?

The count of conversion value from the SK Ad Network tab in Data Exporter will reflect the number of installs attributed by SK Adnetwork. This number of SKAd installs is not directly comparable to tracked or reported installs because:

  • Not all network are using SKAd attribution in parallel with traditional attribution.
  • SKAd installs are reported with a delay due to Apple timer, so the date in Tenjin SK Ad Network tab(data exporter) is the date when the SK postback from Apple was received, not the date of the install. In Tenjin User Acquisition tab, the date is the date of install.

The only comparison you can conduct would be by ad network, for a network that you know is running both SKAd and URL attribution in parallel and measure the discrepancy of installs. Some level of discrepancy would be normal:

  • If you are running UA on 10 different channels but only 3 of them run SKAd campaigns, SKAd installs tends to attribute more installs to the 3 channels due to less competition.
  • Aligning the date of SK postback receipt with the install date will always be approximative.

Data Exporter

Show more

SKAdnetwork data is available in Data Exporter tab. Go to ANALYZE -> Data Exporter on the dashboard. You can apply app and channel filters for your data.


You can choose multiple group-by options from this list:

  • Required dimensions
    • App
  • Tenjin dimensions
    • Channel
    • Campaign
  • SK Adnetwork dimensions
    • Conversion Value
    • Fidelity Type
    • SK Channel
    • SK Campaign
    • SK Source app

You can also select multiple metrics from this list:

  • Conversion Value Count (Default)
  • Conversion Value Average (Default)
  • Conversion Value Total
  • First Download Count
  • First Download Conversion Value Average
  • First Download Conversion Value Total
  • Redownload Count
  • Redownload Conversion Value Average
  • Redownload Conversion Value Total
  • Assists
  • Redownload Assists
  • First Download Assists

You can see the definition of those metrics here.

Was this article helpful?

What's Next