Overview
Meta Ads (formerly Facebook Ads) lets you run advertising campaigns across Facebook, Instagram, Audience Network, and Messenger from a single platform. Branch's Meta Ads integration tracks attribution for installs and post-install events, imports cost data, and supports the iOS privacy frameworks used in Meta campaigns: Apple's SKAdNetwork (SKAN) and Meta's Aggregated Event Measurement (AEM).
Meta is a self-attributing network (SAN), which means Meta runs its own attribution and reports results back to Branch via API rather than receiving traditional postbacks from Branch.
For more information about integrating ad partners in general, visit our Ad Partner Integration Guide.
Note: this guide is for new Branch
Please note that this guide is about integrating Meta Ads in the new Branch experience. For information on Meta Ads in legacy Branch, visit our legacy guide.
Partner capabilities
Capability | Details |
|---|---|
Company type | Self-attributing network (SAN) |
Deep linking | Supported (SAN API-Driven Deferred Deep Linking) |
Attribution | Click-through attribution, View-through attribution (with SKAN and AEM on iOS) |
Ad campaign types | Awareness, Consideration, Conversion (web and app) |
Supported platforms | iOS, Android, Web |
Cost ingestion support | Supported (via API) |
Pricing models | CPC, CPM, CPA |
Engagement Builder Ad Partner Integration |
Note: limited tracking link support
Meta has confirmed that impression tracking links are not supported in any ad placement, and click tracking links are only supported in a subset of placements. For most campaigns, attribution flows through Meta's APIs (SAN, SKAN, AEM) rather than tracking link redirects.
Before you begin
To set up the Meta Ads integration, you need:
A Branch account with access to Configuration > Ad Partners and admin permissions to enable and configure integrations.
A Meta Ads account with admin access through Meta Business Manager.
Branch's Performance product enabled for your Branch account. Contact your Branch account manager or visit https://branch.io/pricing.
Enable Meta Ads
To begin, navigate to Configuration > Ad Partners > Meta.
Meta is an OAuth partner. Follow Connect with OAuth in the general Ad Partner Integration Guide to sign in and connect your Meta Ads accounts.
Warning: Meta Account ID
Do not reuse a Meta Account ID across multiple apps. If you have more than one app using the same Meta Account ID, SKAN data may appear in only one of those apps. Use a distinct Meta Account ID per app to avoid visualization issues.
Configure attribution
To configure attribution windows, select the Attribution windows tab on the Meta page.
Attribution type | Default | Meta's recommendation |
|---|---|---|
Click to conversion event | 28 days | — |
Click to install | 7 days | 7 days |
Click to start session | 1 day | — |
Household measurement window | 2 days | — |
Impression to conversion event | 7 days | — |
Impression to install | 1 day | 1 day |
Impression to start session | 1 day | — |
Tip: attribution window alignment
Meta's iOS attribution defaults to a 7-day click and 1-day view window. If you want Branch's Meta attribution to match Meta's own reporting as closely as possible, use those values for Click to install and Impression to install.
Configure events
To configure event mappings, select the Event config tab on the Meta page.
Meta uses event mappings to optimize campaigns and to feed the AEM and SKAN frameworks. Follow Configure events in the general Ad Partner Integration Guide for the event mapping flow. The full Branch-to-Meta event name reference is in Data mappings below.
Verify your data
After your integration is connected and events are flowing, you can verify data is reaching Meta and Branch:
In Branch Liveview: confirm that events from your app appear in real time. This is the fastest way to confirm SDK events are firing.
In Branch Analysis dashboards: review attributed installs, events, and cost data where
Ad Partner Name = Facebook.In Meta Events Manager: check the Activity tab to confirm mapped events are being received. Look for any errors or warnings about event eligibility.
In Meta Ads Manager: when creating a campaign, your mapped events should appear as available optimization events. If an event doesn't appear, it may not be eligible for AEM or SKAN.
Meta privacy frameworks
Meta supports two privacy-preserving measurement frameworks for iOS 14.5+: SKAN (Apple's framework) and AEM (Meta's framework). The two work in parallel and can run on the same campaign.
SKAdNetwork
Meta handles SKAN differently from most ad partners. Meta does not forward individual SKAN postbacks to Branch. Instead, Meta collects and validates postbacks internally and shares aggregate data with Branch through Meta's Ads Insights API.
Supported campaign types for SKAN data:
Meta campaign type | SKAN data shared with Branch |
|---|---|
Mobile App Install (MAI) | ✅ |
App Event Optimization (AEO) | ✅ |
Value Optimization (VO) | ✅ |
All other campaign types | ❌ |
Data dimensions available via the Ads Insights API:
Parameter | Shared by Meta |
|---|---|
Download/Install | ✅ |
Reinstall | ❌ (counted as Install) |
Conversion Value | ✅ |
Campaign Name | ✅ |
Campaign ID | ✅ |
Sync Branch's conversion value schema with Meta
If you use a Branch SDK for SKAN support, paste Branch's conversion value schema URL into Meta Events Manager so Meta can optimize campaigns using your Branch conversion values.
Caution: skip this step if you use the Facebook SDK for SKAN
If you use the Facebook SDK for SKAN, you do not need to sync Branch’s conversion value schema with Meta. Meta pulls its own conversion value schema automatically. If you call SKAN methods natively in your app, Meta recommends configuring conversion values in Meta Events Manager directly rather than using Branch's endpoint.
In Branch, navigate to Configuration > Ad Partners > Meta and find the Conversion value URL field. The URL follows this format, with your app's iTunes ID auto-filled:
https://api2.branch.io/v3/partners/a_facebook/conversion-value-mappings?app_id={itunes_id}Select the copy icon to copy the URL with your iTunes ID populated.
In Meta Ads Manager, open Events Manager and select your app.
Open Settings, then under Configure App Events for SKAdNetwork, select Set Up Events.
Select Import from Partner App.
Paste the URL from step 2 and select Connect.
Important: Meta will return a connection error if your app isn't enabled for SKAN in Branch, or if you haven't mapped at least one conversion value. Configure both before pasting the URL.
Aggregated Event Measurement (AEM)
Meta's Aggregated Event Measurement (AEM) is a privacy-preserving protocol that measures iOS 14.5+ app installs and post-install events without relying on the IDFA. AEM runs alongside SKAN and provides faster, campaign-level attribution.
Supported campaign types for AEM:
Campaign type | Description |
|---|---|
Mobile App Install (MAI) | App promotion campaigns. Work automatically once AEM is enabled. |
Mobile App Engagement (MAE) | Sales (with or without catalog), Lead, and Engagement campaigns destined to a mobile app. Requires deep linking to be configured. |
Caution: AEM data takes priority
When both AEM and Branch Link data appear for the same traffic, Branch defers to AEM data for last-touch attribution. This is intentional and aligns with Meta's preferred attribution method.
Enable AEM
Note: SDK version requirement
AEM requires the Branch iOS SDK version 2.1.2 or later. If your app uses an older version, work with your development team to update before enabling AEM.
Contact your Meta Account Manager and request that AEM be enabled for your account. Meta must enable AEM on their side before you can activate it in Branch.
(Optional) In Meta Events Manager, set MMP as your preferred connection method for your app. Ensure install and post-install events use the same connection method. See Meta's documentation for steps.
In Branch, navigate to Configuration > Ad Partners > Meta > Event config.
Below your event mappings, toggle Enable Aggregated Event Measurement (AEM) to on.
Warning: re-toggle AEM after SDK updates
If your development team updates the Branch iOS SDK, re-toggle the AEM switch in Branch to make sure data continues flowing.
AEM data in Branch
AEM provides the following campaign-level fields:
campaign_id— Meta campaign identifierad_id— ad identifiercreative_id— creative identifierad_set_id— ad set identifiersecondary_publisher— placement (Instagram, Facebook, Audience Network, etc.)
Note: use
campaign_idinstead ofcampaign_nameMeta doesn't provide
campaign_group_namefor AEM, so thecampaign_namefield in Branch reports and exports shows asUnpopulated. Usecampaign_idto identify campaigns instead. This is a Meta limitation that affects all MMPs using AEM.
AEM-attributed events appear in Branch within minutes to hours and are included in standard last-touch attribution. Allow up to 24 hours for full propagation through Meta's systems, and 24–48 hours after launching your first AEM campaign to see meaningful data.
Limited Data Use (LDU)
On July 1st 2020, Facebook introduced a new Limited Data Use (LDU) feature to support customer compliance with the California Consumer Privacy Act (CCPA). This feature enables you to limit how Facebook uses the data of users in states where Limited Data Use is available. This data could be collected by you or by third parties on your behalf.
If the Limited Data Use feature is enabled, Facebook will process data in accordance with its role as a service provider or processor with respect to flagged personal information from people in states where Limited Data Use is available. This means Facebook will limit use of that data subject to their State-Specific Terms.
To invoke Meta Limited Data Use for your users, please use any Consumer Protection Preference other than FULL.
Data mappings
Event names
Branch maps standard Meta event names to Branch event names automatically. When tracking a Meta event that maps to the Branch Custom event, use the Meta event name with branch.logevent('AdClick') syntax. See the Branch event tracking guide for implementation details.
Branch event name | Meta event name |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Campaign and ad data
Note: advertising partner name value
The
~advertising_partner_namefield populates as Facebook for Meta Ads traffic, not "Meta". UseAd Partner Name = Facebookwhen filtering in Branch dashboards or exports.
Branch field | Meta field |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Caution: server-side creative fields
The
creative_idandcreative_namefields are populated server-side by Meta on cost, clicks, and impressions sent to Branch. These are not configured in Branch.
Metadata
The table below shows how Branch SDK fields map to Meta MMP fields, and which Meta events each mapping is supported on.
Meta content events in the supported events column refers to this set: fb_mobile_add_to_cart, fb_mobile_add_to_wishlist, fb_mobile_content_view, fb_mobile_initiated_checkout, fb_mobile_purchase, and fb_mobile_search.
Branch SDK field | Meta MMP field | Meta event(s) supported |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Branch sends all content items tracked for an event when supported. If the advertiser tracks ContentMetadata through the Branch SDK, Branch automatically maps "fb_content_type":"product" for in-app events. Otherwise, fb_content_type is not added.
Data limitations
Please note the following Meta-specific data behaviors in Branch:
Redacted data: Meta may redact specific metrics or events when aggregation levels aren't high enough to prevent de-anonymization, or for non-aggregated view-through and click-through data. Redacted values appear as "undisclosed" in Branch and
nullin Aggregate Exports.Android event detail: For Android events specifically, you can retrieve event detail (rather than "undisclosed") by enabling Meta Install Referrer.
Device-level data to third parties: Branch cannot send device-level Meta attribution data to third parties unless attribution flowed through Meta Install Referrer or AEM.
Deep link session callback: Meta attribution data is not returned in the deep link session initialization callback inside the app.
60-day purge: Branch purges last-attributed Meta data after 60 days.
Feature support for Meta data
Branch feature | Meta data included |
|---|---|
Dashboard visualizations | Pre-aggregated analytics |
Query API | Pre-aggregated analytics |
Liveview | Pre-aggregated analytics |
CSV Exports | Pre-aggregated analytics |
Webhooks | Pre-aggregated analytics |
Daily Export API | Not supported |
Data Integrations | Not supported |
Troubleshooting
My AEM events show as "Ineligible"
This usually means AEM was toggled on in Branch before AEM was enabled in Meta. Set up AEM in Meta first, then enable it in Branch. If you've already hit this, toggle the AEM switch off and back on in Branch to recover.
I get a connection error when pasting the SKAN conversion value URL in Meta
Meta returns a connection error if Branch can't supply a conversion value response. Confirm that:
Your app is enabled for SKAN in Branch. See Enable SKAdNetwork.
You've mapped at least one conversion value in the Branch dashboard. Without a mapping, Meta gets an empty response.
SKAN data in Branch looks delayed
Meta's SKAN dashboard data is reflected by the Meta conversion date rather than the Branch ingestion date. This produces a delay similar to cost data on traditional SAN install campaigns. Allow 24–48 hours after implementation before troubleshooting further.
Branch and Meta numbers don't match
Meta and Branch can show different totals for the same campaign because of attribution window differences, late conversions, redaction thresholds, and aggregation rules. See Common Sources of SAN Reporting Discrepancies for the full list of expected differences.
Where do I see Meta SKAN data in Branch?
To see Meta SKAN data in the new Branch experience, use the SKAN or Unified + SKAN data source for Analysis dashboards and set Ad Partner Name = Facebook.
Additional resources
For additional questions, see the Meta Ads FAQ and Meta Advanced Mobile Measurement guides.