All metrics

What is time-decay attribution?

Time-decay attribution splits an order's credit across all paid touchpoints like linear does, but weights recent touches more heavily. Every touch gets something; a touch close to the purchase gets more than one weeks earlier. It is the compromise between linear's flat split and last-touch's winner-takes-all.

Formula

weight(touch) = 2^(−days before last touch ÷ 7)
share(touch)  = weight ÷ Σ weights

Worked example

A €60-margin order has three touches: 14 days before the last touch, 7 days before, and the last touch itself. Raw weights are 0.25, 0.5 and 1.0 — with a 7-day half-life, each week of age halves a touch's weight. Normalized, the shares are 14.3%, 28.6% and 57.1%, so the touches book €8.57, €17.14 and €34.29. Last-touch would give the final touch everything; linear would give each €20.

How Saldo Metrics computes it

Journeys are built the same way as for every model — UTM-tagged page views by the same customer in the 30 days before the purchase pixel event, one touch per session, chronological. Under time_decay, each touch's weight is 2^(−age/7 days), where age is measured back from the most recent touch (so the last touch always has weight 1.0), and the weights are normalized to sum to one before multiplying into the order's EUR revenue and contribution margin. One fact_attribution row per touch; the rows of an order always sum back to its full margin. No-touch orders go to organic, and uncosted orders are excluded rather than attributed zero. v_attribution_model_comparison sums the time_decay rows per channel next to the other models.

Why it matters

Time-decay encodes a specific belief: recent touches influence the purchase more, but earlier ones still count. For businesses with short consideration cycles that is often closer to reality than either extreme, and comparing a channel's time-decay figure with its linear one shows quickly whether the channel earns its keep early or late in journeys.

Common mistakes

  • Forgetting the half-life is a parameter, not a fact. Seven days is the fixed choice here; a business with a 60-day consideration cycle would want a different curve, and this model can't express that.
  • Expecting time-decay to differ much from linear on short journeys. When all touches fall within a day or two, the weights are nearly equal and the two models agree — disagreement between them is itself a signal about journey length.
  • Reading it as data-driven. The decay curve is assumed, not fitted; only the Markov model learns from your journeys.

Where you see this in the app

Marketing → Attribution, as the time-decay column of the model comparison and as a selectable model in the per-model breakdown.

Formula
order margin split across paid touches, weighted by 2^(−age/7 days)
How Saldo Metrics computes it
canonical.fact_attribution, canonical.v_attribution_model_comparison

Last reviewed 2026-08-29