EmCube
Home/Case Studies/HappyShyPeople · Web-to-App Attribution
CASE STUDY

How HappyShyPeople turned untracked paid web traffic into a fully attributed web-to-app funnel

Meta and Google campaigns were sending real traffic to the site, but none of it mapped back to app installs, or to the ad platforms for optimization.

6
channels now attributing correctly
2
ad platforms now receiving install-level postbacks
2 days
to implement the web-to-app attribution
ENGAGEMENT:Web-to-app attributionAppsFlyerOneLink + Cross-DomainSKAN 4.0 + ATTMeta Ads + Google Ads
THE SITUATION

Paid traffic was landing on the website. None of it was reaching AppsFlyer.

HappyShyPeople was running Meta and Google campaigns straight to their website. The onboarding flow ended in a prompt to download the app, but nothing connected the two. There was no way to tell which install came from which ad, and no signal was going back to the ad platforms to optimize toward installs at all.

The goal was simple to state and hard to build: track every install back to the exact campaign that drove it, across web and app, on both iOS and Android.

WHAT THEY CAME WITH
Meta and Google ads running to a website with no attribution layer
AppsFlyer installed on the app, but with no bridge from the web side
No visibility into which channel, or which campaign, was actually driving installs
THE GOAL

Map every install back to its source, on web and app, iOS and Android, and feed that signal back to the ad platforms so they could optimize toward it.

WHAT WE FOUND

Four gaps. Each one breaking a different part of the funnel.

Nothing was broken in an obvious way. The campaigns were live, the app existed. The connective tissue between them was just never built.

FINDING 01
NO WEB-TO-APP ATTRIBUTION LAYER

Meta and Google campaigns pointed to the website. Nothing on the app side knew a campaign had sent that user. Installs and ad clicks lived in two disconnected worlds.

IMPACT: Every install looked organic, regardless of source
FINDING 02
SMARTSCRIPT MISSING FROM THE LANDING FLOW

AppsFlyer's SmartScript, the mechanism that captures click data on the web and carries it through to the app install, wasn't implemented. Without it, cross-domain tracking from the landing page to the app domain had nothing to stitch together.

IMPACT: Click data never survived the jump from web to app
FINDING 03
ATT NOT IMPLEMENTED

App Tracking Transparency wasn't configured at all, so there was no structured way to capture, or work around, iOS consent state.

IMPACT: No iOS attribution path, consented or not
FINDING 04
SKAN LEFT UNCONFIGURED

SKAN was never set up to model conversions for users who declined tracking. The exact scenario SKAN exists to solve on iOS.

IMPACT: Non-consented iOS installs were completely invisible to the ad platforms
SCREENSHOTBefore · AppsFlyer dashboard. Attribution snapshot
appsflyer.com · Campaign performance by media source
No attribution recorded
Before · AppsFlyer dashboard. Attribution snapshot
Fig. 1. Every paid channel shows N/A for attribution. Only organic installs were being counted at all.
HOW WE FIXED IT

Five fixes. One connected funnel from ad click to app install.

Nothing here was a workaround. Each piece plugs into the next. Web capture, cross-domain handoff, app-side attribution, and iOS coverage for consented and non-consented users alike.

01
SMARTSCRIPT IMPLEMENTATION
Landing page clicks captured with the right parameters, via GTM.

Implemented AppsFlyer's SmartScript on the landing page through Google Tag Manager, configured to capture click IDs from every ad platform correctly on first load.

02
CROSS-DOMAIN TRACKING
Click data carried from landing page to app domain.

Set up cross-domain tracking so click details captured on the marketing site survive the handoff to the web app's domain, where SmartScript picks them up and passes them to AppsFlyer at install.

03
ATT IMPLEMENTATION
Consent captured properly, at the right point in the flow.

Worked directly with the dev team to implement App Tracking Transparency correctly, so every iOS install has a clean, structured consent state to attribute against.

04
AD CHANNEL INTEGRATION
Meta and Google connected with correct windows and postback mapping.

Integrated both ad channels with accurate attribution windows and postback configuration, so install and event data flows back to each platform for optimization.

05
SKAN 4.0 SCHEMA
Non-consented iOS users made measurable again.

Configured the SKAN 4.0 conversion schema to model installs and conversions for users who declined ATT, closing the gap that was making a share of iOS traffic invisible.

SCREENSHOTAfter · AppsFlyer dashboard. Attribution snapshot
hq.appsflyer.com · Campaign performance by media source
NUMBERS BLURRED
After · AppsFlyer dashboard. Attribution snapshot
Fig. 2. Facebook Ads and Google Ads now show real attributed installs, feeding postbacks back to both platforms.
THE OUTCOME

What changed. End to end.

Before, paid clicks led nowhere the ad platforms could see. After, every install, web-originated or not, consented or not, maps back to its source.

BEFORE
Paid channel installs attributed
0
Attribution source breakdown
Organic only
Re-attribution / re-engagement tracking
Not tracked
Postback data to ad platforms
None
AFTER
Paid channel installs attributed
Livefrom zero
Attribution source breakdown
All channelsfull coverage
Re-attribution / re-engagement tracking
Livenew capability
Postback data to ad platforms
Flowinginstall + events
THE REAL IMPACT

The campaigns weren't the problem. Nothing downstream could see what the campaigns were doing. Once install data started flowing back, the ad platforms had something real to optimize toward for the first time.

Live
channels now optimizing on real install data, not guesses
Working with Muffaddal was a game-changer for our mobile tracking architecture. He completely fixed our web-to-app attribution and made sure all our traffic maps back to the right sources. Fast, professional, and highly recommended.
Ilke Karabogali
Ilke Karabogali
Founder
HappyShyPeople
STARTING FROM ZERO?

If your paid traffic isn't mapped to your app installs yet, this is the exact gap I close first.

No commitment. Just a clear read on what's missing and what it would take to fix it. Because every install logged as organic is a paid dollar you can't see working.

Map My Web-to-App Funnel