Stuifbergen.com

Analytics & Growth Hacking

  • About
  • Contact
  • Professional Services

Find me here

  • Mastodon (social)
  • Mastodon (measure)
  • No more Twitter
You are here: Home / TIL / GA4 intraday exports and cookieless pings

GA4 intraday exports and cookieless pings

26 February 2025 by jules Leave a Comment

I build a lot of reports for clients that use Big Query GA4 as source.

Now.. that works like a charm. But.. you will need to wait some time to get processed data from the events_ tables.

More recent data will appear in the streaming _intraday_ tables, if you have that enabled. But.. that data is not always complete! Especially when your site has consent mode enabled, and does not set a cookie until after consent.

Here’s how it works:

The scenario

Someone visits the site for the first time (source: some campaign), gets confronted with the cookie banner, and then clicks accept.

We tagged the site correctly, so this is what happens

  1. a page_view event triggers (with URL parameters) – and notices analytics consent is denied (the default)
  2. the tracker attaches some parameters to this hit, to help processing
    • a session is started
    • this is the first visit
  3. there is an item list on the page: view_item_list event is triggered
  4. the cookiebanner pops up (event: cookiebar_view)
  5. the visitor clicks accept (event: cookiebar_accept) and the tracker gets sent a granted signal
  6. now the cookie can be used, and is attached to an automatic event user_engagement

Sounds simple. Now, let’s see what is streamed into Big Query:

The streaming data gap

Basically, the intraday tables store what happens, as it happens.

  • cookie field ( user_pseudo_id ) is filled in on hits on/after consent
  • cookie field is NULL for hits before consent

As it should be, right? But there’s a third bullet:

  • first batch of events will not appear in the intraday table!

Here’s what we see (most recent hit first, read from bottom to top)

  1. the page_view is missing in the streaming table
  2. the collected_traffic_source information is missing (it is always only filled in on the first batch of events)
  3. As a byproduct, we also do not see the session start and first visit
  4. the other events are all sent without a cookie
  5. after consent, we see the user_pseudo_id – finally

The next day.. Google has glued it all together

Processed data: every event has a row

The following is in the processed data: (most recent hit first, read from bottom to top)

  • The page_view event and all other events leading up to the consent have a cookie attached to it! Google rescued that information
  • the “Attached” parameters to the hit expand to two extra rows
    • session_start
    • first_visit
  • we have source information: collected_traffic_source is present – on the first batch, as normal

Not visible in the screenshot: session_traffic_source_last_click – the session information is properly filled in.

The consequences

If you decide to use intraday tables in your Big Query reports: be aware that although the information is fresh (no pun intended, GA360 users), it’s incomplete

  • intraday misses crucial events, namely the first batch (most often a page_view)
    • bye bye landing_page reports based on page_views
    • bye bye traffic source reports based on session_traffic_source_last_click or collected_traffic_source
  • intraday misses cookies on some events
    • which is not too much of an issue, really

Your experiences?

Do you use intraday tables in your models? Have you found clever workarounds to get the correct data in?

Let me know! Drop a comment here, or send me a bluesky message!

Still here?

Check out GA4Dataform – a product I’ve helped build that turns the GA4 Big Query exports into usable tables!

Related posts:

Google Analytics 4 truncates page location Making sense of Event Parameters in GA4 Make your GA4 life easier: Some powertips! Smart incremental GA4 tables in Dataform

Filed Under: TIL Tagged With: big query, consent mode, cookies, ga4, tagging

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • How to use a pre-hashed email address in GA4 tags in GTM
  • GA4 intraday exports and cookieless pings
  • July 2024 change in collected_traffic_source in GA4 Big Query
  • srsltid parameter, GA4 and Big Query
  • Smart incremental GA4 tables in Dataform

Need help?

  • Contact me

Search

© Copyright Jules Stuifbergen · Powered by Genesis ·