Facebook Ads FAQ

At a glance: Find answers to frequently asked questions about using Facebook Ads in AppsFlyer.

Facebook Ads FAQ

I don't see Facebook campaign clicks in AppsFlyer's dashboard

By default, Facebook sends only the conversion and engagement data. However, you can easily also start getting clicks, impressions, and cost data for your Facebook campaigns.

Can I stop cost data sync?

Can AppsFlyer show the campaign level and ad groups?

Yes. In fact, AppsFlyer shows you also the single ad level, so you have 3 levels of drill down with Facebook Ads, campaigns >> ad groups >> ads.

Is Facebook data shown in real-time?

Yes, all installs and subsequent in-app events are shown in real-time. However, the clicks, impressions, and cost data AppsFlyer gets in an aggregated form from Facebook arrives periodically every few hours.

When can I see a new campaign's data on AppsFlyer?

To see data from new ads, ad sets and campaigns on Facebook they must generate at least one install.

For example, a new ad has generated 100 clicks with no installs, and is not shown on the AppsFlyer dashboard and data. Another ad only has 1 click and 1 install, but is displayed on AppsFlyer.

How can I get more installs from Facebook?

If you have activated retargeting for Facebook you can get up to 100% more installs in your user acquisition campaigns, for free!
How? Read here.

Do you make Facebook raw data available to agencies?

No. We are not allowed to provide Facebook raw data to agencies, this is because agencies are regarded as third parties in terms of Facebook terms of services.

I don't see Facebook raw data in the installation and in-app events reports

By default, Facebook does not allow the distribution of user-level data. See Facebook Ads advanced attribution for more details.

Any specific columns for Facebook in AppsFlyer's performance reports?

Yes. The performance reports have static column structures in any combination of selected media sources, which present information down to the campaign level.
However, when you download performance reports ONLY for Facebook Ads, AppsFlyer adds 4 columns to them, which present information down to the single ad level! The added columns are Adset Name, Adset ID, Adgroup (i.e. single ad) Name and Adgroup ID.

Can I work with Facebook FMPs and measure performance with AppsFlyer?

Yes. AppsFlyer is integrated with dozens of Facebook Mobile Partners. These partners can be set up for attributing in the Integrated Partners page in the dashboard.

For details about setting up attribution with FMPs, click here.

What should I do when I receive the following warning?

  • Verify the App ID in Facebook and check if you have any geo or age restrictions on their Facebook App ID.
  • If attribution is already working, this indicates that app is already publicly available in the Facebook Developer Portal and you can you can safely ignore this error message.

What happens with different lookback windows than on Facebook?

7-day click and 1-day view are the maximum and default lookback windows for Facebook.
Configuring these windows to be shorter on AppsFlyer, decreases Facebook attribution on AppsFlyer. On the other hand, configuring them longer on AppsFlyer has no effect, as installs taking part after Facebook windows end, do not get attributed to Facebook.
Therefore, to minimize discrepancies, the recommendation is to configure the Facebook lookback windows in AppsFlyer to 7 day clicks and 1 day views.

What are the Facebook API parameters?

In some AppsFlyer APIs, Facebook parameters have different names than displayed on the dashboard, for backward compatibility reasons. Consult the table below:
Conversion data AppsFlyer raw data Facebook
campaign campaign campaign_group_name
campaign_id Campaign ID campaign_group_id
adgroup Ad adgroup_name
adgroup_id Ad ID adgroup_id
adset Adset campaign_name
adset_id Adset ID campaign_id
ad_id AD ID ad_id
agency Partner N/A
is_fb Media Source is_fb
af_channel Channel publisher_platform

How long do you keep Facebook’s user-level data?

Facebook requires attribution providers to delete its user-level data 6 months after the install. This means that the events performed by these users 6 months after they install the app are counted as organic.
Past aggregate data remains the same.
This is relevant for all Facebook channels (Facebook app, Instagram, Messenger, and AudienceNetwork).

