We understand the frustration caused if key metrics like User and Sessions don't match across Uplifter and Google Analytics 4 (GA4) reports.
In this article we explain what data we extract from GA4, how to minimise or/and explain discrepancies.
We extract data at a very granular level to see how well an individual link (complete landing page + UTMs) is performing. Its very hard to build the same level of granularity in Google Analytics 4 reports.
Most reports use are aggregates of Source / Medium / Campaign, which may include some non Uplifter link traffic and explain why we don't match exactly.
What data we extract from the Google Analytics API?
We use the Google Analytics Data API and extract the data around 4 am (at the timezone set at the GA4 property level) every day. To get a useful dataset we pull historical data for campaign links starting from today - 3 years.
GA4 acknowledge that there is a processing delay on event data of up to 72 hours. To mitigate against this, during the daily extract from the API we remove the previous 72 hours worth of data and pull it again. This allows us to eventually keep up with the figure that is available within Google Analytics.
However, for recent data (within this 72-hour window), additional processing may occur between the time our script runs and when you view the data in Google Analytics, leading to slight discrepancies in the Google Analytics UI.
Dimensions (used to give us granular link level data):
- Date
- Hostname (eg. https://uplifter.ai)
- Landing page + Query string (eg. /homepage?other_parameters=example)
- Session source
- Session medium
- Session campaign
- Session manual ad content
- Session manual term
- Session campaign ID
Landing page and query string is important because it is currently the only way to get the "new" utm fields that are available (utm_creative_format etc)
Metrics:
- Active users
- Sessions
Additional metrics can be added via the report module. For calculated metrics (such as bounce rate or average time on site), the raw totals used in the calculation are stored, and the final value is computed when generating the report. This ensures accuracy by preventing calculations from being derived from pre-aggregated averages.
Filters:
Google Analytics stores a lot of data. In order to be able to efficiently return data about campaign link performance, we have to restrict our API extract to only data about individual campaign links. We do this by applying the following filters:
1. Excluding Data with Empty Key UTM Fields
Data is excluded if the following fields are all empty:
- sessionSource
- sessionMedium
- sessionCampaignName
- sessionManualTerm
Purpose: This filter removes data that does not have any standard utm values.
2. Excluding Referral Data with Empty Source and Medium
Data is excluded if:
- sessionCampaignName is (referral)
- sessionSource is empty
- sessionMedium is empty
Purpose: This filter removes referral data that is misclassified or missing key information, ensuring only properly tagged referral data is included.
3. Excluding Data with Missing Tracking Information
Data is excluded if:
- sessionSource is empty
- sessionMedium is empty
- sessionCampaignName is empty
Purpose: This ensures that data points lacking tracking information (e.g., missing UTM parameters) are excluded, preventing incomplete data from skewing the results.
4. Excluding Data with Invalid Hostnames
Data is excluded if:
- hostname is empty
- hostname is (other)
Purpose: This filter ensures that only data with valid hostnames is included, removing data points with incomplete or invalid hostname information.
5. Excluding Organic, Referral, and Direct Data
Data is excluded if:
- sessionMedium is (organic)
- sessionMedium is referral
- sessionMedium is (direct)
Purpose: This filter focuses the analysis on paid or specifically tracked campaigns, excluding organic, referral, and direct data that may not be relevant for the intended analysis.
6. Excluding Data with Empty Landing Page Information
Data is excluded if:
- landingPagePlusQueryString is empty
Purpose: This filter ensures that only data with identifiable landing pages is included, removing data points that lack this key information.
7. Excluding Data with Missing Search Terms
Data is excluded if:
- sessionManualTerm is (not provided)
Purpose: This filter removes data from encrypted search terms, such as those from Google organic search, which cannot be directly attributed to specific search keywords.
8. Excluding Direct Data
Data is excluded if:
- sessionCampaignName is (direct)
Purpose: This filter ensures that direct data, which can often be ambiguous, is not included in the dataset to focus on tracked campaigns.
9. Excluding Organic Data
Data is excluded if:
- sessionCampaignName is (organic)
Purpose: This filter excludes organic search data to ensure that only campaign-tagged data is included in the analysis.
The Google Analytics UI is not able to accommodate this many filters at once, which can lead to a higher number in the interface as it is including non-campaign traffic. It is possible to apply more filters from a Looker Studio report, but it is currently based on a previous version of the API and less filters are available.
How to minimise discrepancies
First check you are comparing the same:
- Google Analytics Account & Property
- Date range
- Metrics
How to explain other discrepancies
Users going across multiple website domains in one GA4 property can lead to multiple sessions, which aren't always deduped in GA4 reports and the API. We extract the (hostname) dimension, to make sure we are only counting the first landing page hostname dimension.
If Smart Links are enabled (using the up_id parameter), we ignore the landing page URL and other parameters to aggregate metrics for a single Uplifter link.
- This means if the user clicks on an Uplifter link to an English language URL but the CMS redirects it to a French URL - we still allocate sessions and users to the Uplifter link.
- This means if additional UTMs/Query parameters are added by third parties, we still allocate sessions and users to the Uplifter link.
Comments
0 comments
Please sign in to leave a comment.