Knowledge base article
Fixing (organic) and (not set) Google Ads Campaign Names in GA4
Are you facing issues with inaccurate campaign names in your GA4 reports for Google Ads traffic? You are not the only one. Since the summer of 2024, Google Ads traffic that arrives with a GCLID can show up with (not set) or (organic) as its campaign in GA4. As of October 2026 Google has not published a fix or an official explanation. This guide will help you work around the problem and get accurate Google Ads campaign attribution in GA4.
Understanding the Issue
Since 2024, many users have reported that Google Analytics 4 incorrectly displays campaign names as “(organic)” or “(not set)” for Google Ads traffic while the source / medium is still google / cpc. This is obviously not helpful, and it makes it harder to analyze and optimize your campaigns. Practitioners link it to consent: it mostly affects visitors who deny ad_user_data or have turned off personalized ads in their Google account. Rule out the usual causes of (not set) first: an unlinked Google Ads account, auto-tagging switched off, or redirects that strip the GCLID. How do you know if you are affected?
Verifying the Problem
- Go to Reports, then Acquisition > Traffic acquisition.
- Change the primary dimension from “Session default channel group” to “Session source / medium”.
- Filter for visitors from “google / cpc”.
- Add “Session campaign” as a secondary dimension.
- If you see “(organic)” or “(not set)” values, you’re affected by this issue.
The solution
Luckily there are 2 different ways to work around this issue. Let’s have a look at them.
Using manual UTM parameters
Using UTM parameters in your Google Ads campaigns is crucial for accurate tracking. I always recommend adding these in case auto-tagging does not work properly (especially for socials). GA4 stores the utm_campaign value in the “Session manual campaign name” dimension.
Adding them by hand is a lot of work across many campaigns, and they go out of date when a campaign is renamed. UTM parameters also don’t fix every session: some can still show up as (organic) or (not set). The script below automates the same UTM method.
Automatically with Jan Zdarsa’s Script
Google Ads has no ValueTrack parameter for the campaign name, so a tracking template alone can’t do this. Jan Zdarsa’s script stores each campaign name in a custom parameter and sets a tracking template with UTM parameters. This script is designed to:
- Automatically update every campaign’s tracking template with the correct UTM parameters.
- Ensure accuracy even when campaign names change.
- Run hourly to keep your data up-to-date.
Be mindful that this script covers Search, Display, Shopping and Performance Max. It doesn’t support Demand Gen and Video campaigns, so tag those manually.
How do you implement the script?
- Obtain the script from Jan Zdarsa’s GitHub repository.
- In Google Ads, click Tools, open Bulk actions and choose Scripts. Add a new script, paste the code from
utm_tracking_single_account.js(orutm_tracking_mcc_max_50_accounts.jsfor a manager account with up to 50 accounts), authorize it and schedule it hourly. - Keep auto-tagging enabled in your Google Ads account settings.
Great, now you have set up the script and are well on your way to mitigating this issue. Be sure to keep an eye on updates of the script, and check the report above every few months to see whether Google has fixed the issue on its side.


