Update (June 30, 2021): Facebook now allows Singular to pull the raw conversion values and decode them within Singular. As a result:
- You can now see raw data for Facebook in the SKAdNetwork Raw report (SKAdNetwork > Raw).
- When setting up a conversion model for Facebook, it is no longer necessary to map SDK events to Facebook events in the Events page. All the mapping is taken care of in the Partner Configuration page (see step 3 below).
Learn how to set up Singular's SKAdNetwork integration with Facebook, which supports all Facebook campaign types. Learn how to use the right conversion model for each campaign type.
To learn about Singular's other integrations with Facebook, see:
- Facebook Data Connector: This integration pulls your campaign data into Singular.
- Facebook Ads Attribution Integration: Configure Facebook as an attribution partner if you use Singular's attribution service.
- FAN Ad Monetization ROI Integration: Use this integration to get ad revenue information from Facebook.
|SKAdNetwork Postback Handling||N/A|
|Conversion Value Decoding||Supported|
|Campaign Data Enrichment||
Due to data being aggregated at the campaign level, Facebook's reporting at the ad set is partial.
Where available, the supported granularity is:
|Campaign Data Granularity||Supported|
Apple's SKAdNetwork framework allows ad networks (and advertisers) to receive some data about app installs attributed to their campaign without compromising the end-user's privacy. All the data about the app install and post-install events have to be contained in a single number from 0 to 63, called the conversion value.
Singular's SKAdNetwork solution offers several different ways to encode data into the conversion value, depending on whether the advertiser is interested in optimizing for revenue, retention, or other KPIs. Each encoding method is called a conversion model.
Facebook's install, app event optimization, and value optimization campaigns in SKAdNetwork are supported through conversion models, which Facebook calls this "configuration schemas." By following the steps in this article, you'll be able to "Import" your Singular conversion model into a Facebook "configuration schema" so Facebook can optimize against SKAdNetwork.
After successfully importing a "configuration schema," you'll be able to start SKAdnetwork-enabled campaigns with Facebook, and the resulting performance data will be available through your existing Facebook data connector.
Note: Facebook does not forward SKAdNetwork postbacks, and as a result, postback data is not available in Singular's Data Destinations (ETL) or User-Level Logs.
1. Implement Singular's SKAdNetwork Solution
2. Configure a Conversion Model
In the Singular web app, go to SKAdNetwork > Model Configuration and select Add Conversion Model. Select a Singular conversion model for your app. Certain Facebook campaign types require specific conversion models. For more information, see What conversion models are supported with Facebook's campaign types?
Important: Facebook requires that all measurable conversions occur within 24 hours of the install, regardless of the campaign type. Make sure to set your Singular conversion model measurement period to 1 day.
3. Map Conversion Model Events to Facebook Events
If you're using a Singular conversion model for SKAdNetwork, make sure that every event defined in the conversion model is mapped to a Facebook event in Attribution > Partner Configuration.
This step is required for the Singular conversion model to appear in Facebook's conversion schema dashboard. Unmapped events will not appear or be used in Facebook's campaign optimization or reporting.
- In Partner Configuration, don't map SDK events to "(Use SDK Event Name)." Always use a Facebook standard event.
- If you're using a revenue conversion model, map the "__REVENUE__" SDK event to "fb_mobile_purchase."
- If you're using a model other than revenue, e.g., a conversion events model, don't use the "__REVENUE__" SDK event. Instead, map your specific SDK events (whether they involve revenue or not) to appropriate Facebook events.
4. Import Conversion Model in Facebook Event Manager
- Go to the Facebook Event Manager's SKAdNetwork Event Configuration.
- Select Settings > Set Up Events.
- Select Import from Partner App. If the "Import" option is not available to select, it may be that Facebook has not received app events for your app before. To enable this option, ensure that your Facebook partner configuration is enabled and that Facebook has received some events.
On the following screen, Facebook will prompt you to enter an MMP URL. Construct the following URL and enter your app's App Store ID in the app_id parameter:
- Once you've imported your Singular conversion model(s), you'll be able to view them on the subsequent screen. Select Apply to complete the process.
FAQ and Troubleshooting
Facebook Ads Manager - Campaign Type Options
You can select different options for optimization for ad delivery when creating your Facebook campaign. Since these campaigns optimize on different app signals, not all campaign types are supported with your Singular conversion model.
Below is a list of Facebook campaign types and the Singular conversion models that are supported for them
|Facebook Campaign Type||Supported Singular Conversion Models|
|App Installs (MAI)||Any model type (conversion event, engagement, funnel, revenue)|
|App Events (AEO)||Conversion event, funnel, revenue|
*see additional requirements
For "Value" to be a selectable option, double-check that your app meets Facebook requirements for value optimization. In particular:
- You must be using a Singular revenue conversion model (configuration schema) and have mapped your Singular "__REVENUE__" SDK event to "fb_mobile_purchase" in step #3 above. Facebook value optimization uses revenue/purchases to optimize, so using a Singular revenue model is required.
- Have an active or recent AEO campaign optimizing using a revenue model for the app, as:
- Facebook must have received at least 15 attributed click-through purchases with conversion values over the last 7 days.
- Facebook must have received at least 2 distinct purchase conversion values over the last 7 days.
For more details, see Facebook's documentation on VO eligibility requirements.
Facebook pulls the latest model roughly once an hour. If you change your conversion model, Singular will pause your existing model and then activate the new model. Due to SKAdNetwork limitations, the process takes up to 48 hours and includes a 24-hour gap in which no conversion values are sent or recorded. This will also cause Facebook to pause your campaigns for 72 hours automatically.
Reminder: While we encourage you to experiment with different models when you start using SKAdNetwork, we don't recommend changing models regularly afterward, due to the delay caused each time.
You can only have one SDK managing SKAdNetwork conversion values in the same app. However, the Facebook SDK will automatically stop managing SKAdNetwork if you follow step 4 in these instructions. Therefore, it's safe to continue using the Facebook SDK for other purposes while the Singular SDK manages SKAdNetwork conversion values.
Facebook's statement on their support and plans for SKAdNetwork mentions the following limitations:
- A measurement period of 24 hours.
- One ad account per app.
- Maximum of 9 active campaigns per app.
- Only aggregate insights (no user-level insights). The aggregate data will be available in Singular's SKAdNetwork reporting.
In addition, note that Singular's conversion event, revenue, and funnel models are recommended for Facebook optimization of MAI and AEO campaigns. Singular's revenue model is required for Facebook optimization of VO campaigns.
Make sure that you've mapped the following:
- The SDK event to a Facebook event (in Partner Configuration)
- The Singular SKAN event to the Facebook event (in Settings > Events).
For more details, see How do I make SKAN events include data from Facebook?
As part of the updates related to iOS 14, Facebook announced new guidelines for using the Advertiser Tracking Enabled flag with MMPs. Your integration with Singular already implements this flag, and no action is required in your Singular SDK implementation.