Learn how to become an integrated partner of Singular’s SKAdNetwork solution. See also: Integrating with Singular Attribution, which is a separate and required integration.
If you are a Singular customer, see Singular's SKAdNetwork Solution instead.
SKAN 4.0 Updates
- New postbacks: SKAdNetwork 4.0 sends three postbacks per install.
- Two types of conversion values:
- Fine conversion value: the 0-64 conversion value used until now
- Coarse conversion value: only has three possible values - low, medium, and high.
- Source ID: Instead of a campaign ID, SKAdNetwork now supports a 4-digit Source ID that can be used to encode additional information. For example, you can use 2 digits to encode the campaign ID, the 3rd digit to encode country, and the 4th digit to encode creative or publisher.
- Depending on the level of anonymity (as determined by Apple's privacy thresholds), the Source ID actually included in a postback may include only the first 2 or 3 digits.
The following table summarizes the functionality of the 3 postbacks sent for each install.
Instead of the Campaign ID, SKAN 4.0 postbacks include a Source ID field that can include up to 4 digits.
You can choose what information to encode in the digits of the Source ID.
The actual number of digits included in the postback may be 2, 3, or 4, determined by Apple's privacy thresholds. Low-volume campaigns may be considered low anonymity and therefore yield only 2 digits of the Source ID. High-volume campaigns provide a high level of anonymity and therefore are expected to yield the full 4 digits of information in the first postback sent after an install.
In the following example, provided by Apple, 2 digits of the Source ID are used to encode the campaign ID, the 3rd digit is used to encode location, and the 4th encodes ad placement. Based on the anonymity level of the campaign (low, medium, or high), postbacks may include 2, 3, or 4 digits.
Integrating with Singular's SKAdNetwork solution is a separate process from the normal attribution integration with Singular. Having a working attribution integration with Singular is a prerequisite before following the steps below to integrate with Singular's SKAdNetwork solution.
Register With SKAdNetworkIf you are not already registered with Apple as a SKAdNetwork Partner, do so now and receive your "ad network ID".
Handle SKAdNetwork Postbacks
Option A: Use the 307 Redirect SKAN
Use a 307 redirect to allow Singular to receive the same SKAdNetwork postback sent from the device.
When you receive a SKAdNetwork postback for an advertiser who uses Singular as their MMP, use a 307 redirect to allow Singular to receive the same postback. Redirect the postback to Singular's dedicated skan_postback endpoint.
The redirect should also include some additional parameters in the URL (refer to the Ad Network fields). Here is an example for a full URL you could redirect the postback to:
See the parameter reference for more details.
Option B: Send the contents of the SKAdNetwork postback to Singular
As an ad network partner, you can use the skan_postback endpoint to send Singular a postback containing the entire payload of the postback from SKAdNetwork, unmodified. The postback should also contain some additional parameters.
Starting from SKAdNetwork version 4.0, the postback sent to Singular may look as follows (make sure to set the "Content-Type" header to "application/json"):
In case of the previous SKAdNetwork version 3.0 and below, the postback to Singular may look as follows:
See the parameter reference for more details.
Decode the SKAdNetwork Conversion Value
After you send Singular an SKAdNetwork postback using one of the methods above, you may want to decode the meaning of the conversion value using the SKAN Conversion Info API (version 2 of the API is coming soon).
This API simply returns the configured conversion model for a given app(s), provided the following requirements have been met:
See our supporting technical documentation for this API for more information on request/response specifications and examples.
Note: The SKAN Conversion Info API is in limited release. If you're interested in using this API to decode SKAdNetwork conversion values, contact your Singular partner manager or the integrations team (see How to Contact Singular).
Handle the Source ID (formerly Campaign ID)If you use the Secure SKAN method to report SKAdNetwork postbacks to Singular, you can pass the information to Singular via your analytics integration with Singular. As our goal is to receive all the information possible in order to improve our shared customers' experience, we would be glad to discuss this process with you.
Apple's introduction of App Tracking Transparency limits the use of traditional user-level mobile measurement. Starting with iOS 14.5, the iOS Advertising Identifier (IDFA) is available only for end-users who consent to share their data (opt-in).
The alternative offered by Apple is SKAdNetwork, a privacy-centric framework for aggregate campaign measurement, which was originally introduced with iOS 11.3 but has been updated significantly for iOS 14. Ad network partners who are registered with SKAdNetwork can receive automatic "SKAdNetwork postbacks" when there is an app install, whether the end-user opted in to sharing their data or not.
SKAdNetwork decentralizes key performance data between advertisers, publishers, ad networks, and mobile measurement providers, making it more difficult for advertisers to access the performance data that they need to make marketing decisions.
Singular's SKAdNetwork solution, SKAN, gathers the data that advertisers need using an information exchange between the end-user's device, the ad network, and Singular (as the MMP).
- The SKAdNetwork postback is sent from the device to the ad network + to the MMP.
- The conversion value and its meaning are sent from the MMP to the ad network.
- The campaign ID and its meaning are sent from the ad network to the MMP.
Data flow diagram for Singular's Secure SKAN
- Ensure your ad network is already integrated with Singular attribution.
- Register for SKAdNetwork and have an "ad network ID" issued by Apple.
- Gather requirements: Review What is a Singular SKAdNetwork Integration? to understand the integration details and options available.
- Fill out the integration form for Singular's SKAdNetwork solution.
- Receive our integration team's reply: The Singular integration team will review your form and let you know if we have any questions or if we have all the information we need.
Test the Integration: After Singular finishes creating the integration, we will contact you to let you know how you can test the integration on your end.
Once you've completed the SKAdNetwork integration with Singular and have received confirmation that your skadnetwork ID is configured, you can test the integration by simply forwarding a SKAN postback for either a live app or a sample app.
In case you are already working with a live app by a Singular customer and have shared access to their account, you can simply send a test postback for their app and check Singular's Export Logs or SKAN Reports to confirm it's been received.
If you don't have a live app yet and would like to test a sample app, you can send a simulated postback for Singular's Device Assist app located here:
Our support can validate if the postback has been processed successfully. To receive that confirmation, open a support ticket with the postback details and when it was sent.
Singular automatically processes SKAdNetwork postbacks as they are received. If postbacks are delayed, we recommend running reports using the Estimated install date date type instead of Postback date.
This section documents the API endpoint and parameters that Singular supports for inbound SKAdNetwork postbacks to Singular (device → Singular, Ad Network → Singular).
*indicates a required value
|Data Source||Parameter||Parameter Description||Type|
|SKAdNetwork 1.0||ad-network-id *||The "ad-network-id" from the SKAdNetwork postback||String|
|SKAdNetwork 1.0||transaction-id *||The "transaction-id" from the SKAdNetwork postback||String|
|SKAdNetwork 1.0||campaign-id *||The "campaign-id" from the SKAdNetwork postback||Integer|
|SKAdNetwork 1.0||app-id *||The "app-id" from the SKAdNetwork postback||Integer|
|SKAdNetwork 1.0||attribution-signature *||The "attribution-signature" from the SKAdNetwork postback||String|
|SKAdNetwork 2.0||version *||The "version" from the SKAdNetwork postback. Required with SKAdNetwork version 2.0||String|
|SKAdNetwork 2.0||redownload *||The "redownload" from the SKAdNetwork postback. Required with SKAdNetwork version 2.0||bool|
|SKAdNetwork 2.0||source-app-id *||The "source-app-id" from the SKAdNetwork postback. Required with SKAdNetwork version 2.0 (do not include the field if it doesn't exist in the original postback)||Integer|
|SKAdNetwork 2.0||conversion-value *||
The "conversion-value" from the SKAdNetwork postback. Required when sent with SKAdNetwork version 2.0 (do not include the field if it doesn't exist in the original postback)
|SKAdNetwork 2.2||fidelity-type *||The "fidelity-type" from the SKAdNetwork postback. Required with SKAdNetwork version 2.2||Integer|
|SKAdNetwork 3.0||did-win *||The "did-win" from the SKAdNetwork postback. Required when sent with SKAdNetwork version 3.0||bool|
|SKAdNetwork 4.0||source-identifier *||
The "source-identifier" from the SKAdNetwork postback. Required when sent with SKAdNetwork version 4.0
|SKAdNetwork 4.0||source-domain *||The "source-domain" from the SKAdNetwork postback. Required with SKAdNetwork version 4.0 (do not include the field if it doesn't exist in the original postback)||String|
|SKAdNetwork 4.0||postback-sequence-index *||
The "postback-sequence-index" from the SKAdNetwork postback. Required when sent with SKAdNetwork version 4.0
|SKAdNetwork 4.0||coarse-conversion-value *||
The "coarse-conversion-value" from the SKAdNetwork postback. Required when sent with SKAdNetwork version 4.0 (do not include the field if it doesn't exist in the original postback)
|Ad Network||skan_timestamp *||The Unix formatted (seconds) timestamp when the SKAdNetwork postback was received.||Integer|
|Ad Network||skan_ip *||The IP address of the sender from the SKAdNetwork postback||String|
|Ad Network||adn_campaign_id *||The ID of the campaign||String|
|Ad Network||adn_campaign_name *||The name of the campaign||String|
|Ad Network||adn_creative_id||The creative ID||String|
|Ad Network||adn_creative_name||The creative name||String|
|Ad Network||adn_sub_campaign_id||The ID of the sub-campaign. May also represent the "ad group" or "ad set".||String|
|Ad Network||adn_sub_campaign_ name||The name of the sub-campaign. May also represent the "ad group" or "ad set".||String|
|Ad Network||adn_sub_adnetwork_ name||The sub ad network, which may represent an additional level of ad network hierarchy||String|