SKAdNetwork (SKAN) interoperation with Meta ads

At a glance: Interoperability enables Meta ads to share decoded SKAN data with AppsFlyer and enables AppsFlyer to share your CV measurement bits (mapping) with Meta ads.

SKAN interoperability: AppsFlyer <-> Meta ads

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

Scope of SKAN interoperability with Meta ads

The interoperation with Meta ads allows the following:

  • AppsFlyer and Meta ads share the SKAN conversion value (CV) schema, enabling both to provide you with performance metrics.
  • AppsFlyer supports all Meta ads campaign objectives which enable campaign optimization:
    • Mobile app install (MAI)
    • Mobile app engagement (MAE)
    • Value optimization (VO)
  • After enabling SKAN integration the following occurs: 
    • Facebook SDK stops updating SKAN CV (kill switch).
    • AppsFlyer SDK updates the CV.
    • Meta ads shares SKAN postback data for inclusion in the SKAN dashboard and aggregated reports.

Other considerations: 

  • If you don't enable SKAN partner integration, in the SKAN dashboard, installs brought by Meta ads are counted as organic installs. 
  • In the context of AppsFlyer attribution (Overview dashboard):
    • Consenting user installs brought by Meta ads are attributed correctly.
    • Non-consenting users are attributed to organic. 
  • iOS 14.5 implications on SRN reporting
  • Our MMP integration with Meta ads always implements the Advertiser Tracking Enabled flag. (This information is provided according to the Meta ads app guidance iOS 14 checklist from February 2021).


  • Once interoperability is enabled each time you change measurement settings, 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. 
  • In AppsFlyer, if you turn SKAN measurement off, Meta ads can no longer get CV mapping. 
  • AppsFlyer SDK vs. Facebook SDK: The Facebook SDK is suited if you run campaigns only with Meta ads. If you run campaigns with multiple partners, by using the AppsFlyer SDK you can view data of all partners.
  • Review the discrepancies section in this article. 

Meta ads app install ads guidance

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

  • A maximum of 9 campaigns per app, each having 5 ad sets is allowed. Advertisers can run these 9 app campaigns across 9 ad accounts per app ID.
  • You don't need a separate account for iOS 14 campaigns. You can run iOS 14 campaigns from existing accounts.
  • There is a relationship between the Meta ads optimization method and the measurement type you select in AppsFlyer as follows:
    • Revenue measurement: VO and AEO 
    • Conversion measurement: AEO— Includes Meta ads standard events and purchase event. You must map the app event in AppsFlyer to the relevant Meta ads event. 

Interoperation procedures

Complete the procedures that follow to enable interoperation. 

For app install attribution:

Allow Meta ads to share SKAN data with AppsFlyer

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

This procedure needs to be performed once per app. 

To grant Meta ads permission to share SKAN data with AppsFlyer:

  1. In AppsFlyer, go to Collaborate > Active Integrations.
  2. Search for and select Meta ads.
  3. Go to the SKAN tab.


  4. Click f login. The account you use must be an Admin or Advertiser account with the following permissions:
  5. Follow the instructions in the user interface.
    Meta generates an access token that permits data sharing with AppsFlyer. After you complete the process, you are returned to AppsFlyer. 
  6. If this is your first time setting up this integration, verify that the account status Waiting for sync displays.
    This message persists until we get data from Meta ads.
  7. Wait until after 02:00 UTC of the next day, then verify that the status changes to Data was pulled successfully.
    Data in the SKAN dashboard updates daily by 08:00 UTC.
  8. Read the section about measurement differences

For in-app events attribution:

Share CV schema with Meta ads


Enabling AppsFlyer SKAN interoperation with Meta ads

Step Action Details 


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


SKAN settings review 

Verify that AppsFlyer SKAN Solution is set up and is on. Doing so allows the AppsFlyer SDK to call SKAN APIs and set the CV.

To view SKAN settings:

  1. In AppsFlyer, go to Settings > SKAN Conversion Studio.
  2. Click the options icon, and verify that SKAN measurement is on.
  3. Select your preferred measurement mode.
    Learn more about SKAN Conversion Studio.
  4. Make a note of the exact event names set. You need them in the next step. Note: Names are case-sensitive.


