Attribution

Install attribution from the links you already share

WarpLink attributes an app install, or a re-open, to the link click that drove it, matching on the Play Install Referrer, a device identifier, a fingerprint, or raw device signals, and returns a confidence score with every answer. The result reaches your app in seconds on first launch, with no advertising identifier and no App Tracking Transparency prompt, next to the deep linking and real-time analytics the same SDK already provides.

How install attribution works

  1. Share a link

    Share your short link in an email, a post, a QR code, or a referral. The redirect records the click along with the signals it can see: the address the request came from, the device language, and the timezone. The visitor carries on to your app, to your fallback URL, or to the store. No SDK is involved yet.

  2. The visitor installs

    Android can hand the answer over intact: when the destination is a Play Store URL, the Play Store carries the install referrer through the install, which makes that match exact. Nothing survives the store on iOS, so the click stays claimable for the window set on the link, six hours by default and 24 hours at the most.

  3. The SDK reports first launch

    On first launch the SDK sends the signals the device can gather and the server walks the cascade in order: referrer, then device identifier, then fingerprint, then raw signals. The first hit wins and comes back with a match type and a confidence score, and the install shows up against that link in your dashboard.

One SDK call

iOS (Swift)
if let attribution = WarpLink.attributionResult {
    let confidence = attribution.matchConfidence ?? 0

    if attribution.matchGuaranteed || confidence > 0.5 {
        navigate(to: attribution.destination)
    } else {
        showOnboarding()
    }
}
Android (Kotlin)
val attribution = WarpLink.attributionResult

if (attribution != null) {
    val confidence = attribution.matchConfidence ?: 0.0

    if (attribution.matchGuaranteed || confidence > 0.5) {
        navigateTo(attribution.destination)
    } else {
        showOnboarding()
    }
}
React Native
import { WarpLink } from '@warplink/react-native'

const attribution = await WarpLink.getAttributionResult()

if (attribution) {
  if (attribution.matchGuaranteed || attribution.matchConfidence > 0.5) {
    navigateToLink(attribution.linkId)
  } else {
    showOnboarding()
  }
}
Sub-10ms redirects·Never blocked·Open source SDKs·MCP server, free on all plans

Frequently Asked Questions

Not for installs that came from your own links. The match cascade connects the install back to the click that caused it with no ad network in the middle, which covers organic, referral, creator, email, and QR traffic. WarpLink does not replace a mobile measurement partner for paid ad networks and SKAdNetwork. Ad network postbacks, the SKAdNetwork postback pipeline, cost and ROAS reporting, and fraud detection are separate problems, and a partner still owns them.

Yes, and it never asks for the prompt. There is no advertising identifier anywhere in the cascade: no IDFA on iOS and no GAID on Android. The two exact tiers are the Play Install Referrer and the identifier for vendor, which is scoped to your own apps and exempt from App Tracking Transparency. The probabilistic tier compares the request address, the device language, and the IANA timezone name, stored only as a one-way hash.

A score from 0.0 to 1.0 saying how sure the match is. An exact match, from the Play Install Referrer or the identifier for vendor, always scores 1.0 and reports matchGuaranteed. A probabilistic match starts at 0.85 when the launch follows the click within an hour and decays to 0.30 in the 6 to 24 hour band, cut further when the click address was shared or more than one link could have matched. Route straight to content near the top of the range, and gate anything sensitive on matchGuaranteed rather than on a score.

No, and the reason is structural. A paid install starts with a tap inside another company's app, on a click URL the network owns, so WarpLink never sees the click and has nothing to match the install against. On iOS, Apple sits in the middle as well, and SKAdNetwork sends the ad network a signed postback per install, delayed and with the identifying fields withheld unless crowd anonymity thresholds are met. WarpLink attributes the links you own and share, which is a different job from buying media.

Your app gets the attribution result on first launch and can act on it in code, and the dashboard shows the installs each link earned. Over the MCP server an AI client can read a link's click analytics with either the analytics:read or the links:read scope, free on every plan and sharing the REST API limit of 60 requests a minute. The attribution endpoint itself belongs to the SDKs: it takes an SDK key, and an API key is rejected. The plans are at warplink.app/pricing.

Your links should open the app.
Your data should tell you why.

Set up deep linking, attribution, and analytics in minutes. Free to start.

Start building, free

Have a question?