SKAN Conversion Studio (SKAdNetwork settings)

At a glance: Use SKAN Conversion Studio to set for what and for how long to measure user engagement in the app. You can measure revenue, conversion, engagement, and retention during an activity measurement window of 12-72 hours post-install.

Related reading: SKAN solution

SKAN Conversion Studio basics

Within the SKAdNetwork (SKAN) attribution flow, an iOS device sends one SKAN postback containing the most recent conversion value (CV). This CV is limited to 6 bits, resulting in 64 possible values (0-63). This limitation does require making some hard choices about how to use those 6 bits.

Conversion Studio provides you with maximum flexibility to make every bit count. You determine precisely what measurement data to encode within the CV—including what activity and for how long to measure during the post-install period. 

 Type

Mode

Description Activity window

Flexible

Custom

[Best practice]

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

Fixed

Revenue

[Default]

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

Select 1-6 in-app events as conversion events 24h

Fixed

Engagement

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-72h
Measurement modes

Tip! Experiment with Conversion Studio. In AppsFlyer go to > Configuration > SKAN Conversion Studio.

Measurement principles and definitions

Definitions

  • Activity window: Determines how long post-install activity is measured. The duration of the window depends on both the iOS and AppsFlyer timers. Measurement stops when either timer reaches 0. The iOS postback is sent 0-24 hours after the iOS timer ends. 
  • Conversion-value capacity: The number of CVs required to map your setting. The more components and measurement elements you select, the more conversion-value capacity is required. Each range or setting element selected consumes conversion-value capacity. (And each additional setting unit included in a single component consumes it exponentially!) Examples of maximized CV usage.
  • Measurement components
    • Revenue: Revenue generated
    • In-app event: Engagement, unique user measurement, or both
    • Funnel: List of sequential events performed by a user

Principles

  • Admin.pngAdmin only: Only the admin can save Conversion Studio settings. Team members can view the settings. 
  • At any given time, only one mode is active. 
  • For a given mode, AppsFlyer maps the combinations defined by your settings to CVs. You can view and download the mapping table
  • In the app, AppsFlyer sets the CV after each measurable user action using the measurement mode active when a user launches the app for the first time. 
  • iOS considers Apple privacy thresholds before populating the CV in the postback.
  • User actions occurring after the end of the activity window are disregarded.
  • SKAN dashboard:
    • The SKAN dashboard layout and metrics depend on the mode and configuration. 

    • The layout updates daily based on the mode active at midnight UTC. Expect the updated layout to be available by 05:00 UTC. 

    • In Custom and Decode, organic install data isn't available. 
  • Measurable actions can be reported by server-to-server (S2S) API. Consider the following per mode: 
    • Custom: S2S is always on
    • Encode: S2S is never available
    • All other modes: You must turn S2S event recording on before sending events

Using Custom

In Custom, you use different measurement components that determine what is measured and set an activity window to determine for how long and at what intervals measurement occurs. Together the activity window with one or more components creates your Custom mode. 

To set Custom, experiment with different options; as you make changes, the Conversion-value capacity gauge updates. Optimize your settings to capture the data most valuable to you without exceeding the capacity. See Conversion value capacity calculation.

CapacitCounter.png

Next steps

The sections that follow detail the setting options and components. Use them as guides as you open Custom and experiment with the different measurement settings.

Activity window

The Activity window regulates the measurement duration and intervals

ConversionStudioActivityWindow.png

Mandatory

Yes 

Multiple-use permitted

No

Characteristics

  • The timer has a fixed duration, set by you, and runs in parallel to the iOS timer.
  • In contrast, the iOS timer has an initial duration of 24 hours. Each time the conversion value increases, the timer is reset.
  • Default duration 24 hours.
  • Measurement stops when either timer reaches 0. 
Timer duration
  • Range: 12-72 hours.
  • When the timer ends, AppsFlyer stops measuring.
  • If the timer duration is more than 24 hours, the user must be active in the app at least once per interval. If not, measurement can end prematurely because AppsFlyer can't prevent the iOS timer from reaching 0; meaning iOS ends measurement. 

Interval

12 or 24 hours. Intervals affect the precision of the last-active time range and install time. 

The last-active time range is available in raw data reports in the min_install_time and max_install_time columns and is used to determine the install time as described in this section.

Example:

  • The timer duration is set to 48 hours
  • The user was last active during hour 40
  • Depending on the interval setting, the last-active time range is: 
    • 12-hour interval: 36–48h
    • 24-hour interval: 24–48h

Install time

Install time is derived as described in this section. 

Install time = Postback arrival time - [Average last-active range] - [iOS postback delay]

  • Postback arrival time: Actual time the iOS postback was first received directly from the device; usually by the ad network. 
  • Average last-active range: Using the min_install_time and max_install time. These are set based on the interval and the last time the user was seen active in the app.  For example, If the interval is 12, as the user was last seen 25 hours post-install, the values will be [24 + 36] / 2 = 30. 
  • iOS postback delay: [24 + 48 ] / 2 = 36. Consider that the iOS timer ends 24 hours after the last change to the CV and the postback is sent 0–24 hours after that. 36 hours is a constant. 

Setting options

The Activity window consists of two settings duration and intervals. 

  • Duration: 24–72 hours with intervals of 24 hours. Maximum 3 intervals.
  • Duration: 12–72 hours with intervals of 12 hours. Maximum 6 intervals.

Impact of changing the activity window duration

  • The postback is sent 0-24 hours after the iOS timer expires. 
  • Initially, the iOS timer is fixed to end after 24 hours. 
  • If you set the activity window to more than 24 hours, the user must be active at least once per interval to assure that the iOS timer doesn't expire.

 

Considerations relating to ad networks

  • The default timer duration is 24 hours.
  • You can set a different duration, but before doing so, verify with your ad network partners if they support a period that differs from the default. 
  • When using the 24-hour window, you can enhance your metrics by splitting the 24 hour period into 2 intervals, each of 12 hours. By doing so, you'll know if the user continued using the app after the first 12 hours. 

Example range capacity requirements

The image in this section shows a timer of 60 hours with a 12-hour interval. 

Revenue component

Measure revenue generated by the user during the activity window

ConversionStudioRevenue.png

Mandatory

No

Multiple-use permitted

Yes, if using the in-app event revenue source. 

Setting options

Revenue can be recorded using a single event, or you can associate revenue by stream using selected in-app events. 

The following revenue source options are supported: 

  • Overall revenue
    • Any revenue is recorded by SKAN using the af_skad_revenueevent.
    • The component can be included once. 
  • In-app event
    • Revenue reported by type is allocated to a selected in-app event and is recorded by SKAN using the selected in-app event.
    • The component can be used multiple times.

Ranges

To measure revenue, you must create revenue ranges. When revenue is reported, SKAN associates the reported revenue with the appropriate range.

Characteristics

  • Each range contains a revenue range consisting of a from value and a to value. The lower value isn't included in the range; however, the upper value is included. For example, 5–10 means greater than 5 up to and including 10. 
  • The range with the lowest value always starts at 0 (but doesn't include 0 itself). 
  • You can create as many ranges as you wish, but keep in mind that each range affects your conversion value capacity.
  • Ranges must be sequential (without gaps between them.)
  • Amounts are in USD
  • If you run campaigns on Facebook, you must have 4 or more ranges. 
  • Range values can have up to 4 digits after the decimal point.

Recording revenue using ranges

  • When revenue is reported, SKAN associates the revenue with the appropriate range. The revenue recorded equals the average value of the range. 
  • If the revenue reported exceeds the maximum value of the highest-value range, the revenue is associated with the highest-value range. Note! The revenue recorded is the average value of this range. In other words, the actual revenue amount is disregarded. 
  • In raw data, the revenue recorded and the associated range are available. 

Example:

In the image, the following revenue ranges are depicted:

  • A: 0-5
  • B: 5-10
  • C: 10-20

Revenue is recorded using the ranges as follows: 

Example Revenue reported by the SDK Associated range Revenue recorded
1 5 $2.5
2 6 B $7.5
3 10 B $7.5
4 125 C $15.0

In-app event component

Measure conversion (number of unique users performing an event), engagement (number of times an event was performed), or both

ConversionStudioIn-app-event.png

Mandatory

No

Multiple-use permitted

Yes
Setting options

Select an in-app event; then setup ranges according to your measurement goal as follows: 

  • Conversion only: Configure one range with a range of 0–1
  • Engagement and conversion: Configure multiple ranges with your selected ranges

Ranges for engagement

To measure engagement, you must create occurrence ranges. When an occurrence of the selected engagement event is reported, SKAN associates it with the appropriate range according to the number of event occurrences.

Characteristics

  • Each range contains an occurrence range consisting of a from value and a to value. The lower value isn't included in the range, and the upper value is. For example, 5–10 means greater than 5 up to and including 10.
  • The range with the lowest value always starts at 0 (but doesn't include 0 itself). 
  • You can create as many ranges as you wish, but keep in mind that each range affects your conversion value capacity. 
  • Ranges must be sequential (without gaps between ranges).

Measuring engagement using ranges

  • When an event occurrence is reported, SKAN associates the occurrence with the appropriate range. Occurrences recorded are derived from the average of the range. The value is rounded up to the nearest integer. For example, 5.7 is rounded up to 6. 
  • If the number of occurrences exceeds the maximum value of the highest-value range, the occurrences are associated with the highest-value range. The number of occurrences recorded is the average value of the highest-value range’s range. In other words, the actual number of occurrences is disregarded. 
  • In raw data, both the actual number of occurrences and ranges are available.

Example:

In the image, the following occurrence ranges are depicted:

The occurrence ranges set are:

  • A: 0-5
  • B: 5-10
  • C: 10-20

Number of occurrences are recorded using the ranges as follows:

Example Number of occurrences reported by the SDK Associated range Number of occurrences reported
1 5 3
2 6 B 8
3 10 B 8
4 125 C 15
 
Limitation A given in-app event can be associated once with this component.

Funnel component

Measures the occurrence of in-app events based on a list of sequential events in a funnel. A user performing any event in the funnel is regarded as having performed all the events preceding that event

ConversionValueFunnel.png 

Mandatory

No

Multiple-use permitted

No

Setting options

List a sequential set of events in a funnel. Since the occurrence of a single event is treated as the occurrence of all preceding events, the order in which you list the events is highly important, as illustrated in the example that follows.

Example

A funnel contains the events a, f, b, k, and z, as illustrated in the preceding image.

Example Event performed Events recorded
1 a a
2 b a, f, b
3 z a, f, b, k, z

Custom subsidiary information

View CV mapping

  • View the events mapped to a CV by selecting the CV. The mapped events display below the table.
  • Download the CV mapping table as a CSV file. Click Download mapping file. 

CVmapping.png

Column Description 
app_id  
conversion_value CV value range 0-63
event_name  
min_event_counter The lower bound of the event counter range
max_event_counter
  • The upper bound of the event counter range.
  • In reports generated by AppsFlyer, the number of events is calculated using the following formula: Roundup ([min_event_counter + max_event_counter]) / 2
min_event_revenue The lower bound of the event revenue range 
max_event_revenue
  • The upper bound of the event counter range.
  • In reports generated by AppsFlyer, the revenue is calculated using the following formula: ([min_event_revenue + max_event_revenue]) / 2)
min_time_post_install

The lower bound, hours post-install, indicating when the user was last active in the app.

max_time_post_install

The upper bound, hours post-install, indicating when the user was last active in the app. 

last_config_change The date you saved the configuration in the SKAN Conversion Studio.
CSV mapping file columns

Conversion value capacity formula

As previously explained, the maximum number of available conversion values is 64. The following formula calculates how many of the available conversion values are used by the mode.

(activity time duration in hours / interval size in hours) * 
(number of revenue ranges + 1 ) * 
(number of in-app event ranges + 1 ) * 
(number of steps in a funnel + 1)

Adjust the formula to include all measurement components

Maximized Custom CV examples

Component Description 

Activity window

  • Duration: 24 hours
  • Interval: 24 hours being 1 interval
Revenue
  • Revenue is reported using a single in-app event (overall) 
  • Revenue ranges: 7 
In-app None
Funnel 3 in-app events
Example 1
Component Description 

Activity window

  • Duration: 24 hours
  • Interval: 12 hours being 2 intervals
Revenue
  • Revenue is reported allocated by type using 2 different in-app events
  • Revenue ranges: 3 (per in-app event)
In-app set for conversion 2 in-app events to measure conversion; each in-app requires 1 range
Funnel None
Example 2
Component Description 

Activity window

  • Duration: 24 hours
  • Interval: 24 hours being 1 interval
Revenue
  • Revenue is reported using a single in-app event (overall) 
  • Revenue ranges: 3 
In-app set for engagement
  • 3 in-app events to measure engagement occurrences
  • Occurrence ranges: 3 per in-app event
Funnel None
Example 3
Component Description 

Activity window

  • Duration: 48 hours
  • Interval: 12 hours being 4 intervals
Revenue
  • Revenue is reported using a single in-app event (overall) 
  • Revenue ranges: 7
In-app set for conversion

1 in-app event to measure conversion; requires 1 range

Funnel

None

Example 4

Using fixed-mode measurement

User-quality measurement types

  • Measurement is for a 24-hour activity window starting with the first app open. 
Fixed mode measurement
Measurement mode Description
[Default] Revenue

RevenueFixed.png

Revenue generated during the 24-hour activity window. 

Select a unit-to-USD rate from one of the following:

  • $0.01 to measure up to $0.63
  • $1 to measure up to $63
  • $10 to measure up to $630

AppsFlyer automatically populates 63 revenue measurement ranges. In the dashboard, revenue is recorded as the average of the range. 

Metrics available:

    • Revenue
    • ROI
    • ROAS
    • ARPU: Revenue/users installing the app
    • Rate of users converting: Users making a purchase/users installing the app
    • eCPA
Conversion

mceclip0.png

In-app events performed one or more times during the 24-hour activity window

Settings:

  • Select 1-6 in-app events to measure from the drop-down list. Limitation: The list is limited to the top 300 events during the previous 30 days.
  • In the SKAdNetwork dashboard, select a given event as the conversion event

Metrics per in-app event:

    • Count of users performing an event
    • Conversion rate: Users performing the Conversion Event/users installing the app
    • eCPA
    • Sessions (uses the af_app_opened event)

Example of user counts:

  • Completed registration
  • Made a purchase
  • Reached a game level

Clarification! Use conversion measurement to count if a user performed an event. To count how many times a user performs an event use engagement measurement.

Engagement

mceclip1.png

Number of times the user performed a specified in-app event during the Activity Window

Settings: 

  • Select an in-app event from the drop-down list.
  • The in-app selection is also designated as the Conversion Event.
  • Value range: 0-63

Metrics for the in-app event:

    • Count of users performing the event
    • Average number of events per user
    • Conversion rate
    • eCPA
    • Sessions

Examples:

  • Measure the number of times:
    • a user opened the app
    • the user viewed an ad

Fixed mode examples

Example A: Revenue measurement
Factor Remarks
Scenario
  • 20 users install the app and perform the following purchases:
    • 9 users, each make a purchase of $10
    • 5 users, each make a purchase of $5
    • 1 user makes a purchase of $1, then $3, then $5, and finally $1. In total $10. 
  • Cost data provided by API from the ad network: $30
SKAN configuration
  • Select measurement type: revenue
  • Set conversion factor: 1 conversion unit = $1
  • Designated conversion event: In the SDK, you must send revenue using the af_revenue parameter. 
Selected metrics  Revenue related metrics available
  • Installs: 20
  • Revenue: $125
  • Conversions:15
  • ARPU: $6.25
  • ROI: 316%
Number of raw data rows per report 

Raw data reports are available via Data Locker

  • Device postbacks: 20 rows
  • Installs: 20 rows
  • In-app events: 15 rows. Note! The user making multiple purchases is represented by a single row of $10. 
Developer considerations

Events carrying revenue are recognized

Example B: Conversion measurement
Factor Remarks
Example
  • 5 users (A-E) install the app
  • They perform 0-3 different in-app events, as depicted in the table
  • Cost data provided by API from the ad network: $30
  in-app-1 in-app-2 in-app-3
User A Performed Performed -
User B Performed - Performed
User C Performed Performed -
User D Performed Performed -
User E - - -
In-app events performed by users
SKAdNetwork Attribution Configuration

Select measurement type: Conversion

  • Select in-app events: in-app-1, in-app-2, in-app-3
  • In the SKAdNetwork dashboard, you select one of the events to calculate the converted users metric. You can change the selected event as needed. 
Selected metrics
Metric  App  in-app-1 in-app -2 in-app- 3
Installs 5      
Conversions 4      
Unique users   4 3 1
eCPA $ 7.5      
In-app related metrics available

Note! Because the designated Conversion Event is in-app 1, the value 4 is used to calculate app-level metrics and for in-app-1 metrics. 

 

Raw data reports are available via Data Locker

  • Device postbacks:5 rows
  • Installs: 5 rows
  • In-app events: 8 rows
Developer considerations
  • Make sure you send in-app events users perform.
  • SKAdNetwork Solution disregards event values (except in relation to revenue measurement.
Example C: Engagement measurement
Factor Remarks
Example

5 users install the app and open the app the number of times listed in the table. 

  Number of times the event is performed
User A 63
User B 10
User C 5
User D 1
User E -
App opens
SKAdNetwork Attribution Configuration
  • Select measurement type: Engagement
  • Designated conversion event: af_app_opened Note! You can use any event available. 
Selected metrics

Sample metrics available

  • Installs: 5
  • Conversions: 4
  • Sessions: 79 
Number of raw data rows per report 

Raw data reports are available via Data Locker

  • Device postbacks:5 rows
  • Installs: 5 rows
  • In-app events: 79 rows; a row is equivalent to a single session
Developer considerations

On each occasion the user performs the selected engagement event: send the in-app event. SKAdNetwork counts the number of times you send the event. 

Dashboard and metrics

In Custom and Encode mode organic metrics aren't available.

Metrics available

Metric Formula/type 
Installs Count
Clicks Count
Impressions Count

Click-to-install rate

Installs / Clicks *100 
Cost Campaign cost [Premium Feature]
Effective cost per install (eCPI) Cost / Installs
Converted users

This metric requires that you select the overall revenue option. 

Count of unique users performing a designated measurement event.

  • Revenue event: Event must be af_skad_revenue
  • In-app event and funnel: Select the event in the dashboard. 

 

Converted users rate

Converted users / Installs * 100

Effective cost per action (eCPA)

Cost / Unique users performing a designated event

Metrics available (irrespective of measurement component)


User-quality measurement types

Metrics available per measurement component
Measurement component Description
Revenue

Revenue is recorded in USD using the range associated with the revenue reported. The revenue reported in the dashboard is the average value of the ranges.

Metrics:

    • Revenue
    • ROI
    • ROAS
    • ARPU: revenue/number of users installing the app
    • Rate of users converting: Number of users making a purchase/users installing the app
    • eCPA
Funnel

In-app events are performed as part of a funnel. 

Metrics per in-app event:

  • Count of users performing each of the events
  • eCPA
  • Sessions

Example of user counts:

  • Completed registration
  • Made a purchase
  • Reached a game level

Clarification! Use Funnel to measure if a user performed a sequence of events.

In-app

Number of times the user performed a specified in-app event during the Measurement Window

Settings: 

  • Select an in-app event from the drop-down list.
  • The in-app selection is also designated as the Conversion Event.

Metrics for the in-app event:

    • Count of users performing the event
    • eCPA
    • Sessions

Examples:

  • Measure the number of times:
    • a user opened the app
    • the user viewed an ad

Procedures

Set up SKAN attribution

This configuration procedure must be performed by the account admin or a team member having edit app settings permission. 

To view or change team member permissions:

  1. In AppsFlyer, in the upper-right click on your email address. 
  2. Select Team members > Select the team member.
  3. If required, grant the team member Edit app settings page & SKAN settings page capabilities.

AppsFlyerAdmin_us-en.png To configure SKAN:

  1. In AppsFlyer, go to Configuration > SKAN Conversion Studio.
    The Conversion Studio opens.
  2. Do one of the following:
    1. Click options () to display the options menu. Do one of the following:
      • Turn SKANetwork measurement on or off. 
      • Enable sending events by S2S. Available if the selected mode is revenue, conversion, or engagement. Note! S2S is always on in Custom mode. 
      • Upload your Encode mapping file.
    2. Select a measurement mode from:
      • Custom 
      • Revenue
      • Conversion
      • Engagement
  3. Verify that SKAN measurement is on. Note! If off, the SDK does not call iOS SKAN functions like registerAppForAdNetworkAttribution, updateConversionValue.
  4. Click Save changes.
    Measurement is active. Users opening the app for the first time are measured using these settings. SKAdNetwork attribution data updates in the dashboard 48-72 hours after the first app open. 

Change SKAN measurement mode

You can select a different SKAN measurement mode at any time. 

Consider: 

  • When you make settings change a transition period begins. During this period we decode the conversion value using the most recently selected settings. However, a postback arriving now relates to an install that occurred sometime in the past. 
  • The number of installs reported is not related to the settings change and is accurate. In raw data, we indicate postbacks decoded during the transition period with a skad_ambiguous_event parameter. 
  • The transition period is calculated using the activity window duration before the change as follows:
    Transition period =  activity window + 48 hours.  The Default transition period is 24 + 48 hours. The maximum transition period is 48 + 72 hours. 
  • Ad networks, don't consider the transition period or install date, as they regard the postback arrival time as the install date. 

Campaign pause:

  • If you integrate with Facebook, changing the settings automatically pauses Facebook campaigns.
  • Regarding other campaigns, consider pausing them for the duration of the transition period.

Disable SKAN measurement

To turn off SKAdNetwork measurement:

  1. In AppsFlyer, go to Configuration > SKAN Conversion Studio.
  2. Click .
  3. Turn off SKAdNetwork measurement. 
    Amongst other things, the SDK stops calling SKAN functions like registerAppForAdNetworkAttribution, updateConversionValue.
  4. Click Save changes.

Report events by server-to-server API

SKAdNetwork_-_S2S__2_.png

Both the SDK and server-to-server API (S2S) can send in-app events to AppsFlyer servers. 

The S2S flow is as follows:

  • An event occurs related to the user in the advertiser's servers. The app may be open or closed at this time. 
  • Advertiser servers report the event to AppsFlyer by S2S.
  • AppsFlyer calculates the updated conversion value and then: 
    • If the app is open on the user device: the SDK is notified of the updated value. The SDK updates the iOS conversion value on the device.
    • If the app isn't open on the user device: the server waits until the app is opened to notify the SDK of the conversion value. This must occur before the expiry of the Activity Window. If notification fails, the event is disregarded.

SDK version required

  • Adopt the latest SDK version in the app. Note! No additional action is required by the developer. 

Limitation

  • If you implement user anonymization for a given user then you can't send events by S2S for that user. 

To implement in-app event sending by server-to-server API:

  1. Do one of the following:
    • If your selected mode is Custom:
      • No settings changes are required. 
    • If your selected mode is revenue, conversion, or engagement:
      1. In AppsFlyer, go to Configuration > SKAN Custom Studio.
      2. Click options (⋮).
      3. Turn on Record in-app events sent by server-to-server API.
  2. Send events by S2S. 
Was this article helpful?