At a glance: Learn about integrating Facebook Ads with AppsFlyer.
Facebook Ads setup guide
How long does it take to start attributing your Facebook mobile app ads with AppsFlyer?
If you already have AppsFlyer's SDK integrated in your app, and already have defined your app on Facebook, the answer is less than a minute!
You don't need to implement Facebook Login or integrate your app with Facebook's SDK for mobile attribution. Just follow the step-by-step setup instructions below.
Facebook App ID
To create the Facebook App ID:
- In Facebook, go to your App Dashboard.
- Under Apps, click Create New App.
- Complete the name for your app, and enter a unique namespace.
To retrieve the Facebook App ID:
- In Facebook, open the Monetization Manager dashboard.
- Click the Property you want data from.
- Go to Placements > Manage Placement.
The Facebook App ID is the first part of the Placement ID.
The same Facebook App ID can be used for both your Android and iOS apps.
Basic Facebook attribution setup
To start attributing Facebook campaigns with AppsFlyer, follow these steps:
- To activate the integration with Facebook Ads:
- Go to your apps in Facebook for developers.
- Select the app.
- To copy your app ID, click on it at the top of the screen.
- In AppsFlyer, go to Configuration > Integrated Partners.
- Select Facebook Ads from the partners list.
- In the Integration tab, turn on Activate partner.
Learn more about partner activation.
- Paste your app ID in the Facebook App ID field.
- Click Save Integration.
- [optional] To configure recommended settings:
- To match Facebook Ads' click-through lookback window, set it to 7 days.
- To match Facebook Ads' view-through lookback window, set it to one day.
- To attribute users who reinstall the app during the re-attribution window, turn on Reinstall attribution.
You don't need to enable view-through attribution or configure lookback windows for reinstall attribution, as it takes its configuration from the install attribution settings.
- To save the configuration, click Save Integration.
Still not seeing Facebook results on AppsFlyer? Refer to Facebook Ads integration troubleshooting.
Advanced Facebook attribution setup
With basic attribution already set up for Facebook, it's time for some quick advanced attribution setup.
By default Facebook does not release raw user-level data.
To get user-level data from Facebook Ads:
- Go to Facebook Ads partner page > Integration tab click to accept Facebook's Terms of Service.
- Log in to your Facebook Ads account.
- Select the relevant app.
- Click Accept.
This allows AppsFlyer to collect and enable you access to your Facebook users' raw data.
Effective April 22, 2020, Facebook introduced enhanced data privacy measures to protect people using their services. As such, Facebook no longer provide advertisers with view-through attribution data at the device level. Starting from the effective date, view-through conversions and the associated in-app events display under the restricted media source. The associated attribution fields in user-level sources such as raw data reports, Push API messages, Pull API reports, are not populated.
Cost, clicks and impressions data
Enabling the Facebook Cost feature gets you the cost data for your Facebook campaigns, adsets, ads and channel levels. It also gets you the aggregated clicks and impressions data for them.
- Make sure you are logged into the Facebook user account, which is enabled to handle the account's campaigns on Facebook. The user signing-in must have permissions to run all the campaigns in Facebook Business Manager.
- Go to the Cost tab.
- Turn on Get Cost, Clicks and Impressions Data.
- Click the Facebook Login button.
- When prompted, allow AppsFlyer to access your Facebook campaign data.
Note: In the first data sync after integration, AppsFlyer receives Facebook's cost data up to 30 days retroactively. In subsequent syncs, AppsFlyer receives data from the last 7 days.
Read more about how Facebook defines clicks and views.
To delete a connected Facebook account: In the actions column, hover over an account and click Delete connection.
- If you are already logged into Facebook, when you click the Facebook Login button, the Facebook window immediately opens and closes. This is the regular behavior.
- If you have several users with permissions to Facebook, the best practice is to perform the Facebook login for all of them, to avoid getting partial data.
Cost data sync status
The cost tab shows the status of your cost integration and the last time AppsFlyer managed to pull matching cost data.
Facebook allows you to sync several accounts for pulling cost data. For each synced account, AppsFlyer shows the status of cost integration and the last time AppsFlyer managed to pull matching cost data.
The table below lists that status messages, and what to do if you see them in the Cost tab.
|Status Message||Description||What to Do|
|Partner API is responding and returning data.||
With sync message:
Cost Data was never successfully pulled
One of the following is possible:
No Matching Data
AppsFlyer queries this app's active campaigns with the Partner API, but the partner API isn't returning any data for these campaigns.
This might happen if you change the campaign ID while it is still running.
If you rely on cost data, do not change the IDs of campaigns while they are still active and running.
Also, make sure you login with Facebook credentials for the correct app.
Partner API is not responding
|AppsFlyer is unable to pull cost data as the connection is no longer valid. This can happen if your Facebook password changes or if the AppsFlyer permission is revoked.||
Re-login to Facebook in the Cost tab.
Last successful data pull
The cost tab shows the last time cost data has been pulled yet. If cost data has never been pulled, the sync message shows Cost Data was never successfully pulled.
Scenario 1: Stopped campaigns
AppsFlyer pulls cost for several campaigns that you run with ad network A. You look in the cost tab and you see the message Last successful sync 2 hours ago. The same day you stop running campaigns with ad network A. Two weeks later, you look in the cost tab of ad network A. You then see the message Last successful sync 14 days ago.
Scenario 2: Ad network API issues
AppsFlyer pulls cost for several campaigns that you run with ad network B. You look in the cost tab and you see the message Last successful sync 2 hours ago. Ad network B then experiences issues with their API. It takes them a few hours to fix it. When you look in the cost tab you see the message Last successful sync 8 hours ago.
Learn more about enriching your Facebook information with cost, clicks and impressions data.
In-app events mapping
To map in-app events:
- Turn on In-App Event Postbacks.
When enabling the Facebook in-app events mapping for an app for the first time, all the af_XXX events from the SDK are automatically mapped to Facebook's predefined event list. This automatic mapping saves you time and decreases mapping mistakes significantly.
- Fill in the following parameters:
Parameter Name Description SDK Event Name The name of the event, as received by AppsFlyer either from the SDK integrated in your app, or from server to server events.
Tip - don't see the event you want in the list? Make sure to activate the event on a device with a non-organic installation and recheck.
Partner Event Identifier Select the most suitable predefined Facebook event tag for your event. You can also send Facebook CUSTOM events. Send Revenue When unchecked - AppsFlyer sends all the parameters of the rich in-app event to the partner, except for the revenue parameter, which is contained in the af_revenue parameter.
When checked - AppsFlyer sends all the parameters including the revenue value (if exists in the event).
- To add an SDK event to the list, click Add Event.
Note that the Sending Option for all SDK defined events is All media sources, including organic, which means that your entire user base is available to be reported to Facebook.
Limitations regarding event names:
- Length limitation of event names: 2-40 characters
- The following characters are not allowed:
- Colon (:)
- Period (.)
- Non-Latin (English) character sets: As of January 12, 2020, Facebook rejects Chinese characters. AppsFlyer has not tested other character sets and you should use these only after verifying with Facebook if they support these character sets in postbacks.
- Event names are case-sensitive. To avoid discrepancies, make sure you use the correct case in the event names for all media sources and app versions.
Learn more about Facebook Ads in-app event mapping.
AppsFlyer retargeting attribution for Facebook lets advertisers attribute an existing user's engagement with a Facebook ad, and measure the quality of the user, post engagement, using the AppsFlyer reports.
It should be used only if you are actively running campaigns targeted at your own users in Facebook.
- Enable re-targeting in app settings page.
- In Facebook Ads partner page, turn on Re-engagement attribution.
- Set the Re-engagement click-through lookback window.
The re-engagement lookback window is the period of time, starting from ad click, during which the app must be launched for the click to be recorded as a re-engagement.
Select a lookback window in hours or days and set the slider to the desired value.
- Set the Re-engagement window.
This is the period when the user's in-app events are attributed to the retargeting media source, as primary source.
You can set the value in days (1-90), hours (up to 23), or even lifetime. The default is 30 days.
Learn more about AppsFlyer retargeting attribution.
Learn more about deep linking users from SRNs such as Facebook.
Comply with California consumer privacy act (CCPA)
Complying with CCPA privacy regulations limits the data coming from Facebook users based in California, USA.
To enable compliance with CCPA: Turn on Limit Facebook use of users' parsonal information (CCPA) in the Integration tab.
Learn more about CCPA compliance.
Ad revenue recording
If your app uses Facebook Audience Network Ad Revenue for ad monetization, you can record your revenues from Facebook on AppsFlyer. This, with or without in-app purchase revenue data, gives you a complete picture of your user revenues.
To start recording Facebook Audience Network Ad Revenue:
- On the Ad Revenue tab set Get Ad Revenue Data to ON
- Set the Event Source, which is the event representing your ad revenue model in the best possible way. For example, if your revenue is based on impressions, it is recommended to send AppsFlyer an ad viewed event. The best event can be configured for each monetization platform separately. However, it is also possible to use the
af_app_openedevent. In this case, ad revenue is attributed for every app open performed by the user.
- The Ad Revenue Event is displayed. It is a read-only field presenting the new ad revenue event called [source event]_monetized (e.g. Ad_Watched_Monetized as displayed above). The ad revenue event is presented in the dashboard as an additional event.
- Click Facebook Ad Revenue to enable collection of Facebook Audience Network Ad Revenue on Facebook. Login with your Facebook credentials to authorize Facebook Audience Network Ad Revenue.
- Enter the Audience Network App ID (Facebook App ID). Get this from Facebook Audience Network (FAN).
- Get the Facebook App ID.
- Copy the ID to the Audience Network App ID field in AppsFlyer
- Click Save ad revenue.
Enable Facebook Ads to perform various actions and to access your data according to the available permissions.
Learn more about granting permissions to integrated partners.
Facebook in-app events mapping
This enables advertisers to utilize Facebook’s advanced optimization capabilities, as well as build Custom and Lookalike Audience segments.
Predefined events mapping
Facebook offers a wide range of events that are already predefined and can be mapped to.
Find here the list of rich in-app events, that can be sent to Facebook with additional parameters providing extra information about the quality of events.
Below is the list of other predefined Facebook events that don't have additional parameters:
|Facebook event identifier||
Recommended AppsFlyer SDK name
The donation of funds to your organization or cause.
The booking of an appointment to visit one of your locations.
The submission of an application for a product, service or program you offer, such as a credit card, educational program or job.
When a person finds one of your locations via web or app, with an intention to visit. For example, searching for a product and finding it at one of your local stores.
A telephone or SMS, email, chat or other type of contact between a customer and your business.
The customization of products through a configuration tool or other application your business owns.
Custom in-app events mapping
AppsFlyer allows you to map any custom in-app event to send to Facebook, by using the CUSTOM Facebook Event Identifier option.
The event name and the event value (including the event parameters) configured in the SDK are forwarded to Facebook, as is.
You can see the full custom events names on Facebook Analytics. On Facebook Ads Manager they are aggregated and displayed as "Custom events".
Events mapped to “CUSTOM” can't be used for the following functions in Facebook:
- App event optimization
- Value-based optimization
- Dynamic Product Ads
To enable using these functions in Facebook, based on your events data, we recommend mapping to Facebook's predefined events.
Automatic parameter mapping with the custom event
Through AppsFlyer's deep integration with Facebook, many of AppsFlyer’s standard SDK event parameters are automatically mapped to Facebook's predefined parameters. For example, the af_revenue parameter is converted to the _valueToSum parameter in Facebook, which allows you to send a revenue per event that can be measured and optimized towards on Facebook.
Automatic parameter mapping can differ between CUSTOM and predefined events.
For predefined events, af_price is mapped to _valueToSum in some cases (for example,
fb_mobile_add_to_cart). In other cases, af_revenue is mapped to _valueToSum (for example, in
For events mapped to CUSTOM, af_price is always mapped to fb_price, and af_revenue to _valueToSum.
The following table details all the AppsFlyer event parameters, which when mapped through the CUSTOM event to Facebook, are automatically mapped to Facebook's parameters.
|AppsFlyer Parameter||Facebook Parameter|
Event and parameter limitations
There are several limitations Facebook imposes on the sent events data:
- An event can have up to 25 parameters.
- Event names and parameter names must be between 2 and 40 characters and must consist of only alphanumeric characters, underscores, hyphens or spaces.
- Non-Latin (English) characters should not be used. Using non-Latin letters results in inconsistent results.
- The length of each parameter value can be no more than 100 characters.
- Event names on AppsFlyer can be named the same as Facebook event names (i.e. fb_price), however, these should not be sent as CUSTOM events to Facebook. To keep on the safe side refrain from naming events the same as Facebook event names.
- To perform in-app events postback mapping with Facebook, it requires getting events data from ALL sources, including organic.
With the exception of the above parameters, AppsFlyer sends the CUSTOM events data as is to Facebook. It is the responsibility of the app owner to verify the events data is on par with Facebook's requirements.
If the event value contains parameters that are not mapped to valid Facebook parameters (see the table above), these parameters are not sent to Facebook.
AppsFlyer SDK vs. Facebook SDK
Your app may already have the Facebook SDK integrated in 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?
Who needs Facebook's SDK?
To open the app when the link is clicked, you just need to set up App Links/Universal Links/URI scheme. For user acquisition purposes, generally, if you have the AppsFlyer SDK in your app, you don't need the Facebook SDK in it too. The AppsFlyer SDK takes care of all mobile user acquisition attribution purposes of your Facebook users, including engagements, installs, sessions, and post-install events.
However, if your app uses any of the following, it requires the Facebook SDK in addition to AppsFlyer:
- Deep linking data
If you need deep linking data from Facebook, you can only get it with the Facebook SDK. Using the AppsFlyer SDK, deep-link data, and passing your routing parameter, is limited to using the data we receive from Facebook (campaign, ad set, ad, channel).
- Collecting Deferred deep linking and Dynamic Product Ads campaigns data
If you need data from Facebook for deferred deep linking or Dynamic Product Ads, you can only get it from the Facebook SDK. Follow the steps below to automatically transfer the deferred deep linking data from Facebook SDK to AppsFlyer SDK.
Alternately, on the first app launch you can use the campaign or ad names from the conversion data, without having the Facebook SDK integrated into your app. With this limited method, the deep linking data needs to be inferred from the campaign or ad names.
- Other Facebook features
You may need Facebook SDK for reasons unrelated to attribution such as authentication, ad monetization, social sharing, user invites, etc.
Using Facebook Ads & AppsFlyer SDKs for deferred deep linking
To support deferred deep linking from Facebook Ads:
* Minimum AppsFlyer SDK versions:
- Android AppsFlyer SDK 4.10.3
- iOS AppsFlyer SDK 4.10.4
* Complete Facebook integration set up.
* Have Facebook SDK integrated into the app (On Android, if developers integrate specific components of Facebook SDK, make sure AppLinks module is added).
- To collect Facebook deferred deep linking data automatically from Facebook SDK to AppsFlyer SDK use:
[[AppsFlyerTracker sharedTracker] enableFacebookDeferredApplinksWithClass:FBSDKAppLinkUtility.class];
- Get af_dp in onConversionDataSuccess callback.
- Redirect user programmatically using the af_dp value.
Avoiding duplicates with Facebook SDK
Facebook requires AppsFlyer to report about installs and in-app events from ALL users, including organic users. 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?
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-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:
- Don't configure events in the Facebook SDK
- Disable the Facebook in-app events mapping from AppsFlyer
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.
Facebook and agencies
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.
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, e.g. Baidu.
However, you can advertise and record installs for out-of-store apps on Facebook following these instructions:
- The developer has to prepare a separate APK for each out-of-store market you use to advertise your app on. More details here.
- Create a Traffic or Conversions campaign on Facebook, with mobile attribution enabled, which sends leads to a landing page.
- The landing page should include a Download App button, which directly links to the out-of-store market where the APK exists.
- 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.
AppsFlyer gets spend (including clicks and impressions) data 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.
Facebook cost FAQs
I can't see old Facebook cost data in the AppsFlyer dashboard
Upon performing the first Facebook admin login described above AppsFlyer receives Facebook's cost data up to 30 days retroactively for existing campaigns. Cost data from beforehand isn't available.
In subsequent syncs, AppsFlyer 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.
Are there raw clicks data from Facebook?
As AppsFlyer gets only aggregated click and impression data from Facebook, the entire set of raw clicks and impressions are 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, the 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, cannot 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.
Although the total cost is identical, the eCPI AppsFlyer calculates is different from the cost calculated by Facebook. why?
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 is there cost data for only some of the campaigns?
Even if there are several Facebook users with permissions to run campaigns in the Facebook Business Manager, only one of them is required to perform the Facebook login described above.
However, if this user does not have access in Facebook to some of the running campaigns, the result is campaigns that are displayed on AppsFlyer's dashboard, but lack the cost, clicks and impression data.
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 are 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.
What's the problem with Facebook cost for apps in the Amazon app store?
In contrast with AppsFlyer's data, Facebook doesn't tell apart cost data of Android apps and 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.
Can I halt the Facebook cost sync?
What should you do if you want to switch the Facebook ad account, but have already linked the Facebook cost via AppsFlyer with your old ad account?
The solution is to disconnect the ad account via Facebook. No action should be taken on AppsFlyer.
The cost tab status message Partner API is currently not responding displays
This may be because you enabled two-factor authentication (2FA) in Facebook after you integrated your account with AppsFlyer. To solve:
- Log out of your Facebook account.
- In AppsFlyer, go to the Cost tab of the Facebook integration, and delete the connection.
- In the Cost tab, click login and follow the steps there.
Facebook cost examples
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.
Facebook discrepancies with AppsFlyer
As any two major players in the mobile user acquisition eco-system, AppsFlyer and Facebook differ in their attribution models. This may cause discrepancies to occur between Facebook and AppsFlyer's dashboards.
While we work closely with Facebook to minimize these discrepancies, advertisers should be aware of the following causes for them.
Detect a discrepancy between AppsFlyer and Facebook
Compare events listed in Facebook Event Manager and Analytics to those in AppsFlyer reports. If the number of events varies significantly, there may be a discrepancy.
Differences in attribution models
Click attribution lookback window
1-30 days. Make sure to set to 7 days with Facebook.
View-through attribution lookback window
1 day by default, but can be configured to be 1-48 hours (keep this default value)
Install record date
Facebook records new installs on the Click/View Time.
AppsFlyer records new installs on installation time (the very first launch of the app)
Facebook self-attributes installs regardless of other media sources
AppsFlyer uses last click attribution (more information about AppsFlyer attribution available here)
Facebook attributes its users that click and install on different devices, e.g. iOS/Android/desktop
AppsFlyer attributes single devices, which perform both the engagement and the install
Different time zones
Facebook Ads' default reporting time zone is PST. Make sure to change it in Facebook Ads Manager to match the app time zone defined in the app settings in AppsFlyer.
AppsFlyer's default app time zone is UTC+0. You can change the time zone set for the app in the app settings page to match the time zone defined in Facebook Ads Manager.
See examples in the attached paper (scroll down) Facebook and AppsFlyer - Understanding Discrepancies.
Click-through and view-through attribution
AppsFlyer supports both Click-Through and View-Through attribution. To minimize discrepancies between the Facebook and AppsFlyer platforms, ensure both the Click-Through and View-Through Lookback windows are the same.
To compare the click-through and view-through attribution windows on Facebook with those on AppsFlyer, visit Facebook. We recommend to configure the attribution windows on AppsFlyer according to Facebook's values as they are shown in the following screenshot:
Suppose that Facebook's click lookback window is configured on AppsFlyer to 1 day for your app com.greatapp, while on Facebook it has the default value of 7 days. Users that click on greatapp's ad on Facebook, but launch the app for the first time after 2-7 days are attributed as organic users on AppsFlyer, while Facebook self-reports these users.
Restricted media discrepancies
In some conversion scenarios an ad network won’t share user-level data. In the AppsFlyer platform, aggregated data reports function as usual, but the conversions listed in raw data reports will be attributed to a restricted media source.
Facebook Ads doesn’t send user-level data for View-through attribution (VTA) conversions. As a result, AppsFlyer might not attribute conversion-assisting impressions to Facebook Ads.
- User sees a Facebook ad for AwesomeApp. Then, later, they see and click on a GreatAdNetwork ad for AwesomeApp and install it.
- Facebook Ads claims the conversion since it occurred within their VTA window.
- AppsFlyer attributes the conversion to GreatAdNetwork as they had the last engagement before install.
- AppsFlyer won’t consider Facebook Ads as a conversion-assisting network since Facebook Ads’ VTA is restricted.
In-app events differences
The differences between platforms may also be present with post-install events (e.g. in-app purchases), that are displayed on Facebook and on AppsFlyer. The following table describes the most common reasons for these differences and advised on how to minimize them:
Events that are performed by users that are attributed on one platform, but not on the other, are also under discrepancy by default.
Minimize the installation discrepancies according to this article to lower in-app events discrepancies as well.
Facebook always attributes events to its own campaigns that drove them, while AppsFlyer attributes these events to the acquisition source.
In installs and events, which Facebook incorrectly self-attributes are indicated as assists in AppsFlyer.
|Different life time definition||The users life time on Facebook is up to 28 days, meaning FB doesn't show events if they take place more than 28 days after the ad click.
Facebook users life time on AppsFlyer is up to 180 days.
|When assessing the value of users from Facebook campaigns from more than 1 month ago use AppsFlyer's data to get the broader picture.|
|Unmapped events||AppsFlyer gets SDK originated events, but they are not mapped to Facebook, and therefore aren't sent.||Make sure to map with Facebook all the in-app events that signify users' quality (see capture below).|
|Unsent Revenue||AppsFlyer gets the revenue from the SDK originated events, but they are not sent to Facebook.||Make sure the Send Revenue boxes of the in-app events are always checked, e.g. the purchase event in the capture below.|
|Missing event values on Facebook||AppsFlyer sends parameters and values to Facebook as part of the events mapping, if they have the correct structures.||Build your SDK in-app events according to AppsFlyer's recommended structures to fully map the event values with Facebook.|
Installs from re-engagement campaigns in my UA dashboard?
A re-engagement campaign can cause users to open an already installed app(re-engagement). Alternately, when AppsFlyer recognizes a previous install of the app existed on the same device, AppsFlyer may refer to that conversion as a re-attribution.
If, on a re-engagement campaign, Facebook targets new users or users that have installed the app for the first time after more than the set re-attribution window following the original installation, these users are recorded as new user acquisition installs on AppsFlyer, which belong to a re-engagement campaigns on Facebook.
On the other hand, installs that take place within the set re-attribution window following the original installation, are considered as re-attributions and appear on the retargeting page of AppsFlyer, while they may be appearing as new installs by Facebook.
While Facebook shows all installs of a retargeting campaign in the same place, on the AppsFlyer dashboard, installs are divided between the Overview page (new installs) and the Retargeting page (re-attribution and re-engagements).
Facebook reports on cross-device attribution. This could sometimes cause issues where a campaign for one platform (iOS/Android) shows installs on another platform.
Linda clicks on a mobile ad of GreatApp on Facebook using her Android phone. Facebook records the click done by Linda under the original Android targeted campaign "Android Females". Linda decides to install GreatApp on her home iPad. Upon first launch, AppsFlyer asks Facebook for the origin of this iOS install, and Facebook answers with the campaign "Android Females".
Validation rules and Protect360
If you use AppsFlyer's Validation Rules, results may differ between AppsFlyer and Facebook when there are rejected installs that originally come from Facebook. In these cases Facebook self-reports installs to itself, while AppsFlyer rejects the same installs.
Similarly, if you use AppsFlyer's anti-fraud solution, Protect360, there may be installs since Facebook self-reports, while AppsFlyer rejects.
Jeff, the UA manager of GreatApp, creates a campaign called SPNA, which targets only Spanish speakers in North America. To verify this Jeff defines a validation rule, that accepts users from Canada and the US only.
When a Facebook user from Spain clicks and installs, Facebook self-reports the install, while AppsFlyer rejects the install that doesn't pass the validation rule.
Facebook integration troubleshooting
If you have completed the basic integration and still not seeing results from Facebook on AppsFlyer's dashboard, first verify that you have new installs from Facebook since the integration.
If so, please consult the main reasons below for solving this issue:
No IDFA collection
As stated in the SDK Integration Guide - iOS, you must add the AdSupport.framework to your project for IDFA collection to take place. Although in most cases attribution still works with finger-printing, IDFA collection is mandatory for working with Facebook. Check the Installation Raw Data report to see if the IDFA column is indeed empty or not.
Android installs work on Facebook even without GAID collection, but it is highly recommended to have it implemented too.
Wrong Facebook App ID
On the Facebook dashboard verify the app ID is correct and matches the value in the app store.
Note - you can also use Facebook's Graph API to validate your Facebook App ID.
App status on Facebook
The app must be defined on Facebook as Live rather than In development for attribution to work.
Wrong type of Facebook campaign
Facebook app install
Correct set-up - attribution works.
Incorrect set-up - attribution fails.
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?
To stop cost data sync with Facebook, remove AppsFlyer from your Business Integration in your Facebook account.
Can AppsFlyer show the campaign level and ad groups?
Is Facebook data shown in real-time?
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 AppsFlyer's 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?
How? Read here.
Do you make Facebook raw data available to agencies?
I don't see Facebook raw data in the installation and in-app events reports
By default, Facebook does not allow distribution of user-level data. Advertisers who want to get this raw data via AppsFlyer can sign Facebook’s Data Usage Terms for Advanced Mobile App Measurement.
Once an advertiser agrees to Facebook’s Data Usage Terms, the data doesn't appear immediately. After the advertiser agrees to Facebook's Data Usage Terms, at least one install from Facebook must take place for the data to appear on AppsFlyer. Anybody with access to the Facebook ad account can do the following:
- Go to Facebook's setup window on AppsFlyer
- Click on Terms of service
- Continue on Facebook and agree to the terms of service
OR go directly to Facebook here.
Once agreed, and at least once install takes place after accepting Facebook's Facebook's Data Usage Terms, historical Facebook raw data appears in AppsFlyer.
Are there specific columns for Facebook in AppsFlyer's performance reports?
Yes. The performance reports have static column structures in any combination of selected media source, 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?
For details about setting up attribution with FMPs, click here.
What should I do when I receive the following warning?
What happens with different lookback windows than on 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's windows end, do not get attributed to Facebook.
Therefore, to minimize discrepancies, the recommendation is to configure Facebook's lookback windows in AppsFlyer to 7 day clicks and 1 day views.
What are the Facebook API parameters?
|Conversion data||AppsFlyer raw data|
How long do you keep Facebook’s user-level data?
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.