In-app event mapping

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

To view and set in-app event mappings:

  1. In AppsFlyer, go to Collaborate > Active Integrations.
  2. Select Meta ads.
  3. [Mandatory] From the Integration tab, turn on In-app event postbacks.
    • You must map the currently selected SKAN measurement type. The default measurement type is revenue.
    • Verify that the in-app events you set in SKAN measurement (AppsFlyer event) are mapped to Meta ads event identifiers (mapped to partner event). If you don't map the events, Meta ads can't optimize and will only count installs.


      When adding, changing, or removing a conversion value (CV) in the SKAN Conversion Studio, make sure that the event is mapped in the In-app event postbacks. Otherwise, the CV won't be updated on Meta ads.

      In-app event mapping guide

      Measurement type Mapping requirement

      Map the in-app events you set in Custom to the corresponding Meta ads events.

      To report revenue by postback you must set Send revenue to Values & revenue


      af_skad_revenue is used for overall revenue and mapped to the Meta ads revenue event, usually fb_mobile_purchase.

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


      If you report revenue by postback to ad networks, verify that your in-app event postback mappings include the in-app revenue events set by you.

      af_skad_revenue is used for overall revenue and mapped to the Meta ads 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 Meta ads events.
  4. Click Save integration.
  5. Scroll down to SKAN configuration, and click on the MMP connection URL to copy it. In the next section, we'll tell you where in Meta to paste the URL.



Connect AppsFlyer to Meta ads
  1. On Meta ads, open the events manager.


  2. Go to the Settings tab.


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


  4. Select Import from partner app.
    A field to paste the MMP Connection URL is displayed. 
    This updates Meta with the CV mapping and instructs the Facebook SDK in your app to stop setting the CV. If import from partner app is disabled—Troubleshoot.
  5. Follow the instructions in the Meta ads user interface. One of the following occurs:
    1. You successfully paste the MMP Connection URL into the Meta ads 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 Meta ads user interface. If so:
      - Wait 24 hours, then repeat this procedure.
      - If the error persists (more than 24 hours), contact AppsFlyer support. 


  • 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, Meta ads uses the existing URL to get the current schema. 
  • Completing the procedure enables Meta ads to get the CV 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 Meta ads. 


iOS 14 campaign setting

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

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


Additional information

Turning off the SKAN integration

When turning off your Meta ads integration, it's not enough to turn off the Activate partner toggle, you must separately remove the SKAN connections to stop SKAN data recording.

To turn off the SKAN integration:

  1. In AppsFlyer, go to Collaborate > Active Integrations.
  2. Search for and select Meta ads.
  3. Go to the SKAN tab.
  4. Click the delete icon for the account you want to remove.

Measurement and timing differences between AppsFlyer and Meta ads

Item Details 
In-app event names 

Until August 15, 2021, event names in the dashboard used the Meta ads event names. Going forward, this is no longer true. 

Revenue mode converted users metrics

[Deprecated August 16, 2021]

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

Earliest data availability

In the first data sync after integration, as well as subsequent syncs, AppsFlyer receives Meta ads data for up to the last 7 days retroactively.

Install date 

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

  • iOS SKAN postbacks don't contain an actual install timestamp. 
  • Meta ads regards the postback arrival time as the install time and considers the app timezone in Meta ads in setting the date.
  • AppsFlyer derives the install time according to the activity window settings. Neither the app time zone nor the Meta ads Ad Account time zone are considered in the calculation. 
Data freshness
  • We collect SKAN data from Meta ads at 01:00 UTC
  • Dashboards and aggregate data update 7 hours later.

Verifying the ads_read permission

ads_read permission provides Meta ads customers API access to ad performance data for use in custom dashboards and data analytics.

