A GA4 Audit Tool That Helps You Verify Your GA4 Setup Instantly

A GA4 Audit Tool That Helps You Verify Your GA4 Setup Instantly

As we move to GA4, it is important to ensure that everything is set up right. In order to make decisions from GA4 data, we need to be able to trust the data. However, most agencies have many clients and very little time.

Wouldn’t it be great if there was a way to automate the GA4 audit process so you can run many audits instantly and for many sites? It would surely be great to know that you can run the audit at any time and confirm that your GA4 property is set up correctly.

We have developed 30 tests (20 tests for all sites and the remaining 10 tests for ecommerce sites). The importance of each test and its logic is shown below.

YES, SHOW ME HOW TO IMPROVE OUR GA4 SETUP

Test 1 – Percentage of Sessions On Primary Domain

The test ensures that the percentage of sessions from your domain is at least 99%. This ensures that your GA4 measurement ID is not used on other domains.

Test Logic

  1. Get total sessions
  2. Get sessions for the current domain
  3. Check if sessions from the domain / total sessions >= 99%. If yes, PASS. If not, FAIL

Test 2 – Sampling

GA4 will sample your data when using explorations, if the number of events exceeds 10 million. This is especially important if you have a high traffic website. If your GA4 property has more than 10 million events, you should consider exporting the data to BigQuery so you can analyze without any sampling.

Test Logic

  1. Get total eventCount
  2. Check if eventCount < 10,000,000. If yes, PASS. If not, FAIL

Test 3 – Query Parameters

There are 2 types of query parameters: technical query parameters and marketing query parameters.

An example of a technical query parameter is the “fbclid” added by Facebook. We don’t want this in GA4.

Marketing query parameters are important and we want them in GA4.

Test Logic

  1. Get total screenPageViews
  2. Get screenPageViews from pagePathPlusQueryString containing “?”
  3. Check if screenPageViews from pagePathPlusQueryString with “?” is < 5%. If yes, PASS. If not, FAIL

Test 4 – Personally Identifiable Information

We are prohibited from sending personally identifiable information to GA4 and doing so can result in GA account suspension. You should not have “email” query parameters.

Test Logic

  1. Get sessions from pagePathPlusQueryString containing the word “email”
  2. Check if any pagePathPlusQueryString contains the word “email” and has sessions. If not, PASS. If yes, FAIL

Test 5 – Self-Referrals

When your domain name shows up as a referral, it makes your data unreliable. This could result in poor marketing decisions, as conversions are not attributed to the correct marketing channels.

Test Logic

  1. Get sessions from medium = referral and hostName = the domain
  2. Check if there are sessions from medium = referral and hostName = the domain. If not, PASS. If yes, FAIL

Test 6 – Custom Campaign Tracking

By default, Google Analytics 4 measures direct traffic, referrals, organic traffic and Google Ads traffic. If these default mediums are the only ones that show up in your GA4 property, it could suggest that you have not tagged all your campaigns correctly, and are missing on data that could help drive your marketing efforts.

Test Logic

  1. Get sessions after excluding mediums “direct”, “referral”, “organic”, and “(none)”
  2. Check if sessions from mediums other than “direct”, “referral”, “organic”, and “(none)” > 0

Test 7 – Mediums With Low Traffic

If you are seeing more than 30 mediums in your GA4 property, there is a high chance that your campaign tracking is not properly set. If the total percentage of mediums that receive less than 1% of traffic is less than 20%, then your campaign tracking is probably set right.

Test Logic

  1. Get total sessions
  2. Calculate 1% of total sessions
  3. Get count of mediums with sessions less than 1% of total sessions
  4. Get total count of mediums
  5. Check if (count of mediums with less than 1% sessions / total count of mediums) < 1%. If yes, PASS. If not FAIL”

Test 8 – Email Referrals

If you get a high number of email referrals in your GA4 property, you probably have inconsistencies in your email link tracking. This will inflate the volume of direct traffic.

Test Logic

  1. Get total sessions
  2. Get number of sessions where medium = referral and source = email
  3. Check if sessions from referral medium and email source is less than 2% of total sessions. If yes, PASS. If not, FAIL

