Skip to main content
When you finish, an install that started from your ad reports the campaign, and the in-app purchase that follows attributes to it.

Before you start

  • Install the iOS or React Native SDK and confirm an app_install event 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.
  1. Open Track.
  2. Create a link and choose the app destination.
  3. Add the App Store URL and the Play Store URL.
  4. Use the link in your ad, keeping the platform’s click-ID macro intact.
The link is a redirect, not a page. A click goes to the store as a 302, and Datalyr records it server-side first. Your UTMs carry entity names; the id parameters carry the join key: Tag with both:
  1. Open Track and select an ad platform preset.
  2. Copy the platform url parameters string the sheet shows you.
  3. Paste it into the ad platform’s own URL parameters field, at the ad level.
A redirect link cannot hold these macros. The platform only sees the short URL, so it substitutes only macros it appends; stored macro text arrives literally and is dropped. Datalyr records 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.
  1. Turn on Auto-capture email in Settings → Identity & Attribution.
  2. Capture the email on your web landing page.
  3. Call identify() in the app with the same email trait.
The SDK resolves that email against the last 90 days of web sessions. A touch carrying a click ID beats a newer touch carrying only UTMs.

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

  1. Set NSAdvertisingAttributionReportEndpoint in your app’s Info.plist to https://ingest.datalyr.com.
  2. Ship the build.
Apple posts to 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

  1. Uninstall the app from a physical device.
  2. Open your tracking link on that device.
  3. Install from the store and open the app.
  4. Open Events and confirm app_install arrives.
  5. Confirm the event carries utm_source or a click ID.
  6. Confirm the event carries ad_id, if you tagged the link with ad IDs.
  7. Sign in to the app.
  8. Complete a test purchase.
  9. Open Conversions and confirm the row carries the same campaign.

When it does not work

Next