Customer Journey & Attribution

The path from first impression to revenue.

Every customer interaction stitched together, visualised, then credited five different ways — including a real Markov chain model running on these journeys.

Multi-touch journey flow
First touch → middle touchpoint → last touch → outcome. Channels below 2% share are collapsed into "Other" for legibility.
Avg path length
1.2
touchpoints per conversion
Converted1,731Dropped3,269Meta Ads1,300Meta Ads1,325Meta Ads1,324Google Ads1,403Referral565Referral559TikTok Ads609TikTok Ads602TikTok Ads571Organic462Organic471Organic480LinkedIn Ads155LinkedIn Ads162Referral583LinkedIn Ads178Google Ads1,396Google Ads1,416Snapchat205Snapchat208Snapchat176Direct280Direct289Direct281
First touch
Middle touch
Last touch
Outcome
Attribution model comparison
Same conversions, credited five different ways. The Markov row is the result of an absorbing-Markov-chain removal-effect calculation on this dataset — not a guess.
Path length distribution
How many touchpoints did each customer have? Most customers cluster around 1 touchpoints.
Average time-to-conversion by first-touch channel
From the very first impression to the purchase event. Channels with short windows tend to attract high-intent prospects; long windows indicate top-of-funnel awareness.
Google Ads
2.6d
median · mean 9.7d
Direct
2.7d
median · mean 11.2d
Meta Ads
2.8d
median · mean 18.8d
Referral
2.8d
median · mean 18.6d
Organic
2.8d
median · mean 13.3d
Snapchat
2.9d
median · mean 22.0d
LinkedIn
3.5d
median · mean 21.2d
TikTok
3.6d
median · mean 2.4mo
How to read this

Last-click is the model platforms report by default. It gives 100% credit to whichever channel was last seen — and is structurally biased toward bottom-funnel channels like Google Search.

First-click swings to the opposite extreme, crediting the discovery channel and ignoring everything that happened in between.

Linear & time-decay split credit across the path with mechanical weighting rules.

Markov chain is what's actually running here: I build an absorbing-Markov-chain transition matrix over every customer journey, then compute the removal effect — how much would conversions drop if a given channel disappeared? — and normalize to 100%. The number under each channel in the bar above answers: how important is this channel to the chain reaching a conversion?

Full methodology, including the math and code, is on the /docs page.

Total Markov-credited revenue weight across channels: 100%