To verify your Meta ads account has ads_read permission:

  1. Go to your Meta ads developer account.
  2. Select a Facebook App ID.
  3. Navigate to App Review > Permissions and Features.


  4. Verify that ads_read has the ready for use status. If this is the case, no further action is required. 
  5. If you don't have ads_read then you must request it as follows:
    1. Go to App Review > Requests.
    2. Request ads_admin permission.
    3. Repeat the steps in this procedure to verify that you have been given the necessary permission.

Troubleshooting, discrepancies, and FAQ

Action Details 

Meta ads can't connect


In Meta ads, 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 Meta ads 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 Meta ads?

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

[Guidance updated April 20, 2021]

Event occurrences

Q: Why do I have more event occurrences displaying in AppsFlyer than in Meta ads?

A: Meta ads only counts 0-1 event occurrences. Therefore, even if you define more occurrences as part of a range, the additional occurrences are only counted by AppsFlyer.

Import from partner app is disabled



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

Corrective action

Do one of the following:

  • Start passing events to Meta ads using the MMP SDK as soon as possible.
  • Start passing events to Meta ads 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 Meta ads, configure the integration with AppsFlyer. 

[Guidance updated April 25, 2021]

Ranges can't overlap and must be in consecutive order 


You use AppsFlyer SKAN custom measurement mode. When importing the measurement schema to Meta ads 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 Meta ads

Q: Does it make sense to send additional event postbacks for events not selected in the CV measurement option to Meta ads?

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

Map multiple events to the same Meta ads event

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

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

No data to pull

Q: Why does the connection status display "No data to pull: Check your Meta data-sharing permissions"?

A: Either there is no SKAN data yet or you need to log into Meta Ads using an Administrator user role on the account.

Q: I got a "No data to pull: Check your Meta data-sharing permissions". Even though I see Meta Ads details, is everything ok?

A: Yes. Although this error message may display, everything is fine and your data will get pulled.

Meta ads data is not in the dashboard


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


Corrective action

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

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


All of the following are true:

  • You get an error message on Meta ads when you try to run an iOS 14 campaign
  • You recently added a new App or a child-directed app to the App Store.

This occurs because Meta ads isn't aware that you are using an SDK that includes SKAN support. Meaning the AppsFlyer SDK. 

Corrective action

  1. In AppsFlyer, go to Collaborate > Active integrations.
  2. Search for and select Meta ads
  3. From the Integration tab, turn off Activate partner.
  4. Click Save Integration.
  5. Wait 15 seconds.
  6. Turn on Activate partner.
  7. Click Save Integration.
  8. Wait up to 24 hours for Meta ads to get the signal. 

Revenue reported by Meta ads

[Updated July 12, 2021]

Meta ads derives revenue from the CV using your SKAN settings. However, this is not a direct calculation, and Meta ads uses algorithms in determining the revenue. 

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

Retroactive data backfill

[Updated December 23, 2021]

Sometimes we aren't able to connect to Meta ads to get the data, for example, due to login failures. No need to worry. We'll fill in reporting gaps of the previous 7 days the next time we are able to log in. 

AppsFlyer is showing significantly more installs/events/revenue than Meta ads

In many cases, this discrepancy occurs because Meta ads dashboard displays only click-through installs or events by default, while AppsFlyer dashboard display both click and view-through installs and events.  

Agency integration

If the agency has an Administrator user role in the advertiser's Meta ads account, then they can perform the procedure in this article to enable SKAN interoperation on the behalf of the advertiser. Advertisers don't need to log in to their Meta ads account as well. The agency login will be indicated in the advertiser's account.

An updated CV doesn't appear on Meta ads

When adding, changing, or removing a conversion value (CV) in the SKAN Conversion Studio, make sure that the event is mapped in the In-app event postbacks. Otherwise, the CV won't be updated on Meta ads.

Modeled data differences in AppsFlyer and Meta ads Manager

AppsFlyer models aggregate data that basic SKAN reporting is unable to provide. Learn more

When AppsFlyer models data, data that is modeled by Meta ads isn’t taken into consideration, as AppsFlyer relies solely on confirmed, impartial data. Therefore, there may be data and granularity discrepancies between Meta ads Manager reports and AppsFlyer reports.