Deeplinkly

Glossary/Attribution mechanics

Deterministic attribution

Definition

Deterministic attribution credits an install to a specific click by matching an identifier that is present in both records, producing a one-to-one link rather than a statistical estimate.

The word that matters is *carried*. A deterministic match works because something — a click ID, a referrer string, an attribution token — physically travels from the click to the install and arrives intact. Where that carrier exists the answer is exact; where it does not, no amount of modelling turns a guess into a match. Most of the confusion in mobile attribution comes from treating a platform without a carrier as a measurement problem rather than a plumbing one.

The carriers that still work

There are fewer of these than there were in 2018, and the surviving list is short enough to hold in your head. Each one is a different mechanism with different failure conditions, which is why an integration that relies on exactly one of them is fragile by construction.

Deterministic carriers by platform, and what breaks each one.
SignalPlatformCoversBreaks when
Play install referrerAndroidStore install from a tagged linkSideload, or the link never carried parameters
Meta install referrerAndroidMeta ad to store installNot a Meta ad; not enrolled
Click ID in a Universal LinkiOS + AndroidApp already installedApp not installed — no channel to the app
Apple AdServices tokeniOSApple Search Ads onlyAny non-Apple channel
User-initiated pasteboard tokeniOSDeferred install, with a tapUser does not tap the paste button
Login or account identityBothReturning users you already knowAnonymous first sessions

Android keeps a carrier through the store; iOS does not

This asymmetry explains most of the platform gap in attribution quality. The Play install referrer survives a store visit, an install, and a first launch. On iOS nothing equivalent exists for non-Apple channels, which is why deferred deep linking on iOS depends on a user-visible paste action and why SKAdNetwork exists at all.

What a deterministic match actually looks like

The click writes a record keyed by an ID it also puts in the outbound URL. The install reports the same ID back. There is no matching algorithm — it is a join on a primary key, which is exactly why it does not degrade with volume, geography or time.

The ID travelling from click to install on Android
# 1. The click. Your link service records clk_4b7d2e and redirects to
#    the Play Store with the same value inside the referrer parameter.
https://go.example.com/spring?clk=clk_4b7d2e
  -> https://play.google.com/store/apps/details
       ?id=com.example.app
       &referrer=clk%3Dclk_4b7d2e%26utm_source%3Demail

# 2. The install. The Play Install Referrer API returns it verbatim,
#    with the two timestamps that make the match auditable.
installReferrer          = "clk=clk_4b7d2e&utm_source=email"
referrerClickTimestamp   = 1755388800
installBeginTimestamp    = 1755388930

# 3. The join. Not a heuristic — the same string on both sides.
SELECT * FROM clicks WHERE click_id = 'clk_4b7d2e';

Note the URL encoding in step 1. The referrer value is a query string nested inside a query parameter, so its & and = characters must be percent-encoded. An unencoded ampersand truncates the referrer at the store boundary and every parameter after it disappears — a silent, total loss that looks exactly like a tracking bug because it is one.

Deterministic against probabilistic, on the properties that decide which one you can defend in a meeting.
DeterministicProbabilistic
MechanismShared identifierStatistical inference
AccuracyExact where it appliesAn estimate with an error bar
CoveragePartial — no carrier, no matchBroad by design
Degrades with volumeNoYes, at low volume especially
Auditable per installYesNo
Platform policy riskNoneDepends entirely on the method

Where the chain breaks in practice

Almost every unattributed install traces to one of a handful of breaks, and they are ordered here by how often they turn out to be the cause. Why are my installs unattributed walks the full diagnostic; this is the short version.

  1. The link never carried anything. An untagged link cannot produce a deterministic match no matter what the SDK does. This is the largest single cause and the cheapest to fix.
  2. The redirect dropped the parameters. A marketing redirect, a consent gate, or a CDN rule that strips query strings ends the chain before the store.
  3. The ampersand was not encoded. Silent truncation of the Android referrer at the first raw &.
  4. An in-app browser ate the click. A webview that never hands off to the system browser cannot open the app, and often cannot preserve the click either — see deep links in in-app browsers.
  5. There is genuinely no carrier. An iOS install from a non-Apple ad where the user did not use the paste button. Nothing is broken; the platform simply provides no path.

The fifth case is not a bug, and treating it as one leads somewhere bad

When a team decides that every install must be attributed, the only remaining tool is inference from device characteristics — and on iOS that is fingerprinting, which Apple prohibits outright regardless of ATT status. The correct response to a missing carrier is an honest unattributed bucket plus aggregate measurement, not a synthetic match.

A healthy setup therefore reports three buckets rather than one: deterministically matched, aggregate-only (SKAN or AdAttributionKit), and unattributed. The third number is not a failure metric — it is the size of the population about which you should be reasoning statistically rather than individually.

One more property is worth stating plainly because it decides audits. A deterministic match is reproducible: given the same click table and install table, the same join produces the same answer next year. A probabilistic match is a model output, and re-running it against a retrained model produces a different history. Only one of those two survives a finance review.

UTM builder

Every deterministic match starts with a link that carried something. This builds correctly-encoded campaign URLs with a live preview, which is also the fastest way to avoid the unencoded-ampersand mistake that truncates an Android install referrer without any error anywhere.

Open the utm builder

Frequently asked questions

What is deterministic attribution?
It credits an install to a specific click by matching an identifier present in both records — a click ID in an install referrer string, an attribution token, or a logged-in user identity. Because it is a join on a shared key rather than a statistical estimate, the result is exact where the identifier survives and simply absent where it does not.
What is the difference between deterministic and probabilistic attribution?
Deterministic attribution matches on something carried from click to install, so it is exact but only covers the cases where that carrier exists. Probabilistic attribution infers a match from characteristics such as timing, IP address and device type, so it covers more installs but produces an estimate with an error rate that grows as campaign volume falls.
Does deterministic attribution still work on iOS?
Partially. It works fully for Apple Search Ads via the AdServices attribution token, for clicks that open an app the user already has installed, and for deferred installs where the user taps the system paste button. It does not work for a deferred install from a non-Apple ad channel, because iOS provides no signal that survives the App Store for that path.
Why is my Android install referrer empty or truncated?
The two common causes are a link that never carried campaign parameters at all, and unencoded ampersands inside the referrer value. Because the referrer is a query string nested inside a query parameter, its separators must be percent-encoded; a raw ampersand truncates the string at the store boundary and everything after it is lost silently.
Is deterministic attribution affected by ATT?
Not directly. App Tracking Transparency governs access to the IDFA and cross-app tracking, whereas a first-party click ID you generated and carried through your own link is not a cross-app identifier. Attribution built on your own links and the platform install-referrer APIs continues to work at the same accuracy whether the user grants or denies the prompt.

Related terms

  • Probabilistic attributionProbabilistic attribution estimates which ad interaction most likely caused an install by inferring a match from signals such as timing, network and device characteristics rather than from an identifier shared by both records.
  • Fingerprint attributionFingerprint attribution matches an install to a click by building a signature from device and network characteristics such as IP address, screen dimensions, OS version and locale, rather than from an identifier either party consented to share.
  • Unattributed installsAn install is unattributed when no signal linking it to a prior ad click or link tap survived the journey through the app store, which can mean the install was organic or that the signal existed and was lost.
  • Play Install ReferrerThe Play Install Referrer is a Google Play API that lets a newly installed Android app read the referrer string and click timestamps recorded when the user arrived at its Play Store listing.