Verify attribution before you spend: proving the funnel works in staging, not in a campaign report
Run the whole loop — click, install, first open, match — and check the audit log says deterministic before a single ad dollar goes out.
Updated Sep 3, 2026
Who runs this
- Engineers
- Performance & paid
What it uses
- resetForTesting in the SDK
- Match audit log (deterministic vs probabilistic)
- Managed AASA and assetlinks.json
- Google Play Install Referrer
- Consent gating (on by default)
Attribution is the kind of system that fails silently. A missing Android fingerprint, an AASA file served with the wrong content type, a consent gate that never opens — none of these throw an error. They produce a campaign report a month later with 'organic' where the paid installs should be, and a launch retrospective about why the numbers don't add up. The whole thing is testable before launch. Most teams don't.
What problem does this solve?
Before spend goes out, you want proof that a click on a link produces an install that attributes deterministically to that link, on both platforms, with consent handled. The proof is a row in the match audit log. Getting that row in staging costs an afternoon. Getting it from a live campaign costs the campaign.
How do you set the test up?
One test link per platform, tagged so the test installs are unmistakable and can be excluded later. Then the full loop on a real device: tap the link, install from the store, open, and read the audit log for that install.
{
"deepLinkPath": "/",
"customData": {"cmp": "qa-attribution-check", "env": "staging", "run": "2026-09-03-a"}
}What does a passing run look like?
| Step | Android | iOS |
|---|---|---|
| Click | Recorded against the link | Recorded against the link |
| Install | Play Install Referrer carries the click token | Click token read via the paste control on first open |
| First open | Deferred link routes to the right screen | Deferred link routes to the right screen |
| Consent | setConsent(true) called after your prompt | setConsent(true) called after your prompt |
| Audit log | Match type: deterministic | Match type: deterministic |
Anything other than deterministic on this run is a finding. 'None' usually means the click token didn't survive — the Referrer on Android, the paste control on iOS. 'Probabilistic' means matching is on for the workspace and the deterministic path failed, which is worth knowing before you rely on it.
How do you run it more than once?
- resetForTesting in the SDK clears the install flag, cached attribution and device ID, so the next open behaves like a genuine first launch without an uninstall cycle. It's for testing only; it must not ship.
- The link validator checks the AASA and assetlinks.json files the whole thing depends on. Run it against the link domain before the device test, not after.
- Register every Android signing fingerprint you'll install from — Play, upload key, and each developer's debug key. A missing one is the most common reason the Android run fails.
- Test with consent declined too. The correct result is an install with no attribution and events queued; if attribution appears, the gate isn't gating.
Which metric should you watch?
There's only one: the match type on the test install, on each platform, on the day before spend starts. Deterministic on both is the green light. Anything else is a bug you just found for free.
Related use cases
iOS measurement
iOS after ATT: campaign-level truth when user-level attribution isn't on offer
Deterministic iOS attribution largely went away with App Tracking Transparency. SKAdNetwork and AdAttributionKit are what's left, and they need handling.
Cost reconciliation
Channel cost reconciliation: one CPI across networks that each count their own way
Meta says 900, TikTok says 1,100, the dashboard says 1,400 — and nobody can explain the gap.
Every one of these depends on the same two things: link context surviving an install, and an honest answer to which click produced it. The scoring model is published in full on our methodology page, and you can check any domain's association files with our free link validator.