AppsFlyer Wins RFI +35% £17.3M Revenue Misattributed Without MMP iOS Drives 69% App Revenue ATT Opt-In Unlocks 5–10% Incremental Growth 9M App Users — 7.5M Dormant UDL + GCD Both Required for SRN Traffic AppsFlyer Wins RFI +35% £17.3M Revenue Misattributed Without MMP iOS Drives 69% App Revenue ATT Opt-In Unlocks 5–10% Incremental Growth 9M App Users — 7.5M Dormant UDL + GCD Both Required for SRN Traffic
Mobile Measurement Strategy · June 2025

Telco UK ×
Apps
Flyer

From £17.3M misattributed revenue to precision measurement. Complete MMP evaluation, ATT strategy, deep linking and growth roadmap for Telco UK.

// KEY_METRICS :: TELCO_UK_APP_2025
£17.3M
Revenue Misattributed (12 months)
69%
iOS Share of App Revenue
42%
AppsFlyer RFP Lead vs Competitors
83%
of 9M App Users Currently Dormant
// 01 · MMP EVALUATION
RFI & RFP Results

100+ RFI responses across 9 categories. 5-vendor RFP. One clear winner.

WINNER
// TOP PERFORMER
AppsFlyer
Attribution Accuracy98/100
Deep Links96/100
Ad Fraud Prevention94/100
Data Privacy & Security97/100
Reporting & Insights95/100
RFI LEAD vs ADJUST
+35%
AppsFlyer scored 35% higher in RFI evaluation
RFP LEAD vs ALL
+42%
AppsFlyer outscored all vendors in RFP stage
// RUNNER UP
Adjust
Attribution Accuracy74/100
Deep Links68/100
Ad Fraud Prevention70/100
Reporting & Insights72/100
OVERALL RFI SCORE 71/100
Branch
63/100
Singular
58/100
Kochava
52/100
// RFI CATEGORIES ASSESSED
Attribution Accuracy
Deep Links
Owned Channels
CTV & Gaming
Data Privacy
Ad Fraud
Data Clean Room
Reporting
Operations & Support
// 02 · ATT BUSINESS CASE
The ATT Imperative

With 55% iOS opt-out, ATT is still essential — iOS drives 69% of Telco UK app revenue.

OPT+
ATT Opt-In: Deterministic Attribution
Real-time IDFA enables full campaign reporting. Unlocks ML models for NBA prediction, fraud prevention, LTV cohorts, and in-platform bid optimization.
45% CONSENT RATE
OPT−
ATT Opt-Out: Aggregated Only
Without IDFA: revenue event only, aggregated campaign-level reports. Blind spots in Retargeting, fraud detection hampered, LTV prediction degraded.
55% OPT-OUT TODAY
SKAN
SKAN: iOS Attribution Beyond ATT
Aggregated iOS attribution without IDFA. Industry templates for Telecoms. Hybrid ATT + SKAN is Telco UK's optimal posture.
COMPLEMENTARY
ROI
5–10% Incremental Lift
ATT deployment restores iOS campaign visibility, bridges data gaps for Hybrid attribution, leverages consent data for audience targeting.
STRATEGIC IMPERATIVE
69%
iOS Share of App Revenue
72%
iOS Share of App Purchases
55%
Current ATT Opt-Out Rate
iOS Spend Increase EU 2025
// 04 · DEFERRED DEEP LINKING
UDL vs GCD

Two methods, two scenarios. Both must be implemented — omitting either breaks significant user journeys.

UDL
Unified Deep Linking
// OWNED CHANNELS · NON-SRN
  • Email, push, owned web, QR codes
  • Paid media excluding Google/Meta/Snap/TikTok/Amazon
  • Returns: deep_link_value + deep_link_sub1–10
  • Android: onDeepLinking() in DeepLinkingListener
  • iOS: didResolveDeepLink() in DeepLinkDelegate
if status == "FOUND":
  route(deep_link_value)
elif status == "NOT_FOUND":
  # fallback to GCD
GCD
Get Conversion Data
// SRN MEDIA · UDL FALLBACK
  • Critical for Google, Meta, Snap, TikTok, Amazon
  • Activates when UDL returns NOT_FOUND or >15min click-to-install
  • Returns: media_source, campaign, af_status, af_sub1–5
  • Always check is_first_launch: true + af_status: Non-organic
onConversionDataSuccess(data):
  if data.af_status != "Non-organic": stop
  if data.is_first_launch != true: stop
  route(mapToDeepLinkObject(data))
