When you send a custom parameter with a GA4 event — say, article_author or user_plan_type — GA4 stores the raw value in the event data. But the parameter won't appear as a dimension you can use in reports or Explore until you register it as a custom dimension in GA4 Admin. This two-step requirement is the most common source of "why can't I see this data?" questions.

Event-Scoped vs User-Scoped Dimensions

Every custom dimension has a scope — either event or user — and the choice has significant consequences for how the data appears in reports.

ScopeWhat it representsWhen to useExample
Event-scoped A property of a specific event occurrence When the value varies per event — page category, product name, form type, search term article_category sent with each page_view event
User-scoped A property of the user that persists across sessions When the value describes the user and doesn't change per event — plan type, customer tier, logged-in status user_plan_type set once when the user logs in

The error most implementations make: registering a user property as an event-scoped dimension, or registering an event parameter as user-scoped. The data arrives in GA4 but appears blank or inconsistent in reports because the scope doesn't match how the parameter was sent.

Scope cannot be changed after registration. If you register a dimension with the wrong scope, you have to archive it and create a new one with the correct scope. The original slot isn't immediately freed — archived dimensions count against your limit until GA4 purges the data, which can take time. Choose scope carefully before registering.

The Limits You Need to Know

GA4 enforces hard limits on custom dimensions and metrics per property:

These limits sound generous until you inherit a property from a previous team who registered dimensions for every parameter they ever sent — including test parameters, temporary campaign flags, and parameters that were renamed three times and registered each time. Properties that are 2–3 years old often have 30–40 of their 50 event-scoped slots consumed by dimensions nobody actively uses.

GA4 360 (the paid version) has higher limits, but for most organisations on the free tier, slot conservation matters. Before registering a new custom dimension, audit what's already registered and archive anything unused.

What's Worth Registering

Not every event parameter needs to be a custom dimension. Parameters used only for deduplication (like transaction_id), debugging (debug_mode), or internal routing don't need to be reportable. Register custom dimensions for parameters you'll actually use as report dimensions or Explore breakdowns.

High-value event-scoped dimensions to consider

High-value user-scoped dimensions to consider

Custom metrics worth registering

How to Audit Your Custom Dimensions

Go to Admin → Custom Definitions. You'll see all registered custom dimensions and metrics. For each one, work through these questions:

  1. Is the corresponding parameter still being sent in events? Check the Events report and look for the parameter name in recent event data. If it's not appearing in recent events, the dimension may be tracking a parameter from an implementation that was changed or removed.
  2. Does the scope match how the parameter is sent? If it's event-scoped but is being sent as a user property (via gtag('set', 'user_properties', {...})), the values will be blank in reports.
  3. Is it being used in any active reports, Explore explorations, or audience definitions? If nobody is querying a dimension, it's occupying a slot for no purpose.
  4. Is the name still accurate? Dimensions often outlive the naming convention of the team that created them. A dimension called cd1 or custom_dim_test_aug2024 is occupying a slot with no clear ownership.

Archive dimensions that fail any of these checks. You won't recover the slot immediately, but you'll stop the slot from being a permanent fixture and can free up capacity over time.

Registering a custom dimension does not backfill historical data. Only data collected after the registration date will appear under that dimension in reports. If you register article_author today, you can report on it going forward — but last year's articles won't have author data in GA4 even if the parameter was being sent. Plan registrations before you need the historical data, not after.

GA4 Health Check checks your custom dimension registration against event parameter data to flag dimensions that are registered but not receiving values, and parameters being sent but not registered. Run a 60-second audit to see your custom definition status.

Travis Gunn
Founder of GA4 Health Check. Working with Google Analytics since 2013, with over 250 clients audited across almost every industry vertical. 100% Job Success on Upwork for over a decade.