BC.BartΕ‚omiej Cygan
← Back to articles
July 10, 2026 β€’ Bartek Cygan

App Tracking Without Illusions: GA4, UTM, MMP, and SKAdNetwork in Mobile Campaign Attribution πŸ“±

A comprehensive guide to mobile app attribution. Learn why app installations break traditional tracking, how GA4 differs from an MMP, and how to master iOS SKAdNetwork and AdAttributionKit.

In digital marketing, we have grown accustomed to a relatively simple and linear user journey – like a straight flight through empty space:

ad click β†’ landing page view β†’ conversion

All campaign parameters travel effortlessly in the URL query string, the browser retains cookies, and the analytics script seamlessly logs the session and attributes the conversion.

However, in mobile app install campaigns, this straight path collides with the massive gravity of the app stores.


Why the Install Step is an Attribution "Black Hole"

In the mobile app universe, your app is the center of the solar system, and ad networks (like Meta or Google) are distant planets. The user journey (our space probe) looks very different:

ad click on planet "Meta" β†’ entering the gravitational pull of the App Store β†’ download β†’ installation β†’ landing (first launch) β†’ conversion in the center (App)

When a user clicks an app install ad, they leave their familiar orbit and enter the isolated sandbox of the app store. At the time of installation, the newly downloaded app has no access to URL query parameters, browser cookies, or the user's flight history. All source data disappears beyond the event horizon.

The install step is a black hole that physically breaks the traditional tracking chain and swallows the data.

Web Journey (Straight Flight)

  1. User clicks an ad (with UTM parameters)
  2. Lands directly on the target website
  3. Analytics script logs the session
  4. Conversion happens on-site (full data)

App Journey (Black Hole)

  1. User clicks an ad in orbit
  2. Pulled into App Store / Google Play gravity
  3. App is downloaded and installed (Data disappears beyond the horizon!)
  4. User launches the app in the center
  5. In-app conversion happens (disconnected from source)

Google Analytics 4 (GA4) is exceptionally good at tracking user behavior once they are inside the app. However, it cannot automatically link that first app launch back to an ad click on an external advertising network. For that, a dedicated attribution architecture is required.


1. Two Different Questions: Product Analytics vs Attribution

When evaluating mobile apps, we must separate two entirely different analytical problems.

01

Core Analytics (Product)

What's happening on the sun?

What happens after the probe lands? Where are the errors?

Focuses on optimizing the core app itself. Understanding what happens at the center of the system.

Dedicated tool:Google Analytics 4 & Firebase SDK
first_openscreen_view
02

Orbital Attribution (MMP)

Which planet sent them?

Which planet (ad network) sent the user to our system?

Focuses on interplanetary navigation and traffic. Connects the broken flight path through the black hole and deduplicates sources.

Dedicated tool:Mobile Measurement Partner (MMP)
MMP SDKDeduplication

πŸš€ Key takeaway: These two systems do not compete β€” they complete the solar system map. GA4 studies the sun, while MMP navigates the orbital traffic.

02

Marketing Attribution

Where did they come from?

Key question: Which ad, campaign, or network led to the install and conversion?

Focuses on marketing efficiency and ROAS. Connects the broken ad link to the install and deduplicates conversions across channels.

Dedicated tool:Mobile Measurement Partner (MMP)
MMP SDKDeduplicationSKAN / AAKitPostbacks

πŸ’‘ Key takeaway: These two systems do not compete β€” they play complementary roles and should run in parallel.


2. How GA4 Works in Mobile Apps

The Firebase SDK automatically tracks standard technical events and allows you to define custom product events, such as:

  • first_open (the first time the app is launched – the app equivalent of an install),
  • onboarding completion and account sign-ups,
  • subscription trial starts and in-app purchases.

first_open vs Install

It is critical to remember that:

store download β‰  install reported by network β‰  first_open in GA4

A user can download an app from the store but never actually open it. In this case, the ad network will report an install, but GA4 will never log a first_open event.

By default, without advanced configuration, GA4 will attribute the acquisition source of most new users as (direct) / (none) or organic. The campaign details simply get lost in the transition through the app store. While Google allows you to manually populate this data by sending a campaign_details event shortly after install, doing so requires additional technical integrations.


3. UTM vs MMP – Why They Are Not the Same

A common misconception is that UTM query parameters in ad links can replace a full MMP integration.

A UTM parameter is merely a static label describing a click source. An MMP is an active attribution engine.

