You configure a new tag in Google Tag Manager. You test it in preview mode, and the event fires perfectly. You check the GA4 DebugView and see your custom event parameters coming through exactly as planned. You formally register the custom dimension in your GA4 Admin panel and log off for the day feeling productive.
But when you check your GA4 Explorations the next morning, your new custom dimension column is entirely filled with a frustrating value: "(not set)".
This is one of the most common issues analysts face. The column exists because you created it, but the data is completely missing. Even if your implementation is flawless on the website side, GA4 will fail to display your parameters if a few specific conditions are not met.
Here are the three reasons why your registered GA4 custom dimensions are showing as "(not set)" and how to fix your configuration.
Reason 1: A Case-Sensitivity Mismatch or Typo
Google Analytics 4 is strictly case-sensitive. The event parameter name you type into Google Tag Manager must match the event parameter name you register in the GA4 Admin interface character for character.
If you set up a parameter in GTM called Author_Name (with capital letters), but you register the event parameter in GA4 as author_name (all lowercase), the systems will not communicate. GA4 treats these as two entirely different data points. Because the exact lowercase parameter does not exist in the incoming data stream, GA4 leaves your custom dimension column blank, which outputs as "(not set)".
How to Fix a Case-Sensitivity Mismatch
Open your GA4 Admin panel, go to Custom definitions, and check the "Event parameter" column. Compare this exactly to the parameter name configured in your GTM tag. If there is a typo, capitalization difference, or an accidental space, you must edit the GA4 custom definition to match GTM perfectly.
Reason 2: The Parameter Is Not Attached to Every Event
In GA4, event parameters are attached to specific events, not to the user's entire session.
Let us say you successfully set up a parameter called pricing_tier and attach it exclusively to the generate_lead event. That works perfectly.
However, if you build a Freeform Exploration and add "Event name" and your new "Pricing Tier" custom dimension to the report, you will see "(not set)" next to events like page_view, session_start, and user_engagement. Why? Because those specific events were never programmed to carry the pricing_tier parameter. GA4 has to put something in those rows, so it defaults to "(not set)".
How to Fix the Missing Parameter Issue
If you only want to see the parameter data, you need to filter your report. Add a filter to your Exploration where "Event name" exactly matches the specific event that carries your parameter (in this case, generate_lead). The "(not set)" rows will immediately disappear.
Reason 3: You Are Looking at Historical Data
GA4 custom dimensions are not retroactive.
When you register a new custom dimension in the GA4 Admin panel, it acts as a starting line. GA4 will only process and store that specific parameter for events that occur after the exact moment of registration.
If you register a custom dimension on a Wednesday, but set your report's date range to look at the last 30 days, GA4 will display "(not set)" for all the data collected before that Wednesday. Furthermore, it takes GA4 standard processing time (usually 24 to 48 hours) for newly registered dimension data to fully populate in the interface.
How to Fix the Historical Data Issue
Adjust your report's date range to start on the day after you registered the custom dimension. If you just registered it today, you will simply have to wait until tomorrow to see the data populate accurately.
How to Prevent (not set) Errors at Scale
Reason 1 (typos and case mismatches) is the most frustrating error because it is entirely human. If you manage analytics for multiple clients or a portfolio of websites, setting up custom dimensions involves a tedious workflow. Every time you roll out a tracking strategy, you have to manually type out the exact same parameters across five, ten, or twenty different GA4 properties.
A single capitalization error during this manual data entry will trigger the "(not set)" issue and corrupt your client reporting.
This workflow gap is exactly why we built the Custom Definitions Copy/Paste tool into the GA4 Optimizer extension.
When you install the free extension, it adds "Copy" and "Paste" buttons directly to your GA4 Custom definitions page. You can set up your custom dimensions flawlessly on a single test property, click Copy, and then instantly paste those exact configurations into every other property you manage.
The extension transfers the dimension names, the exact event parameters, and the correct scopes in seconds, guaranteeing perfect case-matching every single time.
Clean Up Your Data Collection
Seeing "(not set)" in your reports is a headache, but it is highly solvable. By checking for case-sensitivity, filtering your reports for the correct events, and understanding GA4 processing timelines, you can clean up your analysis quickly.
To ensure you never make a data-entry typo during setup again, install the GA4 Optimizer extension for free and automate your custom dimension workflow today.
Frequently Asked Questions
Why is my GA4 custom dimension showing as (not set)?
A custom dimension shows as (not set) when GA4 cannot find matching data for that specific row. This usually happens due to a case-sensitivity mismatch between GTM and GA4, looking at historical data before the dimension was registered, or including events in your report that do not carry that specific parameter.
Is Google Analytics 4 case sensitive for event parameters?
Yes, GA4 is strictly case-sensitive. If you send an event parameter from Google Tag Manager as 'Author_Name' but register it in the GA4 Admin panel as 'author_name', GA4 will not match them. The data will be ignored, and your custom dimension will show as (not set).
Are GA4 custom dimensions retroactive?
No, GA4 custom dimensions are not retroactive. They only begin collecting and processing data from the exact moment you register them in the Admin interface. Any data collected prior to registration will appear as (not set) in your reports.