Can I use OneLink with the Facebook mobile app install objective?

Facebook has various advertising objectives to choose from when you run ads for an app: App installs, traffic, and conversions. 

For most objectives, like traffic or conversions, OneLink links or other third-party links are accepted. However, for the app install objective, Facebook only accepts Facebook App Links for deep linking. 

Can OneLink links be used for app opening and deep linking in Facebook dynamic product ads?

Yes. OneLink links with App Links, Universal Links, or URI schemes configured are supported in dynamic product ads. You can use OneLink links in your data feed for catalogs used in dynamic ads under the applink.ios_url and applink.android_url fields.

Facebook Ads cost FAQ

Getting Facebook cost data in the AppsFlyer dashboard

AppsFlyer gets spend data (including clicks and impressions) from Facebook campaigns if one or more installs occurred during the previous 7 days.

If a Facebook campaign engages with multiple platforms (Android, iOS, desktop, etc.) the cost in the Dashboard is platform-specific and is calculated by Facebook. 

Getting Facebook cost including clicks and impressions.

Facebook cost example

An advertiser runs campaigns using Facebook Ads. In AppsFlyer the advertiser sees the following:


The cost information is provided by Facebook to AppsFlyer. The number of installs is calculated by AppsFlyer using AppsFlyer attribution rules. As a result, the eCPI calculated by Facebook and AppsFlyer usually differs. 

I can't see old Facebook cost data in the AppsFlyer dashboard

Upon performing the first Facebook admin login described above AppsFlyer receives Facebook cost data up to 7 days retroactively for existing campaigns. Cost data from beforehand isn't available.

In subsequent syncs, AppsFlyer also receives data from the last 7 days. This means that cost, clicks, and impressions data is collected for all campaigns, which have at least 1 conversion during the last 7 days.

Cost data was fine for a few months, but it stopped displaying

Facebook may reset this permission to get the cost data every few months. If you notice the cost data stopped appearing on the dashboard please repeat the Facebook admin login steps again.

If the Facebook admin user changes their Facebook password the login steps must be repeated as well.

I clicked on my Facebook ad 5 minutes ago. Why don't I see the click in AppsFlyer? 

AppsFlyer gets aggregated clicks, impressions, and cost data from Facebook periodically every few hours. Therefore, it may take a few hours before these actions are displayed on AppsFlyer's dashboard.

Can I get raw data on clicks and impressions from Facebook?

As AppsFlyer gets only aggregated click and impression data from Facebook, the entire set of raw clicks and impressions is not available. The only raw clicks and impressions available in raw reports are those that resulted in installs.

Are there limitations of Facebook cost data by geo?

If you filter by Geo on AppsFlyer's dashboard, you can see the summary and breakdown of the Facebook cost data.

This data is available only for "Mobile App Install Campaigns" on Facebook.

In addition, cost by Geo data is only available for single platform campaigns. This means campaigns that have an Android-targeted ad set, and an iOS-targeted ad set, can't have Geo-specific cost data. To get the full cost data, dedicate a campaign to each platform.

What are the limitations of Facebook cost data in Master API?

Facebook doesn’t support grouping of cost data by Geo and Channel simultaneously in Master API reports.

To create a report with complete cost data, group it by only one of these dimensions.

The total cost doesn't match

There are differences between Facebook and AppsFlyer attribution models. These differences may lead to discrepancies with Facebook cost data:

  • Facebook cross-device attribution: this might sometimes cause issues where a campaign for one platform (iOS/Android) shows an install with its cost for another platform.
  • Facebook non-mobile campaigns: in these campaigns, like Facebook's link click campaigns, desktop users may eventually install mobile apps. For these cross-device campaigns, AppsFlyer does not show cost. However, if the link click was performed by the same device that installed the app, cost data is received.
    For example, a Facebook user clicks on an ad leading to the advertiser's landing page on a desktop computer. A week later the same Facebook user installs the advertiser's iOS app on an iPhone device. While the install is attributed and displayed on AppsFlyer's dashboard, the cost of this cross-platform install is not.
  • Campaigns with 0 results in the last 7 days - AppsFlyer syncs the cost only for campaigns that had installs/conversions in the past 7 days. If Facebook cost was just set, campaigns which were inactive for more than 7 days beforehand will not show cost.