Test 9 – Google Ads Integration

If you are running Google Ads campaigns and GA4 shows no sessions from Google Ads, there is probably an issue with the integration or you haven’t connected GA4 to Google Ads.

Test Logic

  1. Get number of sessions by googleAdsAccountName
  2. Check if sessions from googleAdsAccountName > 0. If yes, PASS. If not, FAIL

Test 10 – Unassigned Traffic

The “unassigned” channel group does not give clarity on where visitors come from. Therefore, if the traffic from the “unassigned” channel group increases, you will find it difficult to analyze and optimize the traffic channels.

Test Logic

  1. Get total sessions
  2. Get number of sessions where defaultChannelGroup = Unassigned
  3. Check if sessions from defaultChannelGroup = Unassigned < 2% of total sessions. If yes, PASS. If not, FAIL

Test 11 – Direct Traffic

When you have a very high percentage of direct traffic, it indicates a measurement issue. There is no right percentage of direct traffic and it could vary from 10% to 30%. 20% is a good ballpark number for direct traffic.

Test Logic

  1. Get total sessions
  2. Get number of sessions where defaultChannelGroup = Direct
  3. Check if sessions from defaultChannelGroup = Direct < 20% of total sessions. If yes, PASS. If not, FAIL

Test 12 – Demographics and Interests Data

With demographics data, you can get deeper insights from the data. However, to get demographics data in GA4, you need to activate Google Signals.

There are reasons why you may choose not to activate Google Signals:

  • Privacy and compliance restrictions
  • Data thresholds because Signals can provide sensitive data

With Google Signals activated, you also activate the following:

  • Cross Platform reporting
  • Remarketing with Google Analytics
  • Advertising Reporting Features
  • Demographics and Interests

Note that you only start getting demographic information from the moment you turn Google Signals on.

Test Logic

  1. Get sessions by userAgeBracket
  2. Check the number of rows returned by the API > 1. If yes, PASS. If not, FAIL

Test 13 – Site Search

If your site has site search functionality, it is important to get search data in GA4. Site search reports give you important insights on which search terms are common among your audience.

With site search reports you can see:

  • What terms users are searching for and products are not on the site
  • If the search terms are returning relevant results to the users
  • If there is content that your audience needs that is not on the site

Test Logic

  1. Get eventCount for eventName = view_search_results
  2. Check if eventCount for eventName = view_search_results > 0. If yes, PASS. If not, FAIL

Test 14 – Content Grouping

Content grouping is a powerful tool for content optimization. With proper content groups in GA4, you can optimize your content and make navigation paths much easier.

Test Logic

  1. Get total screenPageViews
  2. Get number of screenPageViews where contentGroup = (not set)
  3. Check if total screenPageViews – screenPageViews from contentGroup = (not set) > 0. If yes, PASS. If not, FAIL

Test 15 – Manually Collected Events

GA4 can track many events automatically. However, GA4 cannot track all events as there is a wide variation of sites, each with its own needs. There are events that are applicable to your business but are not tracked automatically by GA4.

Test Logic

  1. Get total eventCount
  2. Get eventCount for default events such as “click”, “file_download”, “first_visit”, “form_start”, “form_submit”, “page_view”, “scroll”, “session_start”, “user_engagement”, “video_complete”, “video_progress”, “video_start”, “view_search_results”
  3. Check if total eventCount – eventCount from default events > 10. If yes, PASS. If not, FAIL

Test 16 – Conversions

GA4 automatically tracks the following events as conversions:

  • purchase (web and app)
  • first_open (app only)
  • in_app_purchase (app only)
  • app_store_subscription_convert (app only)
  • app_store_subscription_renew (app only)

In addition to the events that are automatically measured by GA4, you are allowed to define up to 30 additional conversions.

Having conversions other than the default ones will give you a better understanding of your site’s performance.

Test Logic

  1. Get total conversions
  2. Get number of events for purchase conversions where eventName is one of “purchase”, “first_open”, “in_app_purchase”, “app_store_subscription_convert”, “app_store_subscription_renew”
  3. Check if total conversions – purchase conversions > 0. If yes, PASS. If not, FAIL