// CRITICAL — Both UDL and GCD are required. GCD is the essential fallback for all SRN traffic and when click-to-install exceeds 15 minutes.
// 05 · ONE SCREEN VISION
Growth & Re-engagement

Turning 7.5M dormant users into active revenue through precision targeting, deep linking and incremental measurement.

RE-ENG
Re-engagement

Win back 83% dormant users with personalised push via OneLinks, location targeting, upsell and cross-sell

ACQUI
Acquisition

Smart Banner (15% NOI), Smart Script (37% CTI), email-to-app (9.5% install rate), DPA via OneLinks

DATA
Bespoke Reporting

One source of truth: web + app + CTV. Custom KPI dashboards, retention curves, LTV event analysis

DCR
Data Clean Room

Privacy-first collaboration for Meta, TikTok view-through. Omnichannel measurement at SKU level

£17.3M
MISATTRIBUTED REVENUE · GA4-ONLY
Revenue Lost to Measurement Gaps

Over 12 months £17.3M in app revenue was inaccurately attributed. GA4 alone cannot resolve cross-platform attribution, walled garden data, or SRN deduplication.

// 06 · IMPLEMENTATION ROADMAP
Next Steps

Phased deployment from SDK integration through full measurement maturity.

// PHASE 01 · FOUNDATION
SDK Integration & ATT Deployment
Core SDK, ATT prompt, basic attribution live. MMP onboarding alignment.
AppsFlyer SDKATT Prompt DesignBasic Attribution
// PHASE 02 · DEEP LINKING
OneLink + UDL + GCD Configuration
Branded CNAME. Android App Links + iOS Universal Links. UDL and GCD QA tested.
CNAME DNS SetupUDL ImplementationGCD FallbackQA TestingPush LinksEmail-to-App
// PHASE 03 · INTEGRATIONS
Partner Integrations + Re-engagement
All SRN + CRM integrations live. Smart Banner, DPA via OneLinks. Braze re-engagement flows.
Google Ads / DV360Meta + TikTokApple Search AdsBraze IntegrationSmart BannerRTG Campaigns
// PHASE 04 · MATURITY
Data Locker + Advanced Analytics + DCR
Data Locker to GCS, SKAN schema, incrementality, Data Clean Room, MMM.
Data Locker → GCSSKAN SchemaAudience ActivationIncrementalityDCR SetupMMM Integration
// 07 · PARTNER INTEGRATIONS
Integration Playbook

Setup requirements, event mapping and key gotchas for every partner in Telco UK's media mix. Filter by type below.

Self-Reporting Networks SRN · GCD REQUIRED
Google Ads
SRN
// UAC · PMAX · SEARCH · DISPLAY
  • Enable Google Ads as integrated partner in AppsFlyer dashboard
  • Link account via Google MCC — requires admin access
  • Configure in-app event postbacks: install, purchase, signup
  • Enable auto-tagging (gclid) in Google Ads settings
  • Import AppsFlyer events into Google Ads for Smart Bidding
  • GCD required — Google does not support direct UDL resolution
⚠ Smart Bidding needs 30+ conversions/month per campaign
DV360
SRN
// PROGRAMMATIC · VIEW-THROUGH · CTV
  • Connect via Google Marketing Platform — same MCC link as Google Ads
  • Enable view-through attribution window: 24h recommended for Telco
  • Impression tracking pixel placed on DV360 creatives
  • Floodlight activity tags sync for cross-channel deduplication
  • CTV attribution requires AppsFlyer CTV connector (separate SKU)
  • Configure postbacks for PDP, checkout, plan_upgrade events
ℹ DV360 impression-to-install attributed separately from UAC
Apple Search Ads
SRN
// ASA · SEARCH MATCH · LAT USERS
  • Integrate via Apple Search Ads API — requires Apple Ads account linkage
  • Add AdServices.framework to iOS app for attribution token support
  • Configure AppsFlyer ASA integration: API key + org ID
  • LAT users: attribution via Search Ads Attribution API only
  • Attribution window: 30-day click (ASA default) — align with AppsFlyer
  • Use keyword_id + ad_group_id for granular keyword reporting
✓ ASA critical for iOS — no IDFA needed, highest-intent install channel
Meta
SRN
// AEM · DCR · ADVANTAGE+ · RTG
  • Enable Meta as integrated partner — enter Meta App ID and App Secret
  • Configure AEM (Aggregated Event Measurement) for iOS 14.5+ campaigns
  • Set up Meta Data Clean Room (Advanced Analytics) for view-through
  • Map AF events to Meta Standard Events: Purchase, CompleteRegistration
  • Advantage+ Shopping campaigns require CAPI server-side postback
  • GCD is the ONLY deferred deep link method for Meta traffic
