Facebook Ads and AppsFlyer SKAdNetwork interoperation

At a glance: Interoperability enables Facebook to share decoded SKAdNetwork data with us and enables us to share your conversion value measurement bits (mapping) with Facebook.

iOS 14 updates relating to Facebook

AppsFlyer confirms that our MMP integration with Facebook always implements the Advertiser Tracking Enabled flag. Meaning, no action is required of you in AppsFlyer. This information is provided pursuant to the Facebook app guidance iOS 14 checklist dated February 2021.

SKAdNetwork interoperability: AppsFlyer <-> Facebook

If you work with multiple ad network partners, the best practice is to set it up in AppsFlyer. By doing so, SKAdNetwork performance metrics, enriched with other metrics like cost, are available via the AppsFlyer platform. 

Related reading: AppsFlyer SKAdNetwork Solution guide

Scope of SKAdNetwork interoperability with Facebook

The interoperation allows the following:

  • AppsFlyer and Facebook share the SKAdNetwork conversion value schema, enabling both to provide you with performance metrics.
  • AppsFlyer supports all Facebook Ads campaign objectives which enable campaign optimization:
    • Mobile app install (MAI)
    • Mobile app engagement (MAE)
    • Value optimization (VO)
  • If you enable SKAdNetwork partner integration in Facebook: The Facebook SDK stops updating SKAdNetwork conversion value (kill switch). The AppsFlyer SDK updates the conversion value.
  • Facebook shares SKAdNetwork data for inclusion in the AppsFlyer SKAdNetwork dashboard and aggregated reports. If you don't do so, Facebook attributed installs are counted as organic installs. 
  • Traditional dashboard: installs brought by Facebook of consenting users display correctly. Non-consenting users are attributed to organic. 
  • iOS 14.5 implications on SRN reporting

Considerations

  • Once interoperability is enabled each time you change the measurement settings in AppsFlyer, Facebook pauses (Facebook guidance) your campaigns. Before enabling them, verify that all relevant in-app events are mapped. Note! You don't need to repeat the MMP integration procedure in this article. Meaning you don't need to copy the MMP connection URL again. 
  • If you turn SKAdNetwork measurement off in AppsFlyer, Facebook can no longer get your measurement settings. 
  • AppsFlyer SDK vs. Facebook SDK: The Facebook SDK is suited if you run campaigns only with Facebook. If you run campaigns with multiple partners then using the AppsFlyer SDK allows you to use a common measurement system and to view data of all partners in AppsFlyer. 
  • Reporting: Facebook installs are reported in the dashboard and aggregated reporting API but aren't available in postback level reports. 

Facebook app install ads guidance

In configuring your Facebook iOS 14 app install campaigns, take into account the following Facebook guidance

  • An app can belong to only 1 ad account.
  • A maximum of 9 campaigns per app, each having 5 ad sets is allowed.
  • Facebook no longer requires a new, separate account for iOS 14 campaigns. You can run iOS 14 campaigns from existing accounts.
  • There is a relationship between the Facebook optimization method and the measurement type you select in AppsFlyer as follows:
    • Revenue measurement: VO and AEO 
    • Conversion measurement: AEO— Includes Facebook standard events and purchase event. You must map the app event in AppsFlyer to the relevant Facebook event. 

Interoperation procedures

Interoperation consists of two parts as follows:

  • Share the conversion value schema with Facebook. No interoperation is required in the app itself. However, you need to adopt the most recent AppsFlyer SDK into the app. 
  • Allow Facebook to share SKAdNetwork data with AppsFlyer. This updates the SKAdNetwork dashboard and reports in AppsFlyer.

Complete the procedures that follow to enable interoperation. 

Share conversion value schema with Facebook

SKAdNetwork-Facebook-AppsFlyer_integration__5_.png

To enable AppsFlyer SKAdNetwork interoperation with Facebook:
Step Action Details 

1

App prerequisites
  • Adopt the most recent AppsFlyer SDK into your app.

2

SKAdNetwork settings review 

Verify that AppsFlyer SKAdNetwork Solution is set up and is on. Doing so allows the AppsFlyer SDK to call SKAdNetwork APIs and set the conversion value.

To view SKAdNetwork settings:

  1. In AppsFlyer, go to Configuration > SKAdNetwork Settings.
  2. Make a note of the exact event names set. You need them in the next step. Note! Names are case-sensitive.
  3. Verify that SKAdNetwork measurement is on. 

3

In-app event mapping

Review, and if necessary, make changes to your Facebook in-app event mappings. 

