How do you set up Adjust or AppsFlyer so the numbers don't lie?
Every ad network in the Gulf mix — Snapchat, TikTok, Meta, Google — will happily grade its own homework, and their four dashboards will claim more combined purchases than your backend ever saw. The MMP (mobile measurement partner) exists to be the single referee: one source of truth for which channel actually earned each install and each riyal of revenue.
But an MMP is only as honest as its setup. This guide covers choosing between Adjust and AppsFlyer, the event taxonomy that makes optimization possible, attribution windows, getting cost and ROAS data flowing correctly, and the quiet configuration gaps that make even expensive measurement stacks lie.
Adjust vs AppsFlyer: how do you choose an MMP for your app?
Both are mature, both are trusted by every major network, and for most Gulf apps the honest answer is: either will work, badly or brilliantly, depending entirely on setup. Choose on practical grounds — pricing model (per-attribution pricing punishes high-volume, low-revenue apps; tier pricing punishes spiky growth), the integrations your stack needs, and what your team or agency already knows how to operate.
Two things matter more than the logo. First, commit early: switching MMPs later resets attribution history and re-opens every network integration, so it is a genuine migration project. Second, do not delay adoption — the day you buy installs from more than one network is the day you need a referee. Firebase or GA4 alone cannot arbitrate paid attribution across networks; that is not what they are for.
Which in-app events should you send to your MMP?
Networks optimize toward the events you send, so the taxonomy is a growth decision, not an engineering afterthought. Aim for 8–12 events that trace the money path, and send revenue with an explicit currency on every monetization event:
- The spine: install (automatic), registration_complete, onboarding_complete, and your app's core activation action.
- The money: add_to_cart or checkout_start where relevant, purchase with revenue and currency, and for subscription apps trial_start, trial_convert and renewal.
- One vertical-specific quality event — e.g. kyc_complete for fintech, first_listing_view for marketplaces — the earliest reliable predictor of a valuable user.
- Naming rules: lowercase snake_case, one identical name across iOS and Android, no version numbers in names, and a written definition for each event so nobody debates what 'activation' means in six months.
- Resist the everything-tracker: fifty events nobody optimizes toward is noise with a subscription fee attached.
How should attribution windows be configured?
Windows decide who gets credit, so inconsistency is invisible bias. A sane, widely used baseline: 7-day click-through and 24-hour view-through for attribution, applied identically to every network — if one channel keeps a 28-day window while others sit at 7, that channel 'wins' comparisons by configuration, not performance.
Set the re-attribution and reinstall windows deliberately too: they decide when a returning user counts as a new acquisition versus a re-engagement, which is exactly the line your win-back campaigns are judged on. And on iOS, know which numbers are probabilistic: for non-consented users, your MMP models attribution — fine for direction, but document it so nobody presents modeled numbers as deterministic truth. Write all window choices in one shared document; the config outlives whoever set it.
How do you get cost and ROAS into the MMP correctly?
Attribution without cost is half a measurement system. Connect each ad platform's cost API to the MMP so spend lands next to the installs and events it bought — that is what turns event counts into eCPI, cost per event and cohort ROAS you can actually allocate budget with.
Then verify two things monthly. Spend parity: the cost the MMP ingested should match each ad manager within a few percent — silent API breaks are common and go unnoticed for weeks. And currency sanity: the MMP reports in one app-level currency while ad accounts may bill in dollars, riyals or euros; if nobody checks which currency a number is in, your 'ROAS' can be off by the exchange rate and no one will know why the board deck looks odd.
What are the common gaps that make MMP data lie?
Almost every broken measurement stack we see fails in the same handful of places:
- Purchases fired only client-side: refunds, failed payments and duplicate taps all count as revenue. Send critical revenue events server-to-server from your backend.
- The same purchase counted twice — once by the app SDK, once by a web checkout or backend integration — inflating ROAS on every channel at once.
- Untracked channels: influencer links, CRM pushes or offline QR codes with no tracking links, silently inflating 'organic' and distorting every paid comparison.
- SKAN conversion values left at defaults, so iOS campaigns report installs but say nothing about quality.
- Deep links and web-to-app flows unmeasured, so your best-converting journey looks like organic magic.
- No validation loop: the monthly 15-minute check — MMP purchases vs backend orders, MMP spend vs ad managers, organic share trend — is what catches all of the above before it costs a quarter's budget.
How Ashayrah sets up measurement for your app
A trustworthy MMP setup is the foundation of every UA engagement we run — we do not scale spend on numbers we have not verified.
-
The audit
We inspect your current attribution end to end — events, windows, cost ingestion, SKAN mapping, and MMP-versus-backend deltas — and hand you a gap list ranked by how much each one distorts decisions. Free, 20 minutes, yours to keep.
-
The launch
Within 14 days: a clean event taxonomy live on both platforms, windows unified across networks, cost APIs connected and verified, server-side revenue events for the money path, and a validation checklist your team can run monthly.
-
The scale
Weekly optimization on data we can defend: budget moves on cohort ROAS from the MMP, discrepancies against network dashboards are monitored, and any drift beyond a few percent triggers a fix before it triggers a bad decision.
Questions people also ask
Do I need an MMP if I already have Firebase or GA4?
Yes, once you buy installs from more than one network. Firebase and GA4 are product analytics — they do not arbitrate paid attribution across Snapchat, TikTok, Meta and Google, ingest network costs, or handle SKAN. The MMP is the referee; analytics tools are the microscope. Growing apps need both.
What is the real difference between Adjust and AppsFlyer?
Capability-wise they are close: both handle multi-network attribution, SKAN, cost ingestion and fraud filtering. The practical differences are pricing structure, specific integrations, and operator familiarity. The quality of your setup — events, windows, validation — affects your data far more than which of the two you pick.
Why does my MMP show different numbers than Google or Meta dashboards?
Each network claims every conversion its ads touched, using its own windows and modeled estimates — sum the dashboards and you get more conversions than reality. The MMP applies one set of rules across all channels, so its totals reconcile with your backend. Expect gaps against every network dashboard; worry only when the gap trends wider.
How long does a proper MMP setup take?
With engineering access, a clean setup fits inside two weeks: SDK and event taxonomy in days, network integrations and cost APIs alongside, then a validation pass against real transactions before scaling spend. What takes months is not the work — it is nobody owning it.
Which attribution window should I use?
A 7-day click-through and 24-hour view-through window is a sane default that most networks and MMPs support cleanly. The exact number matters less than uniformity: identical windows on every channel, documented in writing, changed only deliberately — otherwise cross-channel comparisons are biased by configuration.