Mobile App Attribution (MMPs)
Why Mobile Attribution Needs a Middleman
On the web, a click on an ad can land on a page with a tracking pixel, and the browser's cookie or URL params tie the click to the conversion directly. Mobile apps break this chain: a click on an ad opens the App Store or Play Store, the user installs the app, and by the time the app first opens, the ad network has no visibility into what happened and the app has no idea which ad caused the install. Mobile Measurement Partners (MMPs) — AppsFlyer, Adjust, Branch, Singular, Kochava — exist to bridge this gap by acting as a neutral, SDK-embedded attribution layer that both the app and the ad networks trust.
How Click-to-Install Attribution Actually Works
When a user taps an ad, the network redirects through the MMP's tracking link (e.g., app.adjust.com/abc123 or an AppsFlyer OneLink), which logs the click with device signals — IP address, user agent, timestamp, and on iOS pre-ATT, the IDFA. The store install happens, the app opens for the first time, and the MMP SDK inside the app immediately pings the MMP's servers with the device's current fingerprint. The MMP matches this first-open event against recent clicks using a probabilistic fingerprint match (IP + device model + OS version + timezone within a short window) or a deterministic match (IDFA/GAID/IDFV passed directly). Deterministic match is vastly more reliable but requires the identifier to survive the install-to-open gap, which iOS's App Tracking Transparency (ATT) framework now blocks by default.
| Matching Method | Reliability | Requires |
|---|---|---|
| Deterministic (IDFA/GAID) | High — exact device match | User ATT consent (iOS) or Play Services (Android) |
| Probabilistic fingerprinting | Moderate — statistical match, can misattribute | IP, device model, OS, timezone, carrier |
| SKAdNetwork postback | High for aggregate, zero for user-level | Apple's SKAN framework, no IDFA needed |
Attribution Windows Are Negotiable, Not Fixed
Deep Links and Deferred Deep Links
A standard deep link (myapp://product/123) only works if the app is already installed — tapping it when the app is absent just fails or falls through to a generic store listing. MMPs solve this with deferred deep linking: the tracking link captures the intended destination, the app installs, and on first open the MMP SDK retrieves the stored destination and routes the user directly to the relevant screen (e.g., a specific product page) instead of dumping them on the home screen. This is the single highest-leverage feature MMPs provide for conversion rate, since 'click an ad, land on the generic home screen, give up' is a major mobile funnel leak.
{
"event": "install",
"attribution_source": "network",
"media_source": "googleadwords_int",
"campaign": "ios_search_brand_q4",
"adgroup": "exact_match_brand_terms",
"click_time": "2026-10-10T14:22:03Z",
"install_time": "2026-10-10T14:24:51Z",
"is_organic": false,
"idfa": null,
"idfv": "D2A1F3B0-...",
"attribution_method": "probabilistic",
"deep_link_value": "product/123"
}Organic vs. Non-Organic Split
MMPs label every install as either organic (no matched click, user found the app directly in the store) or non-organic (matched to a tracked link). This split is the number marketers fight over most, because the thresholds for the matching window are configurable and a network that counts loosely will claim credit for installs that would otherwise show as organic. A healthy practice is running occasional organic uplift studies — pausing a network's spend and watching whether 'organic' installs drop — to sanity-check whether the MMP's non-organic attribution is actually incremental.
Server-to-Server Postbacks Into Ad Platforms
Attribution data only matters if it feeds back into the ad platform's bidding algorithm. MMPs forward attributed in-app events (installs, trial starts, purchases) to each ad network via server-to-server postback APIs — this is what lets Google Ads UAC or Meta App Campaigns optimize bidding toward downstream value rather than just install volume. Configuring which events get forwarded, and at what value, is itself a significant setup task: forwarding too many low-value events (e.g., every screen view) dilutes the optimization signal, while forwarding too few starves the algorithm.
MMPs as Deduplication Layers
What's Next?
iOS's privacy framework changed this model fundamentally by replacing device-level attribution with Apple's own aggregated postback system, which is worth understanding as its own topic given how differently it behaves from the model described here.
I build these systems professionally.
Whether it's a RAG pipeline, analytics migration, or AI workflow — let's talk.