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.
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, an admin user must configure Data Locker and enable the SKAN reports. To do so, go to Reports > 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.
-
Push API
- Data freshness: See Push API for SKAN data.
-
Data Locker
-
Install date: Is derived from the postback arrival time by AppsFlyer as follows:
-
If the postbacks are SKAN V4, the install date formula is: Install date = postback arrival time - [accumulated window length] - [average postback delay].
- Postback 1: install date = postback arrival time - 48h - 36h
- Postback 2: install date = postback arrival time - 168h - 84h
- Postback 3: install date = postback arrival time - 840h - 84h
-
If the postbacks are SKAN V3, the install date formula is: Install date = postback arrival time - 36 hours - [average last-active range].
- The default [average last-active range] is 12 hours.
- For a conversion value of 0, the average last-active range is set to 0.
- Google estimates the install time on its own and AppsFlyer uses that install time. Note: It can take up to 45 days for Google to report installs. Learn more
-
If the postbacks are SKAN V4, the install date formula is: Install date = postback arrival time - [accumulated window length] - [average postback delay].
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: For SKAN 3, and SKAN 4 window 1 fine value, this is the number of in-app records, depending on your measurement settings.
- Low, medium, or high: For SKAN 4 coarse values, this is the number of in-app records, depending 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.
SKAN raw data report format and content
Raw data 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: Postbacks aren't included when did_win=false. 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. 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). Topic name in Data Locker: skad_inapps Valid for iOS postbacks received starting July 21, 2021:
Valid for iOS postbacks received until July 20, 2021:
|
|||||||||||||||||||||||
Decoded event | SRN advertising dimensions |
|
Raw data field format types
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 |
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. |
Fields available in postback and postback copy reports
Field name | Source or iOS SKAN starting version | Description | Format | Available 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 | Starting August 30, 2021, always null | String | No |
country_code | Ad network | String | No | |
dma | Starting August 30, 2021, always null | String | No | |
postal_code | Starting August 30, 2021, always null | String | No | |
region | AppsFlyer | According to the country_code reported | String | No |
skad_ad_network_id | 1.0 | Some SRNs don't share their ID, and the field is left blank. For example, X Ads. | 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. If null, iOS didn't populate the field** |
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 that AppsFlyer received the SKAN postback. | Timestring | Yes |
ad_network_name | Ad network | Ad network name reported by the ad network to AppsFlyer.
|
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.
|
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:
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 | |
skad_postback_sequence_index | 4.0 (iOS 16.2) |
|
Integer | Yes |
skad_coarse_conversion_value |
4.0 (iOS 16.2)
|
|
String | Yes |
skad_source_identifier | 4.0 (iOS 16.2) |
|
String | Yes |
skad_source_domain | 4.0 (iOS 16.2) |
|
String | Yes |
ad_network_creative | Ad network |
|
String | No |
** Apple determines if the field is populated using a privacy-threshold mechanism |
Fields available in decoded event reports
Field name | Source | Description | Format | Included in SRN advertising dimensions report |
---|---|---|---|---|
ad_network_campaign_id | Ad network | Campaign ID reported by the ad network to AppsFlyer | String | Yes |
ad_network_campaign _name |
Ad network | Campaign name reported by the ad network to AppsFlyer | String | Yes |
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 (time string for SRN advertising dimensions report) |
Yes |
app_id | iOS | The app ID (advertiser app) | String | Yes |
city | Starting August 30, 2021, always null | String | No | |
country_code | Ad network | String | No | |
dma | Starting August 30, 2021, always null | String | No | |
event_name | AppsFlyer |
In-app event name as configured in AppsFlyer. For the SRN ___report, this is the in-app event name as configured in Meta ads. |
String | Yes |
event_uuid | AppsFlyer | A unique random identifier enabling partners to identify duplicate postbacks | String | No |
install_date | iOS | Estimated by AppsFlyer based on the postback arrival time. | Time string | No |
install_type | iOS | New installs | String | No |
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 | No |
media_source | iOS | Ad network attributed using AppsFlyer network names | String | Yes |
postal_code | Starting August 30, 2021, always null | String | No | |
region | AppsFlyer | Determined according to the country_code | String | No |
skad_ad_network_id | iOS | ID of the ad network to whom the postback was sent | String | No |
skad_ambiguous_event (deprecated with SKAN 4+) | 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 | No |
skad_attribution_signature | iOS | String | No | |
skad_campaign_id | iOS | Campaign ID used to publish the ad. Range 0-100 | Integer | No |
skad_conversion_value | iOS |
Conversion value reported by iOS. Range 0-63. If null, iOS didn't populate the field** |
Integer | No |
skad_mode | AppsFlyer | The conversion measurement mode used to decode the iOS postback. Options:
|
String | No |
skad_redownload | iOS | If true, the app was redownloaded | Boolean | No |
skad_revenue | iOS | Event revenue amount in USD. | Float | No |
skad_source_app_id | iOS |
Site ID - the app publishing the ad. Field population depends on privacy thresholds** |
String | No |
skad_transaction_id | iOS | - | String | No |
skad_version | iOS | - | String | No |
timestamp | iOS |
Time that AppsFlyer received the SKAN postback. For Google Ads and Meta ads, this is the time AppsFlyer gets the data from the Google and Meta ads API, respectively. |
Timestamp (time string for SRN advertising dimensions report) |
Yes |
event_value | S2S |
Default value: null Contains a string set by apps implementing custom decode. Advertisers consume this in their systems. AppsFlyer doesn't make use of it. |
String (JSON) | No |
ad_network_adset_id | Ad network | String | Yes | |
ad_network_adset_name | Ad network | String | Yes | |
ad_network_ad_name | Ad network | String | Yes | |
ad_network_ad_id | Ad network | String | Yes | |
skad_did_win (1) | 3.0 (iOS 14.6) | Used to distinguish between campaigns contributing or attributed with the install.
|
Boolean | No |
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:
Disregard the field value if the SKAN version is before 2.2 |
Integer | Yes |
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 | No |
ad_network_channel (1) | Ad network | String | No | |
af_prt (1) | Ad network | String | No | |
min_revenue | AppsFlyer | See note (4) | Real number | No |
max_revenue | AppsFlyer | See note (4) | Real number | No |
event_revenue | AppsFlyer | Formula: [sum of values for the specific event in USD]/[The number of events that happened on a specific day] | Float | Yes |
min_event_counter | AppsFlyer | Use to calculate the number of times a user performs an event. See note (3) | Integer | No |
max_event_counter | AppsFlyer | See note (3) | Integer | No |
min_time_post_install | AppsFlyer | See note (5) | Integer | No |
max_time_post_install | AppsFlyer | See note (5) | Integer | No |
af_attribution_flag | AppsFlyer | When the Single Source of Truth (SSOT) mechanism is on: If true, the install was attributed by both AppsFlyer and SKAN. If false, the install wasn't attributed by AppsFlyer. If the skad_conversion_value is null, the flag is either true or false (based on modeling). | Boolean | No |
measurement_window | AppsFlyer | Duration of the activity window. Default 24h. | Integer | No |
interval | AppsFlyer | Activity window intervals. | Integer | No |
user_agent | AppsFlyer | Device user agent | String | No |
skad_postback_sequence_index | 4.0 (iOS 16.2) |
|
Integer | Yes |
skad_coarse_conversion_value |
4.0 (iOS 16.2) |
|
String | Yes |
skad_source_identifier | 4.0 (iOS 16.2) |
|
String | Yes |
skad_source_domain | 4.0 (iOS 16.2) |
|
String | Yes |
ad_network_creative | Ad network |
|
String | No |
** 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: (4) Revenue is always provided in the field (5)
|
Additional information
Traits and limitations
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 24-48 hours after the window closes. |
Historical data | Limited to the Data Locker availability window. |
Account user access | Available. According to account permissions |