Overview
With iOS 14.5 and later, Apple's App Tracking Transparency (ATT) framework requires apps to request user permission before accessing the Identifier for Advertisers (IDFA). When users decline tracking permission (which is often the case), traditional attribution methods become limited. To address this challenge, Meta introduced Aggregated Event Measurement (AEM).
Meta's AEM is a privacy-preserving protocol that allows measurement of web and app events from iOS 14.5+ devices, even when users have opted out of tracking. AEM enables you to:
Measure app installs and re-engagement campaigns on Meta properties.
Optimize campaigns using conversion events without requiring IDFA.
Access near real-time reporting for faster campaign optimization.
Attribute events while respecting user privacy preferences.
AEM and SKAN
AEM works alongside Apple's SKAdNetwork (SKAN) but serves a different purpose. While SKAN provides aggregated, delayed attribution data through Apple's framework, AEM offers:
Faster reporting.
Campaign-level attribution data from Meta.
Compatibility with Meta's campaign optimization systems.
You can run both AEM and SKAN simultaneously for the same campaign, giving you more complete measurement across different attribution frameworks.
Campaign support
AEM supports two kinds of Meta campaigns:
Campaign Type | Description |
|---|---|
Mobile App Engagement (MAE) | AEM is available for the following campaign types when the destination is set to a mobile app: |
Mobile App Install (MAI) | AEM includes campaigns that use the app promotion objective. This means you can now run app promotion campaigns without configuring app events for SKAN, and more app events will be available for ad delivery optimization.
|
How AEM works
Instead of using device-level identifiers like IDFA, AEM utilizes aggregate identifiers:
Identifier | Description |
|---|---|
| A set of IDs found on some links that open the app from Facebook ads persisted for 7 days and forwarded to Facebook for campaign optimization. |
| An ID generated automatically by the Branch SDK, persisted on install and forwarded to Facebook for campaign optimization.
|
These identifiers are forwarded to Facebook through all conversion events for re-engagement campaign optimization.
Prerequisites
Before enabling AEM, make sure you meet the requirements in this section.
Branch requirements
Create a Branch account.
Enable Branch Ads for your Branch account. Please contact your Account Manager or our Sales team to learn more about pricing and availability.
Implement the Branch iOS SDK into your mobile app.
Minimum version: SDK v2.1.2
Recommended version: latest
Enable the Facebook integration in Branch.
Meta requirements
Obtain admin access to your Meta Business Manager account.
Register your app with Meta Business Manager. Meta determines app eligibility for AEM. If your app is eligible, AEM will appear as the default attribution option when you create campaigns in Meta Ads Manager.
Technical requirements
The technical requirements for AEM depend on your campaign type.
For all AEM campaigns (MAI and MAE):
Ensure your event postbacks in Branch are configured to send events to Meta.
For MAE campaigns:
Your app must support iOS Universal Links or URI schemes.
Your app must properly handle deep links in Meta campaigns.
For MAI campaigns:
MAI campaigns work automatically once AEM is enabled. No additional deep linking configuration is required.
Configure events
Before enabling AEM, configure which Branch events are sent to Meta for campaign optimization. Event mapping tells Meta which user actions to optimize your campaigns for, such as purchases, registrations, or content views.
Available standard Meta events
Branch maps your events to Meta's standard event names for optimization. Common Meta events include:
Meta event name | Branch event name |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For a complete list of Meta events and their parameters, see the Facebook Ads Overview article.
Set event mappings
In the Events Config tab, you'll see a mapping table with three columns:
Your Event Name: The Branch events tracked in your app (INSTALL, OPEN, PURCHASE, etc.)
Your Customer Event Alias: Optional custom names for organizing events internally. Most users can leave this set to "All Aliases."
Ad Partner Event Name: Meta's standard names. These are the events Meta recognizes and can optimize campaigns for.
To set event mappings in Branch:
In Branch, navigate to Configure → Ads Partners → Events Config.
Review the default event mappings Branch has configured.
To add additional events:
Select the Add Events Mapping button.
Select your Branch event from the Your Event Name column.
Choose the corresponding Meta event from the Ad Partner Event Name column.
Make sure the Enabled checkbox is checked so the event is active.
To modify existing mappings:
Use the dropdowns to select different Meta event names.
Click the trash icon to remove unwanted mappings.
Select Save to apply your changes.

