On the web you can get away with a badly implemented conversion tag. In apps you cannot: if measurement is wrong, there is no campaign. The system optimises against what reaches it, and what reaches it comes from an SDK living inside your application. This is the lesson that decides the outcome of all the others.
The three measurement routes
| Route | What it measures | When to choose it |
|---|---|---|
| Google Play conversions | Installs and in-app purchases (Android), with nothing extra to install | Android-only apps, simple setups, no other paid channels |
| Firebase / Google Analytics for apps | Installs and any event you define, on Android and iOS | The standard when Google is your main channel |
| Attribution provider (MMP) — AppsFlyer, Adjust, Singular, Branch | The same, but unifying every channel (Google, Meta, TikTok, Apple Ads…) with its own anti-fraud | When you invest across channels or the budget is serious |
The practical rule: if you advertise on more than one channel, you want an MMP. Without one, each platform claims what it can and the sum of "installs from each channel" cheerfully exceeds your real installs. The MMP is the referee that decides who gets credited with each one.
Events: your value ladder
Defining events is exactly the Lead Scoring job applied to an app. A typical ladder:
- Install — the "raw lead": plentiful, cheap and not very informative on its own.
- First open / sign-up / tutorial completed — an early signal that there is a real person behind it.
- Value action — level completed, content consumed, cart, trial started.
- Purchase / subscription, with its amount — the truth of the business.
Rules inherited from the Lead Scoring module that apply identically here: the event you optimise for must happen often enough for the system to learn; easy events must not weigh more than valuable ones; and the value you send is better kept stable (an average or banded value) so one atypical purchase doesn't send the algorithm into euphoria.
Counting installs is not measuring
Optimising for installs means optimising for the cheapest, least committed metric in the funnel: you get plenty, cheap… and often useless. It is the exact equivalent of optimising a lead campaign for "form submitted" without checking whether anyone buys. The difference between a profitable app project and one that burns money is almost never in the campaign: it is in which event you set as the goal.
Attribution sharing (and not counting twice)
Google Ads and your MMP can exchange information about which installs come from your campaigns. Two practical warnings:
- Don't duplicate conversions: if the same event arrives through both Firebase and the MMP, decide which one rules and disable the other as primary, or you will count twice and your CPA will be fiction.
- Different windows and models between systems mean the numbers will NEVER match 100% across Google Ads, Firebase, the MMP and the store console. Pick one source as official for decisions and use the rest as a cross-check.
💡 Ninja trick: before launching, run the "user zero" test: install the app yourself from a test ad, walk the full journey through to purchase and verify by name that every event appears in Firebase/MMP and reaches Google Ads with its value. Half an hour that saves weeks of junk data.
⚠️ Pitfall: measuring the purchase but not its amount. Without value you cannot use return-based bidding (lesson 5) and you will treat the user who spends €3 the same as the one who spends €300.
What you should remember
- Three routes: Google Play, Firebase or an MMP; with several channels, an MMP.
- Define an event ladder, not just the install.
- The target event must be frequent; the value, stable.
- Watch out for double counting and pick one official source of truth.