Docs

Attribution

How Lander ties opens and installs to the links that caused them, how sure it is each time, and what it never collects.

Attribution answers one question: which link brought this person into the app? Lander answers it for every open and every install, and always says how sure it is. It never presents a guess as a fact.

What gets recorded

EventWhenRecorded by
ClickA tap reaches the edge, for example because the app is not installedThe edge, after the redirect
OpenThe app is opened by a Lander link and the SDK resolves itThe API, when the SDK resolves the link
InstallThe app launches for the first time with the SDKThe API, on the SDK's first launch report
Custom eventYou call Lander.trackEvent, for example for a signup or purchaseThe SDK's offline queue

Each open and install gets an attribution: the link (if any), a confidence and a method. You do not need to track opens or installs yourself.

Opens from verified Universal Links and App Links usually never pass through the edge, because the OS opens the app directly. That is why the SDK reports them, and why your open count can be higher than your click count.

Confidence

ConfidenceMeaning
deterministicLander knows. An exact identifier tied the open or install to the link: the URL that opened the app, a single use token, or your own sign in.
probabilisticLander guessed from coarse signals, because you allowed it. Usually right, sometimes wrong. Only for iOS deferred links of projects that opted in.
unattributedLander could not tie the install to a link, so no deferred link is delivered. The install is still counted.

In the SDK this is link.confidence, a LanderConfidence enum.

Method

The method says how the link was found.

MethodConfidenceWhat happened
universal_linkdeterministicThe app was opened by a link on iOS
app_linkdeterministicThe app was opened by a link on Android
install_referrerdeterministicAn Android install carried a token through the Play Install Referrer
landing_pagedeterministicThe person tapped "open it" on the iOS Continue in app page
authenticated_handoffdeterministicYour server bound the link to a user, and the app claimed it after sign in
probabilistic_matchprobabilisticAn iOS first launch matched recent taps by OS version and country, or by network

An install with no link is recorded as unattributed. If a deterministic link turns up later for that install (a Continue in app tap or a handoff made before the install), the install is upgraded to that link.

Read more about each flow in Deferred deep linking.

Conversions

To tie your own events to a link, pass the link ID along:

await Lander.trackEvent(
  'purchase',
  properties: {'amount': 49.99, 'currency': 'USD'},
  linkId: link?.linkId, // the link that opened the app, if any
);

Events are stored on the device first and sent in batches, so they survive offline periods and app restarts, and each one is counted once even if it is sent twice. See Events.

Where you see it

The Analytics page and each link's detail page show an Attribution confidence card: how many opens and installs were deterministic, probabilistic or unattributed in the selected period, so you can see how much of your attribution rests on a guess. See Analytics.

Bot traffic is excluded. Crawlers, link preview fetchers, scripts, headless browsers and monitors still get redirected, but their clicks are flagged and left out of your numbers.

Privacy

Lander is built to attribute without tracking people.

  • A random install ID. The SDK creates a random UUID on first launch. It is excluded from backups, so it is never restored onto another device, and it disappears when the app is uninstalled.
  • No fingerprinting. No device model, screen size, fonts, advertising IDs (IDFA or GAID) or pasteboard reads.
  • Minimal clicks. A click keeps the platform, the country and the referring host, never the IP address, the full user agent or the full referrer.
  • Opt in for anything probabilistic. Probabilistic matching is off by default and compares only OS major version, country and tap time. IP matching is a second opt in and stores only a keyed hash of the network, for at most 7 hours.
  • Hashed user IDs. Handoffs store a salted hash of the user ID you send, never the ID.

The SDK sends the install ID, platform, app version, OS version, SDK version, the URLs that opened the app, the events you track, the Play Install Referrer on an Android first launch, and the user ID you pass to claimHandoff. The Flutter SDK pages cover the privacy manifest for iOS.

On this page