Blog

Why your custom dimension is empty in GA4 reports

Five causes, in the order to check them. The first one you do not check is usually the cause.

A custom dimension that shows "(not set)" or no data in GA4 reports has five common causes. Walk through them in order; the first one to match is usually the answer.

1. The dimension is not registered

Sending a custom parameter to GA4 does not automatically create a dimension. You have to register it in GA4 Admin > Custom Definitions > Custom Dimensions. Pick the parameter name, the scope (event or user), and a display name.

After registration, GA4 takes 24-48 hours to populate the dimension in standard reports. Realtime shows it immediately; the standard reports do not.

2. The parameter name does not match exactly

GA4 parameter names are case-sensitive. checkout_step and checkoutStep are different. The dimension was registered with one name; the events are firing with the other. The data goes into a parameter that nothing is reading.

In GA4 Realtime, use the "Event count by event parameter" view to see exactly which parameter names are being received. Compare against your registration.

3. The parameter value is being truncated

GA4 limits parameter values to 100 characters by default. Longer values are silently truncated, which can result in different reported values from the same source data.

The fix is to truncate at your tagging server before sending, so you control where the cut happens. Picking the first 100 characters of a URL might keep the meaningful prefix; truncating at character 100 of a query string just gives you noise.

4. The dimension is event-scoped but you are looking at user-scoped reports

Event-scoped dimensions appear in event-level reports (Engagement > Events). User-scoped dimensions appear in user-level reports (User Attributes). Trying to view an event-scoped dimension in a user-level report shows nothing.

If you need both views, you can register the same parameter twice: once as event-scoped, once as user-scoped (as long as your tag also sends it as a user property). Two dimensions, same underlying data.

5. Thresholding

For low-volume custom dimensions, GA4 thresholding can suppress the data. The dimension exists, parameters are flowing, but the report shows blank because GA4 cannot show user-identifying data below the privacy threshold.

Sending hashed user_data with your events lifts the threshold. Without it, custom dimensions on small segments will frequently appear empty.

Diagnostic in BigQuery

If you have the BigQuery export, check the events_params field directly:

SELECT
  ep.key,
  COUNT(*) AS events,
  COUNT(DISTINCT ep.value.string_value) AS distinct_values
FROM `project.dataset.events_*`,
UNNEST(event_params) AS ep
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE())
GROUP BY ep.key
ORDER BY events DESC

If your parameter shows up with non-null distinct_values, the data is being sent and the issue is in the GA4 dimension config. If it does not show up at all, the issue is in your tag.