Verify event mappings
It’s important to verify that your events are being sent to Meta and they’re properly configured.
In your app:
Trigger a test event (e.g., make a test purchase).
Check Branch Liveview to confirm the event appears.
Verify the event includes any required parameters (like revenue for purchases).
In Meta Events Manager:
Log in to Meta Business Manager.
Go to Events Manager and select your app.
Check the Activity tab to see if your 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.
Note
Event data typically appears within minutes to hours after configuration, but allow up to 24 hours for full propagation through Meta's systems.
Enable AEM
Contact your Account Manager from Meta to enable AEM support for your account. Meta must enable AEM on their side before you can activate it in Branch.
(Optional) To improve event eligibility and AEM performance, configure Meta to use MMP (Mobile Measurement Partner) as your preferred connection method:
Go to Meta Events Manager and select your app.
Set “MMP” as your preferred connection method.
Ensure install and post-install events use the same connection method.
Learn more in Meta’s documentation.
In the Branch Dashboard, under Ads → Partner Management, search for Facebook.
Navigate to the Events Config tab, and toggle the Enable Aggregated Event Measurement (AEM) switch below your event mappings.
Warning
You must re-toggle the AEM switch in Branch if the MAI supported SDK version is updated or if AEM was enabled before MAI readiness release.
(Optional) Set custom ID
Branch automatically creates and sets a GUID for the anon_id field and sends that to Facebook. Most users do not need to modify this setting.
You may want to set a custom anon_id if you:
Have an existing user identification system you want to align with across platforms.
Need to maintain consistent IDs across multiple attribution providers.
Have specific user privacy or identifier requirements unique to your app.
If you determine you need a custom ID, use the setAnonID method:
Branch.setAnonID("your-custom-anon-id")[Branch setAnonID:@"your-custom-anon-id"];Understand AEM data
AEM provides the following campaign-level data in Branch:
campaign_id- Meta campaign identifierad_id- Ad identifiercreative_id- Creative identifiersecondary_publisher- Placement (Instagram, Facebook, Audience Network, etc.)ad_set_id- Ad set identifier
Data limitations
Due to Meta's privacy-preserving approach, the campaign_name field will show as Unpopulated in Branch reports and exports. This is a Meta limitation that affects all mobile measurement partners using AEM.
Please use campaign_id to identify campaigns instead.
AEM data in Branch
Dashboard reporting:
AEM-attributed events appear in your standard Branch analytics reporting.
Branch includes AEM campaigns in last-touch attribution results.
Filter and segment your data using Branch’s available AEM fields.
Exports and webhooks:
Log-level data exports include all AEM-attributed events.
Events attributed to Facebook AEM campaigns display full available attribution data.
Access detailed event-level data through Branch's data export options.
Data freshness:
Near real-time reporting (events appear within minutes to hours).
Significantly faster than SKAdNetwork's 24-72 hour reporting delay.
Most recent campaign performance data available for quick optimization decisions.
For more on Branch's iOS attribution approach, see iOS Attribution Best Practices.
FAQ
If an advertiser also uses the Facebook SDK for iOS, what should they do to enable App AEM?
If an advertiser uses both the Branch SDK and the Facebook SDK for iOS, they can pass the events in their app campaigns through either method. As a best practice ensure that the install and post-install events use the same preferred connection method by following these steps from Facebook.
How is Branch integrating App AEM campaigns into reporting or exports?
Branch takes App AEM Campaigns into consideration for last touch attribution results.
Log-level data exports for all events is displayed in Exports/Webhooks for events attributed to Facebook AEM campaigns.
What does AEM reporting look like?
Meta does not provide campaign_group_name for AEM, which Branch maps to Campaign Name on the dashboard and exports. So campaign_name for events attributed via Meta AEM protocol will be marked as Unpopulated.
Data available under AEM is as follows:campaign_id, ad_id. creative_id, secondary_publisher, ad_set_id.
Why does my event data say "Ineligible"?
You may run into this issue if you toggled AEM on in the Branch Dashboard before setting up AEM in Meta. You need to set up AEM in Meta first, then enable it in the Branch Dashboard.
If you've already run into this issue, you can resolve it by toggling AEM off and back on again in the Branch Dashboard.
How long until I see AEM data after enabling?
Event mapping changes: Within minutes to hours for events to start flowing. Allow up to 24 hours for full propagation through Meta's systems.
After enabling AEM: New events should appear once campaigns are running.
First campaign data: Allow 24-48 hours after launching your first AEM campaign to see meaningful data.
After toggling AEM off/on: If you need to retoggle the AEM switch, allow a few hours for data flow to resume.
Why aren’t my Mobile App Engagement (MAE) campaigns getting attributed?
For MAE re-engagement campaigns specifically, attribution requires proper deep linking configuration.
Check the following:
Verify iOS Universal Links or URI Schemes are properly configured.
Test that your app opens properly when a Branch Ad Link is clicked from Meta ads.
Confirm the
campaign_idsfield is being passed through the Branch Ad Link.Check that deep link handling is implemented correctly in your app.
Ensure you completed the deep linking requirements in the “Technical Requirements” section.
In Meta, verify MAE campaigns are set to open your app (not web).
To test deep linking:
Create a test MAE campaign in Meta that includes a Branch Ad Link.
Click the ad from a test device.
Verify the app opens and doesn’t redirect to web.
Check Branch Liveview to see if the deep link data is received.