✗ Meta blocks UDL entirely — GCD fallback is non-negotiable
TikTok
SRN
// TT4B · SAN · VIEW-THROUGH · SPARK
  • Connect TikTok for Business account via AppsFlyer TikTok integration
  • Enter TikTok App ID from TikTok Ads Manager → Assets → Apps
  • Enable TikTok Pixel for web-to-app attribution flow
  • Configure in-app event postbacks with TikTok event mapping
  • View-through attribution window: 24h recommended
  • GCD required — confirm is_first_launch check before routing
⚠ TikTok Spark Ads require separate Spark token setup
Snapchat
SRN
// SNAP AUDIENCE NETWORK · SAN
  • Enable Snap as integrated partner — enter Snap App ID
  • Configure SAN postback for install and re-engagement events
  • Set up Snap Pixel for web traffic alongside app campaigns
  • View-through window: 1 day — align with AppsFlyer settings
  • GCD required — Snap is an SRN
  • Enable deferred deep linking via af_dp parameter in Snap ad URLs
ℹ Snap skews 18–34 — relevant for youth SIM-only acquisition
Amazon Ads
SRN
// DSP · SPONSORED · FIRE TV
  • API credentials via Amazon Attribution console
  • Amazon DSP for re-engagement and prospecting campaigns
  • Fire TV install attribution requires separate CTV connector config
  • Configure impression + click tracking macros in Amazon ad tags
  • GCD required — Amazon is an SRN
  • IAP events require Amazon IAP SDK alongside AppsFlyer
⚠ Amazon Attribution and DSP are separate products — link both
Standard Networks CLICK-BASED · UDL RESOLVES
Reddit Ads
STANDARD
// CLICK · CONVERSATION · APP INSTALL
  • Enable Reddit as integrated partner — enter Reddit Pixel ID + Conversion Token
  • Add af_siteid=reddit macro to Reddit ad link parameters
  • Configure postback events: install, account_created, plan_upgrade
  • Click-through attribution window: 7 days (Reddit default)
  • UDL resolves correctly — no GCD override needed
  • Exclude organic via af_status=Non-organic in reporting
✓ Reddit strong for tech-savvy early adopters — 5G and HBB campaigns
Affiliate Networks POSTBACK URL · COMMISSION
Rakuten
AFFILIATE
// AFFILIATE · PUBLISHER · CASHBACK
  • Set up Rakuten as custom partner — no native integration template
  • Generate postback URL from AppsFlyer: install + revenue events
  • Pass Rakuten click ID via af_sub1 for publisher-level reporting
  • Configure Rakuten tracking links with AppsFlyer redirect URLs
  • Set deduplication window: last-click wins vs affiliate attribution
  • Reconcile Rakuten commission reports vs AppsFlyer installs monthly
⚠ Cashback publishers may inflate install counts — apply Protect360
CRM & MarTech BI-DIRECTIONAL SYNC
Braze
CRM
// PUSH · IN-APP · EMAIL · CANVAS
  • Enable AppsFlyer–Braze integration: Braze REST API Key + endpoint
  • Forward AF in-app events → Braze Custom Events for trigger logic
  • Sync AF audience segments to Braze for push and in-app targeting
  • Deep link Braze push notifications via OneLink — use af_dp parameter
  • Connected Content in Braze pulls AF attribution data into messages
  • Braze Canvas triggered by AF dormancy signal for re-engagement
✓ Braze + AppsFlyer: highest-value pairing for 7.5M dormant user re-engagement
Salesforce MC
CRM
// SFMC · MOBILE STUDIO · JOURNEY BUILDER
  • Connect via SFMC connector — OAuth 2.0 auth flow
  • Push AF install and LTV events into SFMC Contact Builder data extensions
  • Trigger Journey Builder entry events based on AF install signals
  • MobilePush SDK shares device tokens with AppsFlyer for attribution
  • Deep link SFMC push via OneLink URL in MobilePush message config
  • Reconcile SFMC engagement data with AF cohort reports for LTV modelling
ℹ SFMC push attribution requires pid=salesforce_int on all tracked links
// 08 · FAQ & BEST PRACTICES
Knowledge Base

Data Locker setup, discrepancy explanations and integration guidelines for Telco UK's technical teams.

// JUMP TO
Data Locker // RAW DATA EXPORT

