Multi-touch attribution on aggregates
Tracely's Campaigns dashboard now computes first-click, last-click, linear, position-based, and time-decay attribution from campaign touches within sessions.
Most tables in Tracely attribute a conversion the boring way: last touch wins. That's a fine default and an honest one — but it systematically flatters whatever campaign happens to sit closest to the conversion, and quietly writes the newsletter that started the whole thing out of the story. The Campaigns dashboard now has a multi-touch view that redistributes that credit, and it does it without any new data collection.
What it computes
You pick a conversion goal — any goal you've defined, since a goal is just a named event. For every session in the period that fired that event, Tracely looks at the pageviews leading up to the conversion and reads the utm_campaign labels along the way. Consecutive repeats collapse, so ten pages under one campaign count as one touch. From those touchpaths it builds three things:
Campaign paths. The literal sequences, like newsletter → (none) → spring-launch, with a count of converting sessions per path. Untagged stretches show as (none) rather than being hidden, because "most conversions had no campaign touch at all" is itself a finding.
Assisted conversions. For each campaign, how many conversions it appeared anywhere before — not just last. This is the quickest way to spot a campaign that never closes but keeps showing up early.
Weighted credit. Fractional credit per campaign under a selectable model. The models are the standard five:
- First click — full credit to the first campaign touch.
- Last click — full credit to the final touch before conversion; the baseline everything else argues with.
- Linear — credit split equally across all touches.
- Position-based — 40% to the first touch, 40% to the last, the remaining 20% split across the middle.
- Time decay — exponential weighting toward the conversion, so recent touches count more. The half-life is configurable (
TRACELY_ATTRIBUTION_TIME_DECAY_HALF_LIFE_HOURS, default 24), meaning a touch a day before conversion gets half the weight of one right at it.
Switching models on the same period is the useful move. If a campaign's credit collapses going from first-click to last-click, it's an opener, not a closer — budget it like one.
The aggregate-first part
Nothing here required new tracking. Campaign labels were already on pageviews; conversion events already existed. The multi-touch summary is pure read-side computation over data Tracely stores anyway, and its outputs are counts and credit totals per campaign — no per-person journey graph is built or kept.
The honest limitations follow from the same design. Touches are scoped to sessions, so this is "which campaigns did the converting visitor pass through on the way," not a 90-day cross-device odyssey — a privacy-first tool can't see that, and I'd argue the tools that claim to mostly can't either. It also only knows about campaigns you tag: untagged traffic is (none), and undisciplined UTM tagging in means mush out. And the computation caps at 2,500 converting sessions per period with the top rows shown, which keeps the dashboard responsive on large sites.
Why bother, in a privacy-first tool
Because last-click isn't neutral — it's a model too, just one with strong opinions it never discloses. If you spend anything on campaigns, last-click steers budget toward bottom-of-funnel touches automatically. Seeing the same conversions under linear or position-based weighting is often the first time top-of-funnel work gets visible credit at all.
The big analytics suites answer this with modeled, black-box attribution built on individual tracking. I think there's a middle position worth defending: transparent arithmetic over aggregate session touches, with every model's rules simple enough to state in one sentence. You lose cross-device stitching; you keep numbers you can explain to a colleague without saying "the model decided." If that trade sounds right, the Google Analytics comparison goes deeper on where it does and doesn't hold up.
Try Tracely on your site
One snippet, cookieless, first-party. See your traffic in minutes without handing it to an ad network.
Start freeGet new posts by email
Short product notes twice a week plus the occasional deep dive. No tracking pixels in the emails, and you can unsubscribe anytime.
Your address is used only to send new posts. No open tracking.