Test 17 – Non-Ecommerce (not set)

GA4 uses “(not set)” as a placeholder for when it has not received any information for the dimension. There are many reasons why “(not set)” can show up under a dimension.

The following dimensions are the ones we want to keep an eye on and make sure the percentage of “(not set)” does not spiral out of control.

  • Page Title
  • Country
  • Browser
  • Session medium
  • Session source

Test Logic

  1. Get total sessions
  2. Get number of sessions where “unifiedScreenClass”, “country”, “browser”, “medium”, or “source” is (not set)
  3. Check if sessions from (not set) dimensions < 2% of total sessions. If yes, PASS. If not, FAIL

Test 18 – Non-Ecommerce Value

In addition to the count of events, you should set the “value” parameter as well. For purchase events, you already set the revenue, tax, shipping, and other parameters that give you a sense of the impact a certain transaction or promotion has.

Other than purchase events, you can also set value for non-ecommerce events. For example:

  • Say you know how much a lead is worth to your business, you should add the value parameter whenever you get a lead.
  • For an ecommerce site, a user can add a product to a wishlist or remove a product from the wishlist. You can add a value parameter to see how the value of products added to the wishlist versus those removed from the wishlist.

Test Logic

  1. Get total event value
  2. Get event value where eventName is either “view_item_list”, “select_item”, “view_item”, “add_to_cart”, “add_to_wishlist”, “view_cart”, “remove_from_cart”, “begin_checkout”, “add_shipping_info”, “add_payment_info”, “purchase”, “refund”, “view_promotion”, “select_promotion”
  3. Check if total event value – event value from ecommerce events > 0. If yes, PASS. If not, FAIL

Test 19 – Medium Length

When medium and source UTMs are set wrong, you may end up with data points that are difficult to interpret. One of the results of wrong UTMs is inaccurate channel tracking.

Ideally, you should not have UTM names that are one character or more than 30 characters long.

Test Logic

  1. Get sessions from mediums whose names has one character or more than 30 characters long
  2. Check if sessions from above > 0. If yes, FAIL. If not, PASS

Test 20 – Bounce Rate

Different sites have different bounce rates and these depend on a lot of factors. There is no one acceptable bounce rate number.

However, there are cases when very high or very low bounce rates should raise concerns.

If you have any pages with a bounce rate lower than 5% or higher than 95%, it should be investigated. GA4 has another metric called engagement rate that is the inverse of bounce rate. Therefore, another way to say this is that if a page has an engagement rate higher than 95% or lower than 5%, you should investigate it.

Test Logic

  1. Get count of pagePath where bounceRate < 5% or > 95%
  2. Check if the count of pagePath with very low or very high bounceRate = 0. If yes, PASS. If not, FAIL

Test 21 – Ecommerce Purchase Revenue

If you run an ecommerce website, then purchase revenue should be greater than zero in GA4. If you are not getting purchase revenue reported, you should check what is wrong with the setup. Maybe the structure of data has changed or there is an issue with the ecommerce platform.

Test Logic

  1. Get purchaseRevenue
  2. Check if purchaseRevenue > 0. If yes, PASS. If not, FAIL

Test 22 – Ecommerce Non-Purchase Value

While it is common sense to capture the value of purchase events, there are some non-purchase ecommerce events whose value you need to track.

Examples of ecommerce non-purchase events are: add_payment_info, add_shipping_info, add_to_cart, add_to_wishlist, refund, select_item, remove_from_cart, select_item, select_promotion, view_cart, view_item, view_item_list, and view_promotion.

Test Logic

  1. Get eventValue where eventName is either “view_item_list”, “select_item”, “view_item”, “add_to_cart”, “add_to_wishlist”, “view_cart”, “remove_from_cart”, “begin_checkout”, “add_shipping_info”, “add_payment_info”, “refund”, “view_promotion”, “select_promotion”
  2. Check if eventValue from ecommerce non purchase events > 0. If yes, PASS. If not, FAIL

Test 23 – Main Funnel Stages Configured

The main stages of an ecommerce funnel are: view_item, add_to_cart, begin_checkout, and purchase.