When a user clicks a link with UTM parameters and the app is already installed, a deep link (or App Link/Universal Link) opens it directly. The app reads the UTM parameters and passes them to GA4 – tracking works perfectly.

The issue arises with new installs. The presence of UTM parameters in the ad link does not mean they will magically survive the journey through App Store or Google Play and arrive in the app.

Google Analytics 4 (GA4)

Product & Behavioral Analytics: What does the user do inside the app? How does the onboarding flow perform? Where do they drop off?

  • Tracks product events (screen_view, sign_up, add_to_cart)
  • Cohort analysis and user retention metrics
  • Firebase integration and raw data export to BigQuery
  • Limited out-of-the-box attribution for paid channels

Mobile Measurement Partner (MMP)

Marketing Attribution: Where did the user come from? Which specific ad drove the install? Who gets the conversion credit?

  • Attributes installs to specific ad networks
  • Deduplicates conversions in multi-channel environments
  • Sends real-time conversion postbacks to ad networks
  • Handles Apple ATT, SKAN, and deferred deep linking on iOS

How MMP Attribution Works

The MMP SDK integrates directly with mobile operating systems and ad networks (Meta, Google, TikTok). When a user clicks an ad, the MMP logs the click (and the device identifier). Once the app is installed and launched, the MMP SDK gathers available device signals and queries its server. The system performs matching (either deterministic via Google Play Install Referrer, or probabilistic) to attribute the install, and instantly sends a postback to the winning ad network.

πŸ” Technical Deep Dive: How the Google Play Install Referrer API Works ↓

On Android, Google Play provides a secure API that allows apps to query the store for install details. Upon first launch, the SDK (MMP or Firebase) binds to the local Google Play service using an AIDL (Android Interface Definition Language) interface.

The API response contains details such as:

{
  "install_referrer": "utm_source=facebook&utm_medium=paid_social&utm_campaign=summer_sale&fbclid=...",
  "referrer_click_timestamp_seconds": 1783856200,
  "install_begin_timestamp_seconds": 1783856240,
  "google_play_instant_enabled": false
}

This allows the SDK to link the install to a specific click by verifying the exact timestamp discrepancy between the ad click and the download initiation.


4. iOS, ATT, and SKAdNetwork / AdAttributionKit

While Android attribution is relatively straightforward, iOS became a battlefield after Apple introduced App Tracking Transparency (ATT).

Users must opt-in to tracking. If they select "Ask App not to Track" (which over 60% of users do), the app loses access to the IDFA identifier and is barred from using fingerprinting. To address this, Apple built SKAdNetwork (SKAN), now evolving into AdAttributionKit, as a privacy-preserving attribution framework.

How SKAdNetwork Operates

Apple acts as the attribution referee:

  1. The user clicks an ad digitally signed by the ad network.
  2. Apple records this click at the iOS system level.
  3. After the app is installed and opened, iOS determines if it qualifies for attribution.
  4. Instead of sharing user data, Apple sends a delayed, anonymous postback directly to the ad network or MMP.
πŸ” Technical Deep Dive: Inside a Raw SKAdNetwork Postback ↓

When Apple decides to dispatch an attribution postback (which happens with a random delay of 24 to 48 hours after install or value update), it executes an HTTP POST request to the registered endpoint (e.g., the MMP server). A raw SKAN 4.0 JSON payload looks like this:

{
  "version": "4.0",
  "ad-network-id": "v9wttpbfk9.skadnetwork",
  "transaction-id": "61a34b22-87ff-4375-9c88-12c83ff111a4",
  "campaign-id": "84",
  "source-identifier": "1084",
  "attribution-signature": "MEYCIQCc3v1qH3...",
  "redownload": false,
  "source-app-item-id": 123456789,
  "fidelity-type": 1,
  "coarse-conversion-value": "high",
  "postback-sequence-index": 0
}

Note that the postback contains absolutely no device_id or user_id. The coarse-conversion-value ("high") indicates the user completed a high-value action, and the source-identifier field contains up to 4 digits depending on sample sizes (privacy thresholds).

The Mystery of Conversion Values

Since Apple does not report individual user events (e.g., "purchased a $19 item"), post-install activity is measured using Conversion Values. This is a encoded digit (ranging from 0 to 63 in "Fine" mode, or represented as "low", "medium", "high" in "Coarse" mode).

An example conversion value schema:

  • 0 = app launched (first_open)
  • 5 = user signed up
  • 12 = added product to cart
  • 40 = completed purchase (low value)
  • 60 = premium subscription purchased

