How long does it take to start tracking 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 tracking. Just follow the step-by-step setup instructions below.
Facebook App ID
But first, if you still haven't defined your app on Facebook, follow these instructions to create the Facebook app ID:
- Visit Facebook's App Dashboard
- Click Create New App under Apps
- Complete the name for your app, and also a unique namespace
Basic Facebook Tracking Setup
To start tracking Facebook campaigns with AppsFlyer, follow these steps:
- When you define your mobile app on Facebook you get its Facebook App ID.
Copy your Facebook App ID and head to your app's dashboard on AppsFlyer.
- Click on Integrated Partners link on the left bar.
- Search for Facebook and click on its logo to open the Facebook setup page.
- On the Integration tab activate the partner, click inside the Facebook App ID box and paste.
Toggle Enable Retargeting to ON and set the duration of the Re-Engagement Window (the period when the user's in-app events are attributed to the retargeting media source). You can set the value in days (1-90), hours (up to 23), or even lifetime:
We recommend the Click-Through Attribution Lookback window remains set to 28 days to match with Facebook:
- We recommend the View-Through Attribution Lookback window remains set to 1 day, again, to match with Facebook:
- Press Save & Close.
Congratulations! You have completed basic tracking for Facebook mobile campaigns with AppsFlyer!
(Still not seeing Facebook results on AppsFlyer? Click here)
Advanced Facebook Tracking Setup
With basic tracking already set up for Facebook, it's time for some quick advanced tracking setup.
In-App Events Mapping
- Toggle In-App Event Postbacks to ON
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 pre-defined event list. This automatic mapping saves you time and decreases mapping mistakes significantly.
- The Sending Option for all SDK defined events is Events attributed to any partner or organic, i.e., your entire user base is available to be reported to Facebook.
- Click Add Event to add an SDK Event to the list
- Fill in the following parameters:
|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 pre-defined 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).
For more information about mapping in-app events with Facebook go here.
AppsFlyer's retargeting attribution for Facebook enables advertisers to attribute an additional engagement of a user with an ad on Facebook, and measure the quality of the user, post engagement, using the AppsFlyer reports.
- Ensure Retargeting is enabled for the app on the App Settings page. For details, click here.
- Set the Facebook Ads Retargeting toggle to ON.
- Set the time period following the re-engagement, where the user's in-app events are attributed to the retargeting media source. You can set the value in days (1-90), hours (up to 23), or even lifetime.
- For more information about AppsFlyer's retargeting attribution, click here.
- For information about deep linking users from SRNs, such as Facebook's, click here.
Cost, Clicks and Impressions Data
Enabling the Facebook Cost feature not only gets you the cost data for your Facebook campaigns, adsets, ads and channel levels. It also gets you the full 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
- Toggle ON the Get Cost, Clicks and Impressions Data button
- Click the Facebook Login button
- When prompted, allow AppsFlyer to access your Facebook campaign data
- 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 describes five different 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.
Partner API is not responding
The ad network cost data API is either down or experiencing issues.
Wait for the network API to become responsive.
|Cost API credentials are incorrect. AppsFlyer in unable to pull cost data.||
Make sure that the cost API key is correct.
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.
For more information about enriching your Facebook information with cost, clicks and impressions data, click here.
Ad Revenue Tracking
If your app uses Facebook Audience Network Ad Revenue for ad monetization, you can track 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 tracking 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.
- Click Save & Close.
Facebook In-App Events Mapping
This enables advertisers to utilize Facebook’s advanced optimization capabilities, as well as build Custom and Lookalike Audience segments.
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.
To use Facebook optimization capabilities such as App Event Optimization, Value-Based Optimization, and Dynamic Product Ads, it is crucial to map SDK events to the corresponding Partner Event Identifier.
Events mapped to “CUSTOM” are not available for optimization.
For more information about Rich In App Events and their required parameters see here.
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 pre-defined 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.
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.
- 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.
With Facebook you can see data broken down not only by campaigns, ad sets and ads, but also by Facebook channels.
- 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 track 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 tracking please go here.
In addition, agencies can't alter the Facebook look back windows and retargeting toggle. 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:
Tracking 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 track 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 "Link click" campaign on Facebook, which sends leads to a landing page.
- The landing page includes a "Download App" button, which has a custom tracking link
behind it. The link MUST include the landing page redirection parameter,
- The lead clicks on the button and is redirected to the out-of-store market. After completing the installation the lead becomes an attributed user.
Since it's not possible to extract the lead's device ID from the landing page on mobile web, AppsFlyer uses fingerprinting as the attribution method.
For specific instructions on tracking apps in Amazon on Facebook click here.
Getting Facebook cost (including clicks and impressions) data is super-easy to set up, but questions about it frequently arise.
Below you can find the most common questions and examples explaining the Facebook cost feature.
Once you set Facebook cost do not change the name of any running Facebook campaign, ad set or single ad as it may cause serious discrepancies or missing cost data.
Facebook Cost FAQs
I can't see old Facebook cost data on AppsFlyer's dashboard
Upon performing the first Facebook admin login described above AppsFlyer receives Facebook's cost data up to 7 days retroactively for existing campaigns. Cost data from beforehand isn't available.
This cost, clicks and impressions data is collected for all campaigns, which had at least 1 conversion during the last 7 days prior to the initial admin login.
Cost data was fine for a few months, but it stopped showing up
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 just clicked on my Facebook ad 5 minutes ago. Why don't I see the click on AppsFlyer's dashboard?
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.
Is there any 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.
What are the 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 several inherent differences in Facebook and AppsFlyer's attribution models, which may lead to discrepancies with Facebook cost data:
- Facebook's 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's non-mobile campaigns - on 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 shows is different from Facebook's
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 only for 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 on 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 there Facebook cost data for retargeting campaigns?
Currently Facebook cost data is only displayed in the Overview dashboard for user acquisition campaigns, and not for retargeting campaigns in the Retargeting dashboard.
Why Does the Facebook Cost Configuration Window Close Before Login
If you are is 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.
Facebook Cost Examples
Mr A Flyer is an advertiser.
He is running two separate campaigns on Facebook Mobile App Installs during the period March 27 – April 3.
Campaign A: UK_Female_30:
Cost: $1000 (total spend of the campaign, as provided by Facebook)
eCPI: $1,000 / 400 (total number of installs generated by the campaign) = $2.5
Campaign B: US_Male_30:
eCPI: $500 / 100 (total number of installs generated by the campaign) = $5
In the table above, Mr Flyer’s Facebook campaign cost is calculated per campaign.
In the aggregated performance report (presented by default), you can see the information provided by AppsFlyer at a higher level (total of all Facebook campaigns):
According to the table above, Mr Flyer’s total Facebook campaign cost is calculated as follows:
All Facebook campaigns:
Total cost: $1,000 + $500 = $1,500 (total spend of the campaigns, as provided by Facebook)
Total installs: 400 + 100 = 500
eCPI: $1,500 / 500 = $3 (eCPI is calculated for each campaign / Adset / Ad at the end of each day).
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.
Differences in Attribution Models
Click Attribution Lookback Window
7 days by default, but can be configured to be 1-30 days
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 displays the data according to the local time zone of the logged in user.
AppsFlyer displays the data according to the time zone set for the app in the app settings dashboard page, regardless of the user's location.
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 7 days for your app com.greatapp, while on Facebook it has the default value of 28 days. Users that click on greatapp's ad on Facebook, but launch the app for the first time after 8-28 days are attributed as organic users on AppsFlyer, while Facebook self-reports these users.
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.
|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 morethan 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:
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.
On the Facebook dashboard verify the app ID is correct and matches the value in the app store.
Note - in the past there was a URL for app ID validation, but it has been deprecated by Facebook.
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 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.
I don't see Facebook raw data in the Installation and In-App Events reports
1. Go to Facebook's setup window on AppsFlyer
2. Click on Terms of service (highlighted in blue in the capture below)
3. Continue on Facebook and agree to the terms of service
OR go directly to Facebook here.
Once agreed, historical Facebook RAW data are available 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 tracking with FMPs, click here.
Can I have Facebook's SDK along with AppsFlyer's?
If you do use both SDKs make sure NOT to pass to Facebook's SDK any in-app events sent to AppsFlyer, to avoid double reporting on Facebook.
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 28 day clicks and 1 day views.
What are Facebook's API Parameters?
You may see the following:
campaign_group instead of Campaign
campaign instead of Adset
adgroup instead of Ad
Is Facebook's SDK Necessary in addition to AppsFlyer's SDK?
- User acquisition
AppsFlyer's SDK takes care of all mobile user acquisition tracking purposes of your Facebook users, including engagements, installs, sessions and post-install events.
- Direct Deep Linking
You can perform deep linking with Facebook campaigns without Facebook's SDK in your app. However, if you need the deep linking data within the app, the only way to get it is by Facebook's SDK.
- Deferred Deep Linking
In most cases you can perform deferred deep linking from Facebook, by using campaign or ad names from the conversion data. For Dynamic Product Ads campaigns, however, AppsFlyer doesn't get the matching product data from Facebook. Therefore, in order to deep link according to the specific product in these campaigns, Facebook SDK is needed.