BigQuery & Basics

Bringing Back UA Multi-Touch Attribution

GA4's session attribution has a pretty major flaw

GA4 doesn’t recognise multiple touch points in a single session - only the first one.

So what?

Have you seen any of these?

  • Google Ads reporting conversions, but GA4 failing to attribute them to Paid?
  • Your email provider is reporting conversions, but you can’t see anything attributed to email on GA4?

The way that GA4 sessions are attributed means that if a user visits from multiple traffic sources within the same session, they don’t exist. (Unlike the previous version Universal Analytics.)

ga4_attribution_example

Blerg.

If you’re using GA4 and users are buying after multiple touch points within a single session you have this problem - whether you realise it or not.

(This is likely in e-com and industry dependent otherwise).

How different is it?

Below, we’ve compared revenue attribution for GA4.

We're comparing native GA4 attribution vs the multi touch attribution we're recreated in Pipeline which attributes every single visit even within a session.

Here’s an example of how it shifts revenue attribution for an e-commerce brand.

attribution_difference_ecom_example

Comparing “multi-touch sessions” to the standard GA4 sessions provides us with different revenue figures.

Using the multi touch attribution, we can see:

  • The amount of revenue attributed to Paid Search increases.
  • The amount of revenue attributed to Direct decreases (by almost the same amount as Paid increases!)
  • The amount of revenue attributed to email decreases whilst Referral and Unassigned increases.

You'll also notice we've done with this time decay attribution rather than last non direct click, as this makes the most of splitting the conversions.

Let’s break the problem down with an example.

Our user, Dawn, is looking for a new gym bag.

Here is their journey:

  1. They Google the term “gym bags for women”, and click through to our site.
  2. They Google around for several product reviews of us on 3rd party sites.
  3. They Google for some specific feature and go to the site via a Paid Search ad.
  4. They signup to the newsletter in order to get a 10% discount code.
  5. They receive the email, and then click through to the site to apply it to the basket.
  6. They then make the purchase.

This all happens in one “session” i.e. each action on our site is within 30 minutes of the last one.

By default this is what GA4 will do.

ga4_attribution_1

Organic will get 100% of this credit.

ga4_attribution_2

Probably not what you were imagining for last click attribution? And it certainly doesn’t give the whole picture.

Universal Analytics, GA4’s predecessor, did not attribute sessions in the same way.

This generated some other problems, but didn’t have this specific issue.

Let’s review how UA approached this decision and how we can help GA4 do better.

Sessions are constructed differently across UA & GA4

This is the core of the problem.

Sessions in GA4 are fairly straightforward

When someone visits a site, the actions they take during that visit are grouped into a “session”.

A new session starts after 30 minutes of inactivity (though the session timeout period can be adjusted in GA4).

Sessions in UA split on several different conditions

In the same way as GA4, Universal Analytics sessions start new after 30 minutes of inactivity.

But there are two other key ways that new sessions are triggered.

  1. After midnight an interaction would be considered a new session.
  2. If a user arrives via one campaign (i.e. via Organic) and then then comes back via a different route (i.e. via Paid).

The first one is kind of annoying and it’s probably good it went. (Although if you had a lot of over midnight traffic for your site, this was probably irritating).

It’s this second one that’s super important.

How are our metrics different between these two?

If we compare them, there are two key differences:

  1. The number of sessions will be different.
  2. The traffic source for conversions can be different.

Let’s run through that previous example again.

Using GA4 sessions, this would be a single session.

ga4_attribution_3

This is how it would look in a table:

ga4_attribution_4

But for UA sessions, this translate to 3 sessions with the newsletter taking all the credit for the conversion

ua_attribution_1

This is the table view.

ua_attribution_2

Using a real life example:

The number of sessions you have that will fall into this bucket will vary a lot. E-commerce tends to be the most notable here, here's an example from a notably slow industry:

Over one month we can there are about 3% of sessions which split.

  • GA4 Sessions - 1.97 million sessions.
  • “Split Multitouch Sessions” - 2.03 million sessions.

Typically it will be about 2 - 10%.

So this gives us some good points and some bad:

  • The conversion is just attributed differently (as we’ve touched on earlier).
  • All channels get a session which gives them all some credit.
  • We overcount sessions.

How can we do this better with our GA4 data?

We can split sessions to recreate Universal Analytics Sessions

The joys of having the raw GA4 data from BigQuery means that we can re-stitch the data however we like - and set whichever conditions we want also.

To create “split sessions” we create a new session which starts each time a user re-visits from another traffic source.

how_we_replicate_ua_sessions

Now we do want to exclude a couple different sources that don’t count as new sessions (e.g. payment providers):

  • Paypal
  • Stripe
  • Other payment providers

And we could optionally also exclude subdomains if we have cross domain tracking hooked up.

Can we do even better with our conversions?

The best way to actually attribute a conversion is to “split” the conversion (or revenue) across all the different touch points on the way to that conversion.

Once we’ve split up the sessions into these new “split” sessions, we need to share the credit more intelligently.

We could use a range of different attribution models to do this i.e:

  • First Click
  • Last Click
  • Linear
  • Time Decay

How would this look?

We’ll let’s look at an example.

example_different_attribution_models

Here’s how things would look across the different the different attribution models:

table_attribution_models_compared

Looking at a specific example, we can see how revenue is attributed across different attribution models (and Default Channel Groupings)!

table_attribution_models_compared_ecom

What would happen to sessions here?

This would lead to an “overcounting” of GA4 sessions. One session has now become multiple sessions.

But conversions don’t, they just get split more accurately.

So we’ve got a trade off.

conversion_numbers_stay_the_same

Ultimately this is a tradeoff.

Using GA4 sessions allows you to avoid overcounting sessions.

With “split” sessions you get far more granularity in terms of where people are coming from to convert on your site, but you overcount sessions.

For campaign attribution particularly top of funnel, we think it’s often worth doing.

Don’t want to manually split sessions?

If you’d rather not do this yourself, you can use our Pipeline product to do it for you.

When you set up your GA4 pipeline, you just select the type of session attribution you want and you can even run both at the same time to let you compare and understand the difference.

piped_out_interface_1

We also make it super easy to exclude some sources from producing “new” sessions.

piped_out_interface_2

Wanna find out more?

To get a product demo, then schedule a call.

Or you can hop in straight away with a free trial and start playing around!