Analytics platforms (including Firebase and MMPs) allow you to map these values in their dashboard, while the SDK manages updating the value on-device. Apple transmits the raw value, and the receiving platform decodes it based on your predefined mapping schema.


5. Why Meta Ads, MMP, and GA4 Data Diverge

In a healthy app tracking setup, discrepancies across dashboards are expected. Each platform answers a different question and uses different attribution windows.

Metric / FeatureMeta Ads ManagerMobile Measurement Partner (MMP)Google Analytics 4 (GA4)Apple SKAN
What it reportsInstalls attributed to MetaDeduplicated multi-channel installsFirst open events (first_open)Aggregated postbacks from iOS devices
Attribution ModelClick & View-through (Meta-centric)Cross-channel Last ClickGA4 model (often modeled/data-driven)Aggregated Apple Attribution
User DataFull (within Meta ecosystem)Dependent on ATT opt-in (deterministic/probabilistic)Dependent on user consent & Firebase IDComplete absence of user-level data
Reporting DelayReal-time / ModeledReal-timeReal-time (up to 24-48h in standard UI)Random delay (24-48h for privacy)

Common Sources of Discrepancies:

  • Download vs. Launch: Meta counts an install when a user clicks download in the app store. GA4 only logs the install when the user physically opens the app (first_open) and the SDK initializes.
  • Lack of Cross-Channel Deduplication: If a user clicks a TikTok ad, then a Meta ad, and installs the app, both Meta and TikTok will claim 100% credit (total: 2 installs). An MMP deduplicates this and assigns 1 install to the last click.
  • Attribution Windows: Different systems default to different windows (e.g., 1-day, 7-day, or 30-day click-through).

6. Designing a Rational App Analytics Architecture

Attempting to find a single tool that does everything is a recipe for failure. A mature mobile marketing technology (MarTech) stack divides responsibilities:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        MOBILE ANALYTICS ARCHITECTURE                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ GA4 / Firebase    β”‚ Product usage, user flows, retention, and LTV      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ MMP (AppsFlyer)   β”‚ Paid attribution, deduplication, and fraud checks  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ SKAN / AAKit      β”‚ Privacy-safe iOS tracking and campaign optimizationβ”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Warehouse (BQ)    β”‚ Raw data merging, CRM revenue reconciliation       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Using this architecture, business reporting is clean and actionable:

  1. Product Dashboard (GA4/CRM): Tracks actual product health (active users, conversion funnels, subscription churn, renewals).
  2. Acquisition Dashboard (MMP): Measures paid acquisition efficiency (ROAS, blended CAC, network performance).
  3. Executive Dashboard (DWH): Joins network spend with CRM subscription lifecycles to calculate accurate payback periods.

βœ“
Firebase SDK Probe

Firebase SDK is installed in the system center (app) for Android and iOS.

βœ“
Signal Mapping

Unified event taxonomy is defined (onboarding, sign-up, trial, purchase).

βœ“
Referrer Gravity

Google Play Install Referrer is verified and functioning on Android.

βœ“
Wormholes

Deep linking and deferred deep linking (Universal Links) are configured.

βœ“
ATT & SKAN Shields

The iOS ATT consent prompt is active, and the SKAN schema is mapped.

βœ“
Resource Integration

Subscription payment provider is integrated with the orbiting analytics.

βœ“
MMP Research Station

MMP is integrated with ad networks (planets), and postbacks are set up.

βœ“
Expedition Costs

Ad spend ingestion is configured between ad platforms and the MMP.

βœ“
Event Taxonomy

Unified event taxonomy is defined (onboarding, sign-up, trial, purchase).

βœ“
Install Referrer API

Google Play Install Referrer is verified and functioning on Android.

βœ“
Deep Linking

Deep linking and deferred deep linking (Universal Links / App Links) are configured.

βœ“
ATT & SKAdNetwork

The iOS ATT consent prompt is active, and the SKAN Conversion Value schema is mapped.

βœ“
Payments Integration

Subscription payment provider (e.g., RevenueCat) is integrated with analytics.

βœ“
MMP Integration

MMP is integrated with your ad networks, and postbacks for in-app events are set up.

βœ“
Cost Data Ingestion

Ad spend ingestion is configured between ad platforms and the MMP.


Interactive Attribution Path Map

Below is an interactive map that visually represents the entire user journey and shows what each analytics system sees (GA4, MMP, SKAdNetwork) at every stage. Click a perspective and each node to see the details.

🌌 Want to see a fullscreen simulation of the attribution solar system?

Open the cosmic attribution map β†’

Frequently Asked Questions (FAQ)