Are you wondering why the number of clicks and installs reported in Facebook is lower than that reported in a third-party service like Branch? There are many moving parts in the pipeline from the user clicking on your Facebook Ad to entering your app, which makes investigating Facebook Install Ad discrepancies difficult.
Measurements will never match up perfectly between different analytics tools, so some small discrepancies are normal. These can be caused by differing techniques for collecting data or processing the data that is collected, and can be explained by understanding what happens behind the scenes.
Discrepancies with Clicks
First, it’s important to know the technical reason why clicks are lower in Branch verses Facebook: Facebook routes users straight to the App/Play Store without letting Branch know that an ad was clicked. If the user decides not to install the app and drops off at the App/Play Store, then Facebook will have recorded one more click than Branch. Because Facebook blocks this click measurement, Branch cannot increment the click count until after the user installs and enters into the app. This is why you’ll see more clicks in Facebook’s dashboard.
Discrepancies with Installs
If you’re wondering why there are more installs recorded in Facebook than in Branch, you’ll want to check whether there are re-open counts listed on your Branch Link. If you see re-opens, then the root cause of the discrepancy could be that Branch classifies re-installs by previous app users as re-opens, whereas Facebook classifies them as new installs.
If you’re stuck investigating a large discrepancy, the cause is often an SDK integration issue. The best way to catch these is by carefully reviewing our Facebook Install Ads Setup Guide — there could be crucial integration steps that have not been completed.
After you have reviewed the basic integration steps, use the following framework to ensure you app is correctly configured for Branch-enabled Facebook Install Ads. Between iOS and Android, there are nine items to check.
Note: If at any stage of this checklist you realize that something is not right, please open a ticket with our Integrations team with the results that you’ve collected. We’d be more than happy to help you investigate!
Debugging Checklist for Facebook Ad Discrepancies:
1. Check Your Branch Dashboard Configuration
Please ensure that you’ve entered your Facebook App ID and Secret at Dashboard > Settings > Link Settings > Authenticate for Facebook Install Ads. Also, make sure the ad you are creating corresponds to the Facebook app ID that you entered here.
For more information on configuring the Dashboard, see this section of the setup guide.
2. Ensure that data is being passed through an open or install event
This is an important step because we need to ensure that after a user enters into your app, data is sent to Branch. For this, you’ll want to simulate a user installing your app for the first time as well simulate an existing user opening your app.
Simulate a new user installing your app:
- Delete the app from your device.
- Grab a Branch Link — you can use one from the Quick Links section of Dashboard.
- Paste it into native Notes app on iOS, or Slack it to yourself. Then click on it, install your app and enter into it.
- Head over to Dashboard > Liveview > Events to ensure that the open/install event contains link data associated to the link that you clicked on in step 3.
Simulate an existing user opening the app:
Repeat steps 2 – 4 above. This time, clicking on your link in step 3 should take you directly to your app and you shouldn’t need to install it.
3. Check Facebook’s scrape of your link
We need to make sure the App Links tags are being correctly detected with the following format:
To verify this, follow these steps:
- Grab a Branch Link from your account (preferably the same one that you’ve been testing with above).
- Run it through Facebook’s Open Graph debugging tool. If a link hasn’t been shared on Facebook before, you will need to click on the fetch new scrape information button. If it has, click on show existing scrape information button.
- Scroll down to the area that reads Show All Raw Tags, and click it to expand the section. Observe the al:ios:url and al:android:url (App Links) tags. They should follow the following format:
This step is particularly important because Facebook needs to know the URI scheme of your Android and iOS App, along with the Branch Link information that it should pass once the user opens it.
Here’s what a healthy scrape from a Branch Link looks like:
Notice that there are App Links tags for iOS and Android of the form:
<meta property="al:ios:url" content="branchsters://open?link_click_id=link-406464435260122977" /> <meta property="al:android:url" content="branchsters://open?link_click_id=link-406464435260122977" />
4. Check You Are Collecting Device IDFAs and GAIDs
You need to be collecting device IDFAs in your iOS App and GAIDs in your Android App. If you aren’t, then this could be the reason that your numbers do not match. When a user clicks on a Facebook Install Ad, Branch does not know that an ad from Facebook was clicked until a user enters and actually opens the app. Upon entry, Branch passes the device’s GAID or IDFA to Facebook to check whether any ads were clicked. If an ad was clicked, Facebook will return data about it including the link that was used in the deep link field when setting up your ad. Branch will then parse out that link, use it to register a click, and return data associated to it to your app’s deep link handler.
Here are guides on how to enable IDFA (iOS) and GAID (Android) collection in your app.
5. Ensure Your App Is Not In Test Mode.
If you’ve enabled Branch’s setDebug on iOS or TestMode in your manifest file for Android, make sure you’ve removed or disabled those calls. With these modes enabled, the Branch SDK uses fake values for the IDFA and GAID on fresh app launches. This means that when Branch asks Facebook whether a user with a particular GAID or IDFA has clicked on a Branch Link, Facebook will respond saying that they haven’t since this data is faked.
6. Check for Correct Ad Configuration
Next, please ensure that you’ve configured your App Install Ad correctly by placing your Branch link inside Facebook’s Deep Link field. Here is how it should be configured.
7. Check for Facebook SDK Conflicts
If you’re using the Facebook SDK inside your app, please ensure the Facebook SDK is not consuming the deferred app link before Branch does by checking that the following calls are commented out from your app:
8. Verify Facebook App Restrictions
We discovered a bug within the Facebook system that prevents App Links from being read by the robot if any of the app restrictions are changed. Check that your app’s restrictions from the Advanced Facebook App Settings tab looks exactly like the following screenshot:
9. Test Through Facebook App Ads Helper
If you’re interested in seeing how a brand new user would experience your Facebook Ads flow, the best option is the Facebook App Ads Helper. We have a great write up about the correct testing process here.
Give yourself a pat on the back, because that was a lot to check. Hopefully it is clear why we consider Facebook Install Ad discrepancy cases one of the most difficult kinds of cases to troubleshoot. Armed with this checklist, you’ll be able to verify a lot of what we check for yourselves. Our hope is that it saves you lots of time and hopefully money! If you’re still having problems or if you encounter an issue during one the checks, please get in touch with our Integrations team. We are always happy to help out!