If you rely on Google Analytics 4 (GA4) and noticed that some of your Google Ads traffic is showing up under the campaign name “(organic)”, you might be wondering why this is happening. After all, Google Ads is a paid channel, and organic traffic is the exact opposite. So, what’s causing this confusing attribution?
In this blog post, we’ll dive into the key reasons why GA4 may label some of your Google Ads traffic as “(organic)” and what you can do to fix or prevent this issue.
How to check if you are experiencing this problem?
Fortunately, it is relatively easy to find out whether you are experiencing the same issue. You can investigate the Traffic Acquisition report in GA4. Then add session: if you see a lot of traffic coming from “Paid Search” (or “google / cpc” if your primary dimension is session source / session medium) in combination with the session campaign labelled as “(organic)”, your data is incomplete. Although you can see the campaign performance in Google Ads, the focus is on creating a unified data ecosystem where all sources of traffic and campaign data are aligned into a single view. This prevents discrepancies, ensuring that you have one version of the truth for better decision-making.
Why does Google Ads traffic get classified as organic?
Unfortunately, we are not sure what is causing this problem. This topic on the Google forum has users speculating that it might be caused by two problems:
- Google Consent Mode: in essence, when a user does not provide consent, Google has trouble reporting on session campaigns due to privacy reasons.
- Latest releases in Google Analytics: somewhere around June 10th, Google made some updates to their attribution models in GA4. This might be the root of the problem. We advise you to frequently check this topic for new releases and bug fixes.
Two ways to fix the problem
Currently, we do not know if or when Google will fix the issue. To prevent GA4 from classifying your Google Ads traffic as “(organic)”, you can follow either of these steps:
Manually or automatically adjust tracking templates in Google Ads
To prevent misclassification of Google Ads traffic as “(organic),” you can manually or automatically adjust the tracking templates in your Google Ads campaigns. By ensuring the correct parameters (such as utm_campaign and utm_term) are consistently applied to your ads, you can prevent GA4 from incorrectly categorising the traffic. This can be done by altering the tracking template of each Google Ads campaign. An example would look like this:
{lpurl}?campaign_name={campaign}&campaign_id={campaignid}&source=google&utm_campaign={campaign}&utm_medium=cpc&utm_source=google
Moreover, there are various scripts and tools available that can automate this process, reducing the chance of errors.
Transform the raw data in BigQuery
To fix the issue of GA4 misclassifying Google Ads traffic as “(organic)”, you can also use BigQuery to correct the attribution:
- The first step is to create a BigQuery project in Google Cloud.
- Once your BigQuery project is set up, the GA4 property can be linked to BigQuery.
- Next, you’ll need to enable Google Ads Data Transfer to BigQuery. Make sure to include the GCLID (Google Click ID) in your transfer settings, as this identifier will help you map ad clicks to campaigns.
- By running SQL queries, you can replace session campaign “(organic)” with the actual campaign name for sessions that match a GCLID.
- After cleaning up your data, you can build custom dashboards in Looker Studio to visualise the corrected data.
This comprehensive approach not only resolves the misclassification issue but also provides full control over your data. Below you will find an example of a query that matches ad clicks data (GCLID) with GA4 sessions:
WITH GoogleAdsCampaignLabel AS (
SELECT
cs.click_view_gclid AS gclid,
ca.campaign_name AS campaign_name
FROM `project.p_ads_ClickStats_1234567898` cs
LEFT JOIN (
SELECT *
FROM `project.ads_Campaign_1234567898`
WHERE _DATA_DATE = (SELECT max(_LATEST_DATE) FROM `project.ads_Campaign_1234567898`)
) ca
ON cs.campaign_id = ca.campaign_id
),
GoogleAdsGA4 AS (
SELECT
ar.user_session_hash_id,
ar.default_channel_grouping,
CASE
WHEN ar.session_campaign IS NULL
OR ar.session_campaign = '(organic)'
OR ar.session_campaign = '(referral)'
THEN gacl.campaign_name
ELSE ar.session_campaign
END AS session_campaign,
ar.report_date AS date,
SUM(ar.pdp_views) AS items_viewed,
SUM(ar.add_to_carts) AS add_to_cart,
SUM(ar.total_transactions) AS orders,
SUM(ar.revenue) AS revenue
FROM
`project.sandbox.analytics_reporting_def` ar
LEFT JOIN
GoogleAdsCampaignLabel gacl
ON
ar.session_gclid = gacl.gclid
WHERE
ar.session_medium = 'cpc'
AND ar.session_source = 'google'
GROUP BY
ar.user_session_hash_id,
ar.new_user,
ar.default_channel_grouping,
session_campaign,
ar.report_date
)
SELECT
session_campaign,
date,
SUM(items_viewed) AS total_items_viewed,
SUM(add_to_cart) AS total_add_to_cart,
SUM(orders) AS total_orders,
SUM(revenue) AS total_revenue
FROM
GoogleAdsGA4
GROUP BY
session_campaign,
date
Note that we are referring to `project.sandbox.analytics_reporting_def` in the subquery. Basically, we made our own GA4 reporting table in BigQuery as exporting data to BigQuery can be more cost-effective in the long run, as you only pay for what you query.
Final thoughts
GA4 is a powerful tool, but it does require proper setup and monitoring to ensure that your campaign attribution is accurate. By following the practices mentioned above, you can avoid these common pitfalls and ensure your traffic data is properly attributed. The first solution is relatively easy to implement. So why should you choose the second solution? Using BigQuery offers deeper insights and more flexibility in analysing marketing performance.
While the first solution helps to track campaign data, BigQuery allows you to work with raw, event-level data, create custom reports, and build advanced attribution models. It also enables you to store data indefinitely, enrich it with external sources, and handle large datasets efficiently. For businesses looking to scale their analytics, BigQuery is a powerful complement to GA4’s standard reporting.
Happy tracking!
Follow The Data Story on LinkedIn to stay up to date on our blogs and more!