Delivers raw AppsFlyer data — installs, in-app events, clicks, impressions, cost — directly to cloud storage. Critical for Telco UK's custom BI, LTV modelling, and GDPR workflows.

Google Cloud
// GCS → BIGQUERY → LOOKER
01
Grant bucket access: GCP Console → Cloud Storage → IAM → Add [email protected] with Storage Object Admin role
02
Configure in AppsFlyer: Settings → Data Locker → New Bucket → GCS → Enter bucket name, region europe-west2, folder prefix
03
Select report types: Installs, In-App Events, Uninstalls, Retargeting, Cost, Impressions, Clicks — enable ALL for full data fidelity
04
Delivery schedule: Hourly (recommended). Files land as gzipped CSV partitioned by dt=YYYY-MM-DD/h=HH/
05
BigQuery pipeline: Cloud Function → BQ load job. Partition on event_time, cluster on media_source + app_id
06
Connect Looker Studio: Point to BigQuery dataset. AppsFlyer LookML blocks available via partner marketplace
gs://telcoprovider-af-datalake/
  t=installs/dt=2025-06-15/h=14/data.csv.gz
  t=in_app_events/dt=2025-06-15/h=14/data.csv.gz
Amazon S3
// S3 → ATHENA → REDSHIFT
01
Create S3 bucket: Region: eu-west-2 (London). Enable versioning + SSE-KMS encryption. Block all public access.
02
Create IAM policy: Grant arn:aws:iam::661170127613:root with s3:PutObject and s3:GetBucketLocation on your bucket ARN
03
Configure in AppsFlyer: Settings → Data Locker → New Bucket → S3 → Enter bucket name, ARN, prefix. AppsFlyer verifies with test write.
04
Athena integration: Create Glue Crawler to catalogue S3 partitions. Query via Athena. Use partition projection for performance.
05
Redshift Spectrum: External schema in Redshift pointing to Glue catalogue for SQL analytics + Telco UK CRM data joins
06
Cost control: S3 lifecycle rules — files older than 90 days to Glacier. Use partition pruning in all Athena queries.
"Principal": {"AWS": "arn:aws:iam::661170127613:root"},
"Action": ["s3:PutObject", "s3:GetBucketLocation"],
"Resource": "arn:aws:s3:::telcoprovider-af-raw/*"
// KEY DATA LOCKER FIELDS — INSTALLS & IN-APP EVENTS
appsflyer_idUnique AF device ID
media_sourceAttributed channel
campaignCampaign name / ID
event_nameInstall or custom event
event_timeUTC timestamp
event_revenueRevenue value (GBP)
idfa / gaidDevice advertising ID
is_retargetingRe-engagement flag
install_timeFirst install timestamp
country_codeISO 3166 (GB)
af_keywordsKeyword from ASA/Google
contributor_1–3Multi-touch chain
Data Discrepancy FAQ // EXPLAINED

Discrepancies between AppsFlyer and ad platform dashboards are normal — but understanding root causes is critical for confident budget decisions.

COMMONWhy do AppsFlyer installs differ from Google Ads conversions?
+
  • Attribution window mismatch: Google Ads defaults to 30-day click / 1-day view. AppsFlyer defaults to 7-day click. Align both platforms before campaigns.
  • Cross-device installs: Google may attribute device 2 install to device 1 click. AppsFlyer attributes to the device where the app was installed.
  • Organic installs: Google counts brand-search installs post-ad-impression. AppsFlyer marks these as organic.
  • Fraud filtering: Protect360 removes installs Google counted. Fraudulent traffic never appears in AppsFlyer dashboards.

Resolution: Accept 5–15% discrepancy as normal. Align attribution windows in both platforms.

HIGH IMPACTMeta and AppsFlyer show very different install counts — why?
+
  • AEM aggregation: Meta receives limited conversion events from ATT opt-out users. Remaining conversions are modelled, not deterministic.
  • View-through attribution: Meta counts 1-day view impressions as attributable. AppsFlyer requires explicit view-through window config.
  • Walled garden data: Meta does not share raw impression/click data. Full reconciliation requires Meta's Data Clean Room.
Expected discrepancy: 20–40% on iOS traffic post-ATT rollout

Resolution: Activate Meta Advanced Analytics (DCR). Use AppsFlyer Aggregated Advanced Privacy (AAP) report.

