Google Analytics 4, and Firebase Analytics claims to be “designed for the future of measurement”. I’ve seen it widely adopted across startups and large businesses alike; it’s touted as some ideal solution to gaining insights into your user’s behaviour, i’ve found it falls far short of my expectations.
When i started to learn Google Analytics 4 (GA4) i was immediately dissapointed with it, then i doubted myself and decided to REALLY dig in get across it. Now that i’ve used it multiple times across several different projects my opinion remains pretty much the same.
In this article i’m going to cover:
When you’re looking for an analytics platform you want to be able to answer questions like:
Honestly…
You get all of this.
But there’s a catch, actually there’s many catches.
I’ve found that the user count of GA4 is often inaccurate having a larger number of users than is actually in the database.
This is due to GA4 generating a pseudo_user_id
for each user, and if the user clears their cookies or uses a different device then GA4 will generate a new pseudo_user_id
for that user. This means that the same user can be counted multiple times.
The only way to avoid this is to use the user_id
feature of GA4, to send the users ID whenever you log an event to GA4, but this is not obvious, not the default behaviour, and it’s not always possible.
This is a problem because it’s hard to trust the data you’re getting from GA4, I often find myself querying the database directly to get the real user count.
I’ve found that GA4 often misses data, for example, i’ve found that GA4 often misses data from users using ad blockers, or from users who have disabled cookies.
Some modern browsers are also blocking GA4 by default, and it’s not always obvious to the user that they need to enable GA4 to get the full experience of the site.
This means the quantifiable data you’re getting from GA4 is not accurate; you’re not getting the full picture of what your users are doing on your site.
GA4 does not provide real time data, it can take up to 24 hours for data to be processed and available in the GA4 dashboard.
This is a problem because it’s hard to know what’s happening on your site right now, and it’s hard to know if your users are experiencing any issues.
It also makes it a pain to debug issues, because you can’t see the data in real time, you have to wait 24 hours to see if your changes have had any effect.
There are some workarounds to this, for example, you can use the debug view to see the data in real time, but this is functionality is only made available via a browser extension, which is incredibly out of date, and no longer maintained.
I’ve found that GA4 often reports false data, for example, i’ve found that GA4 often reports user locations incorrectly, most likely due to the fact that it’s using IP addresses to determine the user’s location. This can result in false results due to VPNs, or users using a proxy server.
GA4 is not very customisable, for example, i’ve found that it’s hard to track custom events, or to track custom user properties.
The best way to perform advanced queries is to export the data to BigQuery, and then query the data in BigQuery. This results in a really nice interface for querying the data, but it’s astonishing that you have to use a separate tool to get the data you want.
BIGQUERY
The best solution for me is to use google bigquery as the analytics platform.
Using this method you are querying against the real data from your database, your numbers will be accurate, and you can get real time updates.
Because your logs are in bigquery you can query things like the users IP address, device type, and user agent, you can determine locations and identify users who are using VPN’s to avoid falsely skewing your reports.
Because these logs are synced in near real time, you can more effectively debug issues and solve problems.
The one downside to this is that you have to write your own queries, and build your own dashboards, but i’ve found that this is a small price to pay for the accuracy, confidence, and real time data you get from bigquery.