How every install is scored.

The whole formula, published. Every term below is stored on each attribution, and the calculator runs the same arithmetic the attribution worker does.

Four tiers, tried in order. The first match wins.

A deterministic join always outranks an inference. If nothing matches, the install is organic, and that is recorded too.

  1. install_referrer98Play Install Referrer carries a Measura click ID through the store install.Exact join. No bonus or time penalty applies.
  2. click_id95The SDK reads a click ID from a deep link it opened.Exact join. No bonus or time penalty applies.
  3. ad_id70The advertising ID matches a click exactly. Last click wins.Inference. Bonus and time penalty apply.
  4. fingerprint55The device fingerprint hash matches exactly. Never partial.Inference. Bonus and time penalty apply.
  5. organic—No signal matched any click in the window.Stored with its reason, like every other outcome.

Score an install yourself.

Move any input and the reading follows. It opens on the install from the homepage, which scores 78.

Tier that matched

78/100

Reported as attributed.

  1. base70Set by the tier that matched.
  2. device_uniqueness_bonus+8floor(entropy × 10). Inference tiers only.
  3. time_penalty0−3 per full day after the first 24 h, capped at −15. Inference tiers only.
  4. shared_ip_penaltyn/a−10 when click and install share a masked /24. Fingerprint only.
  5. high_fraud_penalty0floor(pre-screen score ÷ 10), capped at −10.

confidence = base + device_uniqueness_bonus − time_penalty − shared_ip_penalty − high_fraud_penalty, clamped to 0–100

The floor and the window.

Two limits decide what can be attributed at all. Neither discards evidence.

Reportable floor
MIN_REPORTABLE_CONFIDENCE · attribution-workerThe matched click is kept in rejected_candidates with the reason it was downgraded.. A match scoring under it is reported as organic, and the evidence is kept.
Click window
default_click_window_days · apps table (migration 001)CHECK constraint: between 1 and 30 days. by default. The app’s own setting wins, then the account default, then the system default.
Competing clicks
When several clicks carry the same advertising ID, the most recent in the window wins. The others are stored as rejected candidates, each with its reason.

Fraud is scored, never silently removed.

Every event passes nine named rules before attribution. A rule that fires is stored by name. The pre-screen score lowers confidence by up to 10 points; nothing is auto-blocked.

  1. ip_velocityMore than 10 clicks a second from one /24 subnet.
  2. missing_user_agentNo user agent on the request.
  3. bot_user_agentA user agent that names a crawler or a script.
  4. low_entropy_user_agentA templated user agent, typical of farms.
  5. invalid_timestampA client timestamp that does not parse.
  6. timestamp_anomalyClient clock more than 5 minutes off server time.
  7. device_install_velocityOne device producing many installs in a short window.
  8. device_farm_signatureEmulator and rooted-farm traces in the user agent.
  9. no_device_signalsNo consented identifiers at all. Informational.

What is stored on every attribution.

Written once, when the install is attributed, to the attributions table. Nothing here is recomputed for a report.

  • modelThe tier that matched: install_referrer, click_id, ad_id, fingerprint, or organic.
  • confidence_scoreThe final integer, 0 to 100.
  • confidence_breakdownEvery term that produced the score, as stored JSON.
  • signals_usedThe signals that made the match, e.g. ["gaid"].
  • reasonOne sentence saying why this click won.
  • rejected_candidatesEvery click considered and not selected, with the reason, including a match downgraded under the floor.

Every attribution in your account carries this record.