Madar AI
← Back to blog
Technical

Building a subscription app in MENA? Here are the 5 metrics your AppsFlyer dashboard hides

VPN attribution loss, iOS ATT decline, TikTok MENA gaps, Snapchat KSA attribution holes, and ISP-level S2S postback failures — five things the dashboard quietly doesn't tell you, and what to look at instead.

Building a subscription app in MENA? Here are the 5 metrics your AppsFlyer dashboard hides

You log into AppsFlyer every morning. ROAS by network, retention by cohort, MMP-attributed installs by geo. The dashboard looks complete. But run the same audit across MENA subscription apps for long enough and the same five blind spots appear in every account.

These are not “AppsFlyer is broken” issues. They are structural mismatches between the assumptions AppsFlyer’s pipeline was designed around and the way MENA actually consumes mobile internet. The dashboard doesn’t lie. It just leaves out the part of the story that matters most in this region.

Here are the five we see most often, with the signal you should look at in place of the dashboard number.

1. VPN-attributed installs that look organic

What’s hidden: A meaningful share of users in Saudi Arabia, UAE, and Egypt routinely browse through a VPN, sometimes to access content geo-blocked at the carrier level, sometimes by default on company devices, sometimes just because their browser ships with one.

Why AppsFlyer misses it in MENA: When a paid click lands on a VPN-routed device, the IP-based geo of the click and the IP-based geo of the install can land in different countries on different days. AppsFlyer attributes based on the device-and-time signal it has, which means a Saudi user clicking a Snapchat ad on a VPN endpoint in Frankfurt and installing the next morning on a domestic IP can end up bucketed as a German install with no clean tie back to the original paid click. The MENA paid spend is debited, but the install shows up in your dashboard as a different geo’s organic.

What to look at instead: Cross-reference your install count by device locale (set in iOS / Android system settings) against your install count by MMP-attributed geo. A persistent gap where locale_country = SA is larger than attributed_country = SA is your VPN ghost. In Madar we model this gap weekly and reattribute the difference back to the paid channels with the most matching click velocity in the source geo. If you do it manually, look at the locale-vs-attributed delta and treat the missing volume as a confidence-adjusted multiplier on each network’s stated install count.

2. iOS ATT opt-in is falling, and your conversion rates are silently re-baselining

What’s hidden: When iOS 14.5 shipped, the industry-wide ATT opt-in rate settled around 25% globally. In MENA it has trended lower in the years since, and we have seen audits where the Saudi and UAE iOS opt-in rate is materially below the global figure. Every percentage point of opt-in lost compresses the addressable signal SKAN can return on your campaign.

Why AppsFlyer misses it in MENA: AppsFlyer reports campaign performance in aggregate. It does not surface “your iOS ATT opt-in rate fell from 19% to 14% over the last 30 days, so the SKAN data you are now optimising on represents a smaller and more biased sample than it did last quarter.” The dashboards keep rendering. The numbers under them are quietly getting noisier.

What to look at instead: Pull your ATT opt-in rate from your SDK telemetry as a tracked metric over time, segmented by country and iOS version. Watch the trend. When opt-in drops, automatically expand your confidence interval on SKAN-attributed ROAS for that segment before making spend reallocation decisions. The drop is most aggressive on iOS 17+ where Apple’s ATT prompt UX changed.

3. TikTok MENA campaign data has structural gaps

What’s hidden: TikTok’s MENA business is growing faster than its attribution infrastructure has matured. We routinely see TikTok-attributed installs in AppsFlyer that the TikTok Ads Manager itself reports differently — sometimes by 15-30% within the same date window, sometimes more. The disagreement is largest on KSA and Egypt campaigns and largest on creator-tagged content where the click path is more complex than a standard ad placement.

Why AppsFlyer misses it in MENA: TikTok’s S2S postback to AppsFlyer is rate-limited at peak hours and the dedup rules across creator content vs paid placements are still maturing on TikTok’s side in this region. AppsFlyer reports what TikTok sends it; what TikTok sends is incomplete.

What to look at instead: Run a side-by-side reconciliation between AppsFlyer’s TikTok-attributed install count and TikTok Ads Manager’s reported install count for the same campaign and date window. Take the larger of the two as your operational truth. When the gap is over 20%, treat TikTok ROAS in your dashboards as a lower bound, not a point estimate. Most teams over-correct in the wrong direction here — they see “TikTok ROAS = 2.1x” in AppsFlyer and pull spend, when TikTok’s own platform sees the same campaign at 2.8x.

4. Snapchat KSA attribution holes

What’s hidden: Snapchat is the dominant social ad platform in Saudi Arabia by daily reach. It is also the platform with the most fragmented attribution signal in MENA. Snap-attributed installs in AppsFlyer routinely under-count true Snap-driven installs, especially when the user clicks an ad mid-Story and returns to install hours later. The view-through window is short by default and the click-through often gets attributed to a later touchpoint (typically organic search or a different paid channel) that intervenes.

Why AppsFlyer misses it in MENA: AppsFlyer’s default attribution windows were calibrated against globally-typical click-to-install latency. Snapchat usage in KSA is heavy at very specific times of day — late evening, post-iftar during Ramadan — and the click-to-install gap there is often longer than the default click attribution window. Installs that should have been credited to Snapchat fall outside the window and get re-credited to whatever channel had a touchpoint inside it.

What to look at instead: Extend your Snapchat click attribution window in AppsFlyer settings to 7 days specifically for KSA campaigns, and run a modelled-uplift comparison: hold Snapchat spend constant for two weeks in one geo, push it in another, and measure the organic delta. The lift in “organic” installs is your hidden Snapchat attribution.

5. S2S postback failures from local ISPs

What’s hidden: Server-to-server postbacks — the mechanism Meta, Google, TikTok, and others use to confirm conversion events back to AppsFlyer — do fail. In MENA specifically, we have seen consistent postback failure rates that exceed the global baseline on certain local ISP egress paths, particularly for Saudi STC and Egyptian Vodafone subscribers during peak hours.

Why AppsFlyer misses it in MENA: A failed postback never shows up in the dashboard as “we lost a conversion signal.” It shows up as “this campaign appears to have lower conversion than its peers.” The dashboard cannot distinguish “the campaign isn’t converting” from “the conversion signal didn’t reach us.” Both produce the same downstream number.

What to look at instead: Pull AppsFlyer’s raw postback delivery logs from the API (not the UI) and segment by ISP. If you see failure rates over 5% on any ISP, your stated ROAS for that ISP’s user base is artificially low. Either treat that segment’s ROAS as a floor, or push the network to switch from S2S to client-side event reporting for that campaign.

Why these five matter together

Any one of these five can move your reported ROAS by 10-20% in either direction. When they stack — which they routinely do in audit work — the aggregate distortion between “what AppsFlyer says” and “what is actually happening in your account” can be material enough to flip a profitable campaign into a paused one or to keep an unprofitable one running.

We built Madar to do this reconciliation as the first thing it does when you connect an app. It pulls the raw postback logs, the SKAN aggregates, the platform-direct numbers from each ad network, and the device-locale signal, and gives you a single source-of-truth view of what each campaign is actually delivering — with confidence intervals on every attribution, because honest attribution always comes with a confidence interval.

If any of the five blind spots above sounds familiar, the live demo runs this reconciliation on your real account in about 10 minutes.