Why is the AppsFlyer calculation for eCPI different from the cost calculated by Facebook, while the total cost is identical? 

The Cost Per Install is calculated by dividing the total cost with the number of installs. Since AppsFlyer counts installs differently from Facebook the eCPI will usually differ between the two.

Why doesn't cost data include data from all campaigns? 

When a user performing the Facebook login (described above) doesn't have access in Facebook to some of the running campaigns, the result is campaigns that are displayed on AppsFlyer's dashboard but lack some of the cost, clicks, and impression data.

Note: Although several Facebook users may have permission to run campaigns in the Facebook Business Manager, only one is required to perform the Facebook login.

Is Facebook cost data displayed for retargeting campaigns?

Cost and ROI data for retargeting campaigns can be found in the unified view of Cohort reports.

Why does the Facebook cost configuration window close before login

If you're signed in to Facebook on the same browser that you are performing the configuration, the window automatically connects to Facebook using those credentials and if access has already been granted to AppsFlyer's app, then there is nothing to do and the window closes.

Why is there a discrepancy in cost data for apps in the Amazon app store?

Contrary to AppsFlyer's data, Facebook doesn't distinguish between cost data from Android apps as opposed to Amazon apps—which are Android-based. Therefore, the cost data of Amazon users may be attributed to campaigns targeting other Android users instead of the original Amazon campaigns.

How to connect cost data of a new Facebook ad account while my old account is linked?  

If you want to switch to a new Facebook ad account but your Facebook cost is already linked via AppsFlyer with your old ad account, you need to disconnect the ad account via Facebook and connect the new ad account in AppsFlyer.

  1. On Facebook, go to Settings > Business Integration.
  2. On the Active tab, remove the AppsFlyer integration.

  3. Go to AppsFlyer dashboard and connect the cost with the new ad account.

Facebook Ads SDK FAQ

Who needs Facebook's SDK?

Your app may already have the Facebook SDK integrated into it, before the AppsFlyer SDK. Even if not, you may wonder whether you really need Facebook SDK in addition to AppsFlyer SDK. And if you do, can the two co-exist without duplicate reporting?

Your app does not require the Facebook SDK for the following:

  • User acquisition: Generally, the AppsFlyer SDK takes care of all mobile user acquisition attribution purposes of your Facebook users, including engagements, installs, sessions, and post-install events.
  • Deep linking: To open the app when the link is clicked and deep link users to a specific page or activity in the app, you can use OneLink, without the Facebook SDK. However, you need a URI scheme configured to open the app (Universal Links and Android App Links do not work). Facebook scrapes the OneLink URL, and uses it to create a Facebook App Link that opens the app, and deep links the user. 

Your app requires the Facebook SDK in addition to the AppsFlyer SDK for the following:

  • Deferred deep linking:
    Currently, it's only possible to access Facebook DDL data via the Conversion data legacy method. For both iOS and Android apps, the Facebook SDK is required to make this data available in the Conversion data method. However, in Android and Google Play only, it's possible to perform deferred deep linking using the Google Install Referrer mechanism
  • Dynamic Product Ads campaigns data: You can only get data for Dynamic Product Ads from the Facebook SDK. 
  • Other Facebook features: You may need Facebook SDK for reasons unrelated to attribution such as authentication, ad monetization, social sharing, user invites, etc.


The above information and recommendations regarding deep linking and deferred deep linking are based on thorough testing we conducted using Facebook’s available demo/preview tools, which uses a different mechanism than live ads. 

Avoiding duplicates with Facebook SDK