If any of the above funnel stages are not showing any session data, then you have a tracking issue.

Test Logic

  1. Get sessions by eventName where eventName is “view_item”, “add_to_cart”, “begin_checkout”, “purchase”
  2. Check if the number of rows returned by the API = 4. If yes, PASS. If not, FAIL

Test 24 – Main Funnel Stages Order

As mentioned above, view_item, add_to_cart, begin_checkout, and purchase are the main funnel stages in ecommerce. The number of sessions as you move from one funnel stage to the next should decrease as some users fall out of the funnel.

GA4 should show that sessions are decreasing from one funnel stage to the next. If a subsequent funnel stage shows higher sessions than the previous one, then there is likely a tracking issue.

Test Logic

  1. Get sessions for each of the following eventName: view_item, add_to_cart, begin_checkout, purchase
  2. Check if sessions for view_item < add_to_cart < begin_checkout < purchase. If yes, PASS. If not, FAIL

Test 25 – Ecommerce Duplicate Transactions

Duplicate transactions arise when every load or reload of the order confirmation page registers as a purchase. When this happens, the same transaction will be pushed to GA4 more than once.

When you get higher numbers of duplicate transactions, your GA4 data becomes unreliable and you have to look elsewhere for ecommerce performance.

Test Logic

  1. Get total count of transactions by transactionId
  2. Get count of transactionId where number of transactions > 1
  3. Check if count of transactionId with more than 1 transactions <= 1% of total transactions. If yes, PASS. If not, FAIL

Test 26 – Tax / Shipping Values

Transaction revenue should be composed of all the costs that go into calculating the final price paid by the user. It should include the item prices, shipping, tax, and any other cost.

However, if you find that the transaction revenue is lower than either the shipping, tax, or other additional order charge, there is a tracking issue.

Test Logic

  1. Get all transactionIds along with their purchaseRevenue, taxAmount, and shippingAmount
  2. Go through each and check if there is any where either taxAmount or shippingAmount is higher than purchaseRevenue
  3. Check if there are more than 3 transactions with taxAmount or shippingAmount higher than revenue. If not, PASS. If yes, FAIL

Test 27 – Transaction With Zero Quantity

When a transaction has zero quantity, you need to check what the issue might be. GA4 shows data based on purchased product attributes such the number of views, add to carts, and quantity purchased.

Therefore, zero quantity indicates that you are missing out on data about which products are bought in a transaction. Missing this data could hide important insights such as products that are usually bought together, knowledge of which can help in conversion rate optimization.

Test Logic

  1. Get count of transactionId where itemsPurchased = 0
  2. Check if the count of transactionId with 0 itemsPurchased > 0. If not, PASS. If yes, FAIL

Test 28 – Ecommerce Item Revenue

While capturing the transaction purchase revenue is important, it is equally important to capture the per-item revenue. If the transaction purchase revenue is being captured but the item revenue is not, this could indicate that the per-item data is not being properly delivered after the purchase event.

Test Logic

  1. Get the count of itemName where itemRevenue = 0
  2. Check if there is a count of itemName with 0 itemRevenue. If not, PASS. If yes, FAIL

Test 29 – Ecommerce Purchase Item Parameters

In addition to the item revenue, there are also other parameters that are important to capture at the item level. These item-level parameters include:

  • item_name
  • Item_category
  • Item_id

Test Logic

  1. Get itemRevenue where either itemName, itemId, or itemCategory = (not set)
  2. Check If count of either of the above dimensions with (not set) > 0. If not, PASS. If yes, FAIL

Test 30 – Payment Processors

You need to exclude third-party payment domains from GA4. Otherwise, your sales will be attributed in the wrong way. The way to do this is by listing all payment provider URLs under the referral exclusion list.

Test Logic

  1. Get count of hostName with transactions >= 2 from medium = referral and purchaserConversionRate > 10%
  2. Check if the above count = 0. If yes, PASS. If not, FAIL

Summary

As we move from Universal Analytics to GA4, we need to make sure that we can trust the data. Our GA4 audit tool will run a battery of 30 tests to make sure that you can trust data from your GA4 property.