BILLINGCost figures in AppsFlyer don't match ad platform invoices
+
  • Currency conversion: AppsFlyer converts costs to USD at daily exchange rates. Platform invoices may use GBP billing.
  • Cost API timing: Spend data has a 24–48h delay. Intraday spend in AppsFlyer is estimated, not final.
  • VAT exclusion: AppsFlyer pulls net spend — invoices include VAT. Always compare net-of-VAT figures.
  • Credit adjustments: Invalid click refunds applied post-invoice. Raw cost data won't reflect these retroactively.

Resolution: Use AppsFlyer as directional cost data only. Reconcile final budgets against platform invoices.

SDK ISSUEAppsFlyer shows installs but no in-app events are firing
+
  • Events not called: Developer has not called logEvent() at the correct journey point — verify with Engineering.
  • Event naming mismatch: Event names are case-sensitive. "purchase" ≠ "Purchase". Confirm exact strings match SDK and AppsFlyer dashboard.
  • Partner postback not enabled: Events logged to AppsFlyer but the postback to the ad partner is not switched on in Integrated Partners settings.
  • iOS consent: ATT opt-out users — events appear in aggregated reports only, never user-level raw data.
Debug: SDK → setDebugLog(true) + use AppsFlyer SDK Integration Tester app
DEEP LINKDeep links not routing to the correct in-app page
+
  • Step 1 — Verify UDL: Confirm onDeepLinking() / didResolveDeepLink() is being called. Log DeepLinkResult status.
  • Step 2 — Check GCD for SRN: Google/Meta/TikTok/Snap/Amazon UDL returns NOT_FOUND by design — GCD must handle routing.
  • Step 3 — Validate deep_link_value: Use AppsFlyer Link Validator. Confirm value is set in OneLink URL and readable in callback.
  • Step 4 — AASA file (iOS): Verify apple-app-site-association accessible at telcoprovider-app.onelink.me/.well-known/ with correct bundle ID.
  • Step 5 — Intent filter (Android): Confirm android:autoVerify="true" and Digital Asset Links JSON reachable at your domain.
adb shell am start -W -a android.intent.action.VIEW -d "https://telcoprovider-app.onelink.me/1234/?deep_link_value=upgrade/5G" com.telcoprovider.app
STRATEGYWhen should we use multi-touch attribution vs last-click?
+
  • Last-click (default): 100% credit to last touchpoint. Simple but undervalues upper-funnel channels like DV360 and Snapchat.
  • Multi-touch (MTA): Distributes credit across all touchpoints. Requires 10k+ installs/month for reliable modelling.
  • Contributor fields: contributor_1–3 in Data Locker capture prior touchpoints without changing last-click for ad platform signals.
  • Data-driven (DDA): Available via AppsFlyer + Google UAC. Requires 300+ installs and 3,000+ ad interactions in 30 days.

Recommendation: Start last-click. Use contributor fields in Data Locker for MTA analysis. Graduate to full MTA at 5,000 installs/month.

Integration Best Practices // GUIDELINES

Critical guidelines for a clean, reliable AppsFlyer integration at Telco UK. Follow these from day one to avoid technical debt.

01
Align Attribution Windows Before Launch

Set identical click and view-through windows across AppsFlyer AND all integrated partners before any paid campaigns. Misaligned windows are the #1 cause of discrepancy escalations. Recommended: 7-day click, 1-day view.

02
Always Test in Sandbox Before Production

Use a separate AppsFlyer App ID for QA. Test every deep link scenario — direct, deferred, UDL flow, and GCD flow for each SRN. Never push untested deep link code to production.

03
Standardise Event Naming Taxonomy

Lock a global event taxonomy before SDK integration. Snake_case: plan_upgrade, sim_activation, bill_payment, app_open_d7. Agreed by Marketing, Analytics and Engineering before any build.

04
Implement Both UDL and GCD from Day One

UDL alone silently breaks for all SRN traffic. Both methods are required — not optional. GCD fallback must always check is_first_launch and af_status before routing.

05
Enable Protect360 Fraud Protection

Activate on all campaigns from launch. Configure real-time blocking for install hijacking, click flooding, fake devices, and bot traffic. Review blocked installs weekly.

06
Separate App IDs by Environment

Maintain distinct AppsFlyer App IDs for iOS Production, Android Production, iOS QA, Android QA. Never mix QA events with production data.

07
Data Locker as Single Source of Truth

Route all raw data to GCS from day one. Dashboard data retained for 24 months only. Raw Data Locker files retained indefinitely and enable GDPR deletion workflows.

08
GDPR & Data Retention Governance

Ensure DPA is signed before go-live. Configure user deletion API for DSR workflows. Set event-level retention to 6 months in AppsFlyer. Apply GCS lifecycle rules aligned with Telco UK's 13-month policy.