Before you start
- Install the iOS or React Native SDK and confirm an
app_installevent in Events. - Connect your revenue source: RevenueCat, Superwall, or Stripe.
- Use a physical device for every test. A simulator does not reproduce store handoff, App Tracking Transparency, or the install referrer.
The four bridges, in order of accuracy
A browser cookie can’t reach a native app, so we use four different bridges instead.
Build the first two. The last two are fallbacks.
Build the tracking link
- Open Track.
- Create a link and choose the app destination.
- Add the App Store URL and the Play Store URL.
- Use the link in your ad, keeping the platform’s click-ID macro intact.
Tag the link with ad IDs, not only names
Your UTMs carry entity names; the id parameters carry the join key:
Tag with both:
- Open Track and select an ad platform preset.
- Copy the platform url parameters string the sheet shows you.
- Paste it into the ad platform’s own URL parameters field, at the ad level.
campaign_id, adset_id, ad_id, and, for Meta, placement and
site_source_name.
Bridge by email
This is the only deterministic bridge on iOS.- Turn on
Auto-capture emailin Settings → Identity & Attribution. - Capture the email on your web landing page.
- Call
identify()in the app with the same email trait.
Bridge by client IP and device fingerprint
After a first install, the SDK reports the device’s exact OS version, model, language, and timezone. Every link click already recorded the same signals from the browser’s request. Datalyr matches the two in two tiers:
Datalyr scores every candidate and credits the strongest:
The most recent session wins a tie. A match records
$web_attribution_matched with
match_confidence: "probabilistic", match_candidates, match_score, and match_tier.
The SDK tries up to 3 times; a no_candidates answer in the first hour stays eligible
for one more launch (the click can lag the analytics store), all other answers are final.
Measure the match rate
Every attempt records$attribution_match, matched or not.
reason tells you why a miss missed:
no_web_traffic means the workspace has no web tracking at all, so this bridge can never
work. Install the web SDK on your landing page.SKAdNetwork
- Set
NSAdvertisingAttributionReportEndpointin your app’sInfo.plisttohttps://ingest.datalyr.com. - Ship the build.
https://ingest.datalyr.com/.well-known/skadnetwork/report. iOS fixes that
path, so it carries no workspace ID. Datalyr maps the postback by its Apple app ID.
We verify Apple’s signature and store the result either way. A postback that fails
verification is flagged, not dropped.
Verify
- Uninstall the app from a physical device.
- Open your tracking link on that device.
- Install from the store and open the app.
- Open Events and confirm
app_installarrives. - Confirm the event carries
utm_sourceor a click ID. - Confirm the event carries
ad_id, if you tagged the link with ad IDs. - Sign in to the app.
- Complete a test purchase.
- Open Conversions and confirm the row carries the same campaign.
When it does not work
Next
- iOS SDK and React Native SDK: install and method reference.
- Mobile: the full mobile setup path.
- Identity: how the email bridge picks a touch.