If you have both SDKs in your app, install and in-app events are reported to Facebook SDK, and then via postbacks to Facebook servers through AppsFlyer. How can you avoid this duplicate reporting?

  1. Installs: Facebook de-duplicates app installs. If both Facebook SDK and AppsFlyer report on a new user installing a mobile app, Facebook knows to count this install only once. In cases when Facebook Ads SDK is initialized at the app launch, before the AppsFlyer SDK, the install is recorded only by Facebook Ads and not by AppsFlyer. Verify that the AppsFlyer SDK is initialized at app launch, before the Facebook Ads SDK.
  2. In-app events: Facebook does not de-duplicate in-app events, which are reported from both its SDK methods as well as from another source, i.e. AppsFlyer. This means that, unless taken care of, Facebook may report double revenue and other events, falsely.

Use either of these possible methods to avoid duplicate in-app event reporting in Facebook:

Facebook Ads attribution FAQ

Attributing agencies with Facebook

Agencies and FMPs can run and attribute Facebook campaigns on behalf of advertisers on AppsFlyer, or even alongside the advertisers' own Facebook campaigns. In order for the agency campaigns to be attributed to the agency, the campaign name MUST begin with the agency's name.

Note that for iOS 14 users, only one agency can run campaigns for a specific ad account. See more about Facebook Ads and AppsFlyer SKAdNetwork interoperability.

For more details about agencies and Facebook install attribution please go here.

In addition, agencies can't alter Facebook lookback windows and retargeting control. Rather, they need to ask the advertiser to perform these changes if they're needed.

Besides, agencies cannot modify any in-app event postbacks sent to Facebook. The reason for that is Facebook's requirement to receive information about all installs, including those that are not attributed to it (and therefore may not be brought by the agency).

The image below shows all settings that need to be configured by the advertiser for the agency to be able to manage its Facebook campaigns:

Attribution for Facebook for out-of-store Android apps

Facebook doesn't allow creating mobile apps install campaigns for Android apps that are in out-of-store markets, for example, Baidu.

However, you can advertise and record installs for out-of-store apps on Facebook following these instructions:

  1. The developer has to prepare a separate APK for each out-of-store market you use to advertise your app on. More details here.
  2. Create a Traffic or Conversions campaign on Facebook, with mobile attribution enabled, which sends leads to a landing page.
  3. The landing page should include a Download App button, which directly links to the out-of-store market where the APK exists.
  4. The lead clicks on the button and is redirected to the out-of-store market. After completing the installation AppsFlyer attributes the user to Facebook, via its MMP API.


The same solution applies to apps in Google Play and the App store, which require a landing page prior to the redirection to the market. 

For specific instructions on attribution for apps in Amazon on Facebook, click here.

What is Facebook Android and iOS cross-attribution?

Facebook identifies users based on their Facebook account. Some users have both iOS and Android devices associated with the same Facebook account.

If such a user clicks or views an ad for your app on their Android device, but install the app on their iOS device, Facebook considers themselves as having generated the install. As a result, an Android Campaign name appears on your iOS dashboard.


Andrew Josef is busy on his Android device. While using it, he clicks on an Android Facebook campaign ad for an app called Bubbles. He does not download the app.

One day later, Andrew Josef decides to download the Bubbles app organically on his iOS device and launches it.

In this situation, AppsFlyer attribution takes the Android Facebook campaign from Facebook and presents it in the iOS Dashboard where Andrew Josef downloaded and launched it from.

What are Facebook Ads channels?

With Facebook you can see data broken down not only by campaigns, ad sets and ads, but also by Facebook channels (called Placements on Facebook).

  • Facebook channel - users from the Facebook app
  • Instagram - users from the Instagram app
  • Messenger - users from the Facebook Messenger app
  • AudienceNetwork - users from other apps that belong to or are affiliated with Facebook

Use this data to compare the quality of users that you get from the different channels of Facebook.