To view and set in-app event mappings:

  1. In AppsFlyer, go to Configuration > Integrated Partners.
  2. Select Facebook.
  3. Go to the Integration tab.
  4. In the In-app events postback section:
    1. [Mandatory] If not on, turn on In-app events postback.

      SKAdFacebookEventMap_us-en.jpg

    2. Verify that the in-app events, SDK event names you set in SKAdNetwork measurement are mapped to Partner event identifiers, meaning Facebook event names. You must map the currently selected SKAdNetwork measurement type. Notes: (1)The default measurement type is revenue. (2) If you don't map the events, Facebook can't optimize and will only count installs; in-app event postback must be on, in all circumstances. (3) [Udated May 24, 2021] For now the integration is limited to standard Facebook events and not custom events. In the second half of 2021, we expect to remove the limitation.
      Measurement type Mapping requirement
      Revenue

      af_skad_revenue is mapped to the Facebook revenue event, usually, fb_mobile_purchase.

      Note! It's OK to map more than one event to fb_mobile_purchase.

      Conversion Map 1–6 conversion events to the corresponding Facebook events.
      Engagement Map the engagement event you set to the corresponding partner event.
       In-app event mapping guide
  5. Click Save integration.
  6. Scroll down to the bottom of the page. 

    FacebookScrollDown.png 

  7. In the SKAdNetwork configuration section, click on the MMP connection URL to copy it. 
    The URL is copied. In the next section, we'll tell you where to paste the URL in Facebook.

4

Connect AppsFlyer to Facebook
  1. In Facebook, open the events manager.

    FacebookSkadNetworkSetup.jpg

  2. Go to the Settings tab.

    mceclip0.png

  3. In the Configure App Events for SKAdNetwork section, click Set Up Events. 

    mceclip1.png

  4. Select Import from partner app
    This updates Facebook with the conversion value schema and instructs the Facebook SDK in your app to stop setting the conversion value. If import from partner app is disabled—Troubleshoot.
  5. Follow the instructions in the Facebook user interface. One of the following occurs:
    1. You successfully paste the MMP Connection URL into the Facebook user interface. Congratulations! You have completed the integration. Read the notes that follow. 
    2. Pasting the MMP connection URL fails, and an error message displays in the Facebook user interface. If so:
      - Wait 24 hours, then repeat this procedure.
      - If the error persists (more than 24 hours), contact AppsFlyer support. 

Notes

  • You need to perform this procedure once. Meaning, there's no need to copy and paste the connection URL after changing the measurement settings in AppsFlyer. For example, if you switch from revenue measurement to conversion measurement, Facebook uses the existing URL to get the current schema. 
  • Completing the procedure enables Facebook to get the conversion value schema from AppsFlyer using a proprietary randomized structure. There is no way for you to configure this. 
  • It takes up to 24 hours for updated measurement settings to take effect in Facebook.

5

iOS 14 campaign setting

In Facebook, verify that the iOS 14 campaign setting is on. 

This setting is found in the New App installs Campaign settings page. 

FBiOS14.png

Allow Facebook to share SKAdNetwork data with AppsFlyer

Allow Facebook to share SKAdNetwork data with AppsFlyer. If you don't do so, you won't see SKAdNetwork installs attributed to Facebook in the AppsFlyer SKAdNetwork dashboard. 

This procedure needs to be performed once per app. 

To grant Facebook permission to share SKAdNetwork data with AppsFlyer:

  1. In AppsFlyer, go to Configuration > Integrated partners.
  2. Select Facebook.

    FacebookEnable.png

  3. Go to the SKAdNetwork tab.
  4. Click Facebook login. You must log in to Facebook using an Admin or Advertiser account having ads_read permission.
  5. Follow the instructions in the user interface.
    After you complete the process in Facebook, you will be returned to AppsFlyer. 
  6. Verify that the account status waiting for synch displays.
    This message persists until we get data from Facebook.
  7. Wait until after 02:00 UTC of the next day, then verify that the status changes to success.
    Data in the SKAdNetwork dashboard updates daily by 08:00 UTC.
  8. Read the section about measurement differences

Additional information

Measurement and timing differences between AppsFlyer and Facebook

Measurement considerations
Item Details 
In-app event names 

At present, Facebook sends event names to AppsFlyer using the Facebook mapped event name and not your event name.

So, if your event name is af_purchase, Facebook reports the event using fb_mobile_purchase.

The names used are according to the in-app event names mapped in the integration.

Revenue mode converted users metrics

In revenue mode, the converted users (paying users) metric doesn't consider the number of users reporting revenue via Facebook campaigns dues to the revenue naming convention. mentioned in the previous section (in-app event names)

SKAdPayingUsers.png

Earliest data availability

Data is available starting on the date that you enable the integration according to UTC time. 

Install date 

AppsFlyer and Facebook differ in the way they determine the install date. Consider:

  • iOS SKAdNetwork postbacks don't contain an actual install timestamp. 
  • Facebook regards the postback arrival time as the install time and considers the app timezone in Facebook in setting the date.
  • AppsFlyer derives the install time as follows: Postback arrival time-48 hours=install time. Neither the app time zone nor the Facebook Ad Account time zone are considered in the calculation. 
Data freshness
  • We collect SKAdNetwork data from Facebook at 01:00 UTC
  • Dashboards and aggregate data update 7 hours later.
Reports available

Facebook data is available in:

Converted users metric in SKAdNetwork dashboard

[Updated May 26, 2021] Currently the converted users metric in the SKAdNetwork dashboard doesn't consider events reported by Facebook. 

 

Troubleshooting, discrepancies, and FAQ

Troubleshoot integration
Action Details 

Facebook can't connect

Symptom

In Facebook, if you get the message, we can't connect. Check that you're using the correct URL. If the problem continues, contact your partner app for help

Corrective action

In AppsFlyer, verify that you have turned in-app event mapping and mapped your AppsFlyer events to your Facebook events. (Described in the in-app event mapping described in the preceding section) 

[Guidance updated April 20, 2021]

Event priority

Q: How do I set the event priority in Facebook.

A: There is no need to set priority in Facebook. This priority feature relates to apps that use the Facebook SDK to set the conversion value. In your case, the AppsFlyer SDK is setting the conversion value. Disregard the priority option in Facebook. AppsFlyer measures 6 events in conversion without priority. 

[Guidance updated April 20, 2021]

Import from partner app is disabled

ImportFromPartnerApp.png

Symptom

In Facebook, if import from partner app is disabled, it means the app has never sent an event to Facebook using an MMP SDK.

Corrective action

Do one of the following:

  • Start passing events to Facebook using the MMP SDK as soon as possible.
  • Start passing events to Facebook using the Facebook SDK or App Events API and use one of the other flows to set up the conversion schema.

Having done so, after the first events are recorded in Facebook, configure the integration with AppsFlyer. 

[Guidance updated April 25, 2021]

Ranges can't overlap and must be in consecutive order 

Symptom

You use AppsFlyer SKAdNetwor custom measurement mode. When importing the measurement schema to Facebook the following message display: Ranges can't overlap and must be in consecutive order.

Corrective action

Revenue values in the custom conversion schema must be in consecutive ascending order. 

[Guidance updated April 26, 2021]

Sending events to Facebook

Q: Does it make sense to send additional event postbacks for events that are not selected in the conversion value measurement option to Facebook?

A: For consenting users send the full range of events to maximize Facebook's ability to optimize.

Map multiple events to the same Facebook event

Q: Can I map multiple in-app events to one Facebook event?

A: If multiple events are mapped to one Facebook standard event, Facebook will not be able to differentiate between the events. So, Facebook will optimize toward the one event they recognize.

Facebook data is not in the dashboard

Symptom

In the SKAdNewtork integration tab, the message failed to pull data displays.

FacebookSKAdIntegration.png

Corrective action

Verify that the connected account is either a Facebook admin or Facebook Advertiser account having ads_read permission. 

Raw data

Q: Does Facebook postback data appear in raw data or aggregated postback reports?

A: No. Facebook data is available in the dashboard and via the aggregated reporting API. SKAdNetwork performance reporting API

There is an error in Facebook when you try to run iOS 14 campaigns

Symptom

All of the following are true:

  • You get an error message in Facebook when you try to run an iOS 14 campaign
  • You recently added a new App or a kids app to the App Store.

This occurs because Facebook isn't aware that you are using an SDK that includes SKAdNetwork support. Meaning, the AppsFlyer SDK. 

Corrective action

  1. In AppsFlyer, go to Configuration > Integrated Partners.
  2. Select Facebook
  3. Go to the Integration tab.
  4. Turn off Activate Partner.
  5. Click Save Integration.
  6. Wait 15 seconds.
  7. Turn on Activate Partner.
  8. Click Save Integration.
  9. Wait up to 24 hours for Facebook to get the signal. 

Null-conversion values in AEO/VO campaigns

[Updated June 27, 2021] Increases in null-conversions data passed back through SKAdNetwork for AEO/VO campaigns potentially impacting reporting.

The following is a copy of a notice recently sent by Facebook to advertisers.

In May 2021, we identified an issue impacting iOS 14 SKAdNetwork (SKAN) App Event Optimization (AEO)/Value Optimization (VO) campaigns that resulted in an increase in null conversions in the data passed back. Based on the investigation conducted by our product team, we have high confidence that this SEV was triggered as a result of a change in Apple's privacy threshold for SKAN campaigns, meaning campaigns will need to have a minimum number of campaign installs for data to be passed back without null information. While we are working to implement back-end mitigations by early July, we recommend advertisers to take the following alternative actions:

  • [1] Consolidate campaigns to meet the 128 installs per day threshold
  • [2] Increase budget to meet 128 installs per day
  • [3] After options 1 and 2, if you are still experiencing artificially high costs, switching optimization from AEO/VO to MAI may help to achieve the minimum install threshold

Our product teams are working to resolve this issue as quickly as possible. We appreciate your patience and will continue to provide updates as we know more.

Revenue reported by Facebook

[Updated July 12, 2021]

Facebook derives revenue from the conversion value using your SKAdNetwork settings. However, this is not a direct calculation and Facebook uses algorithms in determining the revenue. 

A symptom of this is revenue having unrounded values even if you measure revenue in complete dollars. 

 

Was this article helpful?