← All posts

3 min read

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:

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.

marketing product

Try Tracely on your site

One snippet, cookieless, first-party. See your traffic in minutes without handing it to an ad network.

Start free

Get 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.