SKAN raw data reports

At a glance: SKAN raw data reports contain row-level data generated after translating and decoding postbacks received by AppsFlyer from iOS, as well as raw SKAN postbacks. Data is available via Data Locker and Push API. If your subscription plan includes raw data, there is no need for a Data Locker subscription. 

Related reading: SKAN reports available

SKAN raw-data reports

Principles: 

  • Data is provided by:
    • Data Locker.
      • Note! Available to accounts having a raw data subscription. Meaning, there is no need for a Data Locker subscription. If you aren't currently using Data Locker, the admin must configure Data Locker and enable the SKAN reports. To do so, go to Integration > Data Locker. Select the SKAN reports. 
      • Data freshness rate: Daily. Data is contained in the h=23 folder of the date the postback is received by AppsFlyer. Example: If the postback was received on Monday, it is processed after the end of the day. Processing is completed, by 12:00 UTC Tuesday, the data is written to the Monday h=23 folder. 
    • Push API
  • Install date:
    • The install date is derived from the postback arrival time.
    • By default, the install time is 48 hours before postback arrival. As such, reports contain installs of multiple days.
    • If you use custom conversion value, the formula to derive the install time is:
      postback arrival time-24 hours-hours_from_install

Report types available are: 

  • Device postback: 1 device postback per install or redownload received from the iOS device.
  • SKAN raw data:
    • AppsFlyer decodes and translates the device postback into raw data records.
    • Each postback generates an install or redownload record and in-app event records.
    • The number of in-app event records depends on the conversion value (CV) as follows:
      • CV = 0, blank, or null: No in-app records are generated. 
      • CV range 1-63: The number of in-app records depends on your measurement settings. 

Why are some fields empty? This occurs for any of the following reasons:

  • Non-mandatory enrichment fields like campaign_name, ad_network_campaign_id, ip that the ad network did not provide.
  • Apple withheld the data due to Apple threshold policies. Fields like source_app_id, skad_campaign_id, skad_conversion_value. 

Report types

Report type Report name Description
Postback Postbacks

Postbacks sent by iOS to the ad network. The postback, after enrichment by the ad network, is forwarded to AppsFlyer. Download postbacks example (CSV).

Note: This topic can contain both winning and contributing postbacks. Use the did_win field to differentiate them. 

Topic name in Data Locker: skad_postbacks

Postback Postbacks copy (direct from Apple)

Postbacks sent directly by iOS to AppsFlyer.

Available starting iOS 15+ and requires the advertiser to configure the app to send the winning postback to AppsFlyer. Download postbacks copy example (CSV).

Note: This topic contains only winning postbacks. 

Topic name in Data Locker: skad_postbacks_copy

Decoded event Installs

First-time app installs

SKAN reported redownload=false. Meaning, this is the first time the user, represented by the Apple ID, downloaded the app.
Download installs example (CSV).

Topic name in Data Locker: skad_installs

Decoded event Redownloads

App installs that are not first-time installs

SKAN reported redownload=true. Meaning, this is not the first time the user, represented by the Apple ID, downloaded the app. This report has the same structure as installs.

Topic name in Data Locker: skad_redownloads

Decoded event In-app events

In-app events

Starting July 21, 2021, there are changes to how we provide in-app event raw data as detailed in the tables. 

The number of in-app event records depends on your measurement settings. 

Download in-app events example (CSV).

Measurement type Description
Revenue
  • Revenue of a given user. If revenue > 0, a record containing the skad_revenue and event_name fields.
  • The fields min_revenue and max_revenue are populated with your custom conversion range values.  
In-app conversion and funnel events
  • A record for each unique conversion event performed. The event_name field is populated accordingly. If no events are performed, there is no record.
  • Conversion events have min_event_counter = 0 and max_event_counter = 1. 
In-app engagement  To determine the number of times a user performed a given in-app event use the formula[round up (min_event_counter + max_event_counter) / 2]
Valid for iOS postbacks received starting July 21, 2021

 

Measurement type Number of records Description
Revenue 0-1 If revenue > 0, a record containing the skad_revenue and event_name fields.
Conversion 

0-6

A record for each unique conversion event performed. The event_name field is populated accordingly. If no events are performed, there is no record.
Engagement

0-63

The number of records represents the number of times the user performed the engagement event. If the user does not engage, there are no engagement records.
Custom 0-unlimited According to your custom conversion schema. 
Valid for iOS postbacks received until July 20, 2021. 

SKAN raw data fields

Field formats
Format name Description
String [n]

The maximum length of the string. We don't usually enforce field length limitations on receipt of the data, but data may be truncated thereafter.

Time string

String having the format, yyyy-mm-dd hh:mm:ss. For example, 2019-09-17 00:09:25 

Enum [n] Enum fields can only contain specific values. For example, Cost currency has 3 characters and can contain only currency codes as specified.
Timestamp

10-digit UNIX timestamp. Example:

August 4, 2020, 07:25 UTC translates to "timestamp": "1596525944"

Boolean

The value of the field can be either TRUE or FALSE

Integer

Integer

Float

Real floating number that can have a decimal point and values after the decimal point.

Postback raw data fields
Field name Source or iOS SKAN starting version Description Format Included in postbacks copy 

ad_network_campaign_id

Ad network Campaign ID reported by the ad network to AppsFlyer String No

ad_network_campaign

_name

Ad network

Campaign name reported by the ad network to AppsFlyer.

 

String No

ad_network_timestamp

Ad network

Time the ad network received the postback.

In the case of Google Ads, the time is derived from the last-click time reported by Google.

Timestamp No

app_id

AppsFlyer App ID (advertiser app) with prefix ID. String Yes

city

AppsFlyer Staring August 30, 2021, always null  String No

country_code

Ad network   String No
dma   Staring August 30, 2021, always null  String No

postal_code

  Staring August 30, 2021, always null   String No

region

AppsFlyer According to the country_code reported String No

skad_ad_network_id

1.0 
  • ID of the ad network to credit. Use did_win to identify if the ad network is the winner or the contributor. 
  • Some SRNs don't share their ID, and the field is left blank. For example, Twitter. 
String

Yes 

skad_attribution_signature

1.0   String Yes
skad_campaign_id 1.0 Campaign ID used to publish the ad. Range 0-100 String Yes
skad_conversion_value 2.0 

Conversion value reported by iOS. Range 0-63.

Field population depends on privacy thresholds**

Integer Yes
skad_redownload 2.0 If true, app was redownloaded

Boolean

Yes

skad_source_app_id 2.0

Site ID. The app publishing the ad. This field is identical to source_app_id.

Field population depends on privacy thresholds**

String Yes
skad_transaction_id 1.0   String Yes
skad_version 2.0   String Yes
timestamp Ad network

Time the iOS device sent the postback.

In the case of Google ads, this time is derived using the last-click time reported by Google Ads. 

Timestring Yes
ad_network_name Ad network

Ad network name reported by the ad network to AppsFlyer. 

  • If this field is blank, the ad network didn't (couldn't) populate it.
  • You can resolve the ad network name using skad_ad_network_id. Use this table to do so. 
String No
ip  

IP address in the HTTP message of the iOS device sending the postback.

This field is populated if the ad network provides us with the address.

Note! The SDK isn't involved in getting the address.

String No

skad_app_id

1.0   String No

source_app_id

AppsFlyer Site ID. The app publishing the ad. This field is identical to skad_source_app_id String No

ad_network_adset_id

Ad network   String No

ad_network_adset_name

Ad network   String No

ad_network_ad_name

Ad network   String No

ad_network_ad_id

Ad network   String No

did_win

3.0 (iOS 14.6)

Used to distinguish between campaigns contributing or attributed with the install. 

  • If true, the campaign is attributed for bringing the install.
  • If false, the campaign is recognized as contributing to the install
Boolean Yes

fidelity_type

2.2 (iOS 14.5)

Differentiate between ad presentation options that affect attribution. Indicated using the values 0 and1 as follows: 

  • View-though ads (0)
  • StoreKit-rendered ads (1)

Disregard the field value if the SKAN version is before 2.2

Integer Yes

ad_network_source_app_id

Ad network Publisher app ID reported by the ad network. Use to help reconcile cost; reported by the ad network. The publisher app gives the basis for this data.  String No

ad_network_channel

Ad network   String No

af_prt

Ad network   String No

** Apple determines if the field is populated using a privacy-threshold mechanism 

 

 

Decoded event raw data fields
Field name Source Description Format
ad_network_campaign_id Ad network Campaign ID reported by the ad network to AppsFlyer String
ad_network_campaign
_name
Ad network Campaign name reported by the ad network to AppsFlyer String
ad_network_timestamp Ad network

Time the postback was received by the ad network

In the case of Google Ads, this field isn't populated. 

Timestamp
app_id iOS The app ID (advertiser app) String
city   Staring August 30, 2021, always null  String
country_code Ad network   String
dma   Staring August 30, 2021, always null  String
event_name AppsFlyer In-app event name String
event_uuid AppsFlyer A unique random identifier enabling partners to identify duplicate postbacks String
install_date iOS Estimated by AppsFlyer based on the update Conversion window. Time string
install_type iOS New installs String
ip iOS

The IP address in the HTTP message of the iOS device sending the postback.

This field is populated if the ad network provides us with the address.

Note! The SDK isn't involved in getting the address. 

String
media_source iOS Ad network attributed using AppsFlyer network names String
postal_code   Staring August 30, 2021, always null  String
region AppsFlyer Determined according to the country_code String
skad_ad_network_id iOS ID of the ad network to whom the postback was sent String
skad_ambiguous_event AppsFlyer If true, the iOS postback was received during the first 72-hours after an advertiser changed the SKAN settings in the dashboard. Due to the various timers employed by SKAN, AppsFlyer can't map the event accurately. Boolean
skad_attribution_signature iOS   String
skad_campaign_id iOS Campaign ID used to publish the ad. Range 0-100 Integer
skad_conversion_value iOS

Conversion value reported by iOS. Range 0-63.

Field population depends on privacy thresholds**

Integer
skad_mode AppsFlyer The conversion measurement mode used to decode the iOS postback. Options: total, revenue, events, engagement, custom_encode, custom_decode String
skad_redownload iOS If true, the app was redownloaded Boolean
skad_revenue iOS Event revenue amount in USD. Float
skad_source_app_id iOS

Site ID - the app publishing the ad.

Field population depends on privacy thresholds**

String
skad_transaction_id iOS - String
skad_version iOS - String
timestamp iOS

Time the postback was sent by the iOS device.

In the case of Google ads, this time is derived using the last-click time reported by Google Ads. 

Timestamp
event_value S2S

Default value: null

Contains a string set by apps implementing custom decode or event sending by S2S

Advertisers consume this in their systems. AppsFlyer doesn't make use of it. 

String (JSON)

ad_network_adset_id

Ad network   String

ad_network_adset_name

Ad network   String

ad_network_ad_name

Ad network   String

ad_network_ad_id

Ad network

 

String

skad_did_win (1)

3.0 (iOS 14.6)

Used to distinguish between campaigns contributing or attributed with the install. 

  • If true, the campaign is attributed for bringing the install.
  • If false, the campaign is recognized as contributing to the install
Boolean

skad_fidelity_type (1)

2.2 (iOS 14.5)

Differentiate between ad presentation options that affect attribution. Indicated using the values 0 and1 as follows: 

  • View-though ads (0)
  • StoreKit-rendered ads (1)

Disregard the field value if the SKAN version is before 2.2

Integer

ad_network_source_app_id (1)

Ad network Publisher app ID reported by the ad network. Use to help reconcile cost; reported by the ad network. The basis for this data is provided by the publisher app. String

ad_network_channel (1)

Ad network   String

af_prt (1)

Ad network   String

min_revenue 

AppsFlyer See note (4) Real number

max_revenue 

AppsFlyer See note (4) Real number

min_event_counter

AppsFlyer Use to calculate the number of times a user performs an event. See note (3) Integer

max_event_counter

AppsFlyer See note (3) Integer

min_time_post_install

AppsFlyer See note (5) Integer

max_time_post_install

AppsFlyer See note (5) Integer

af_attribution_flag

AppsFlyer Reserved for AppsFlyer future use Boolean

measurement_window

AppsFlyer Duration of the activity window. Default 24h.  Integer

interval

AppsFlyer Activity window intervals.  Integer

user_agent

AppsFlyer Device user agent String

** Apple determines if the field is populated using a privacy threshold mechanism

(1) Starting June 2, 2021, the field is added to reports but won't necessarily be populated.

(3) To determine the number of times a user performs a given in-app event use the formula: [round up (min_event_counter + max_event_counter) / 2] . Note!  You must round up the nearest integer.
Example:
A. If min = 0 and max = 1 the average is 0.5; rounding up returns a result of 1.
B. If min = 5 and max = 10, the average is 7.5; rounding up returns a result of 8.

(4) Revenue is always provided in the field skad_revenue. If you use Custom mode, the bucket range associated with the event and used to calculate skad_revenue is described by min_revenue and max_revenue.

(5) In Custom conversion, AppsFlyer calculates install time as the postback arrival time - 48h - average (min_time_post_install + max_time_post_install).

Traits and limitations

SKAN Solution
Trait Remarks 
Ad network access Ad networks are provided with postbacks
Agency access Not available
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 less non-organic installs reported by SKAN.
Non-organic data Based on SKAN postbacks
Data freshness

Daily. SKAN timing means that iOS reports on an install 48–72 hours after the first app open.

Historical data

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

Team member access Available. According to account permissions
Was this article helpful?