Custom dimensions in GA4: audit and governance guide

Key Takeaway

Custom dimensions are only useful when they have consistent naming, correct scope, and are actually populated with values. High cardinality, duplicate definitions, and (not set) values are the most common governance failures.
Intermediate

Custom dimensions in GA4 are the bridge between your raw event parameters and your reporting interface. Without them, event parameters exist in your data collection pipeline and in BigQuery, but they are completely invisible in standard reports, explorations, and any tool connecting through the GA4 Data API, including Looker Studio. Managing them well is a governance challenge as much as a technical one. Quotas run out. Outdated dimensions occupy slots. PII leaks through parameters that should never have been registered. This guide explains how custom dimensions work, how to audit them effectively, and how to build governance practices that keep them healthy over time.

50

Event-scoped custom dimension slots per standard GA4 property

GA4 property limit

25

User-scoped custom dimension slots per standard GA4 property

GA4 property limit

10

Item-scoped custom dimension slots (ecommerce product attributes)

GA4 property limit

Controlled

Report-facing dimensions should avoid uncontrolled cardinality

How custom dimensions actually work

In GA4, every interaction is an event, and events carry parameters as key-value pairs. When you send a purchase event with a payment_method parameter, that data is collected and stored. But it is invisible in the GA4 reporting interface until you register payment_method as a custom dimension in Admin > Custom Definitions.

Registration does two things: it makes the dimension available in reports from that point forward, and it locks in the scope. The registration is not retroactive. If you send a parameter for six months and only register it in month seven, you have six months of collected data that will never appear in your standard reports. The data exists in BigQuery, but not in the GA4 interface. Pair this work with a broaderGA4 custom events auditso the events sending these parameters are themselves consistent.

Three scopes and why getting them wrong is costly

Event-Scoped
User-Scoped
What it captures
Values that vary per event, content_type, payment_method, form_name
Attributes that describe the user, subscription_tier, account_type, A/B variant
When to use
When the value changes per interaction and you need to analyse it at the event level
When the attribute persists across sessions and you want it on every user's events
Persistence
Attached only to the specific event that carried the parameter
Applies to all subsequent events from that user on that device
Slot limit
50 slots (standard property)
25 slots (standard property)
How to set
Sent as an event parameter in the event payload
Set via gtag('set', {'user_properties': {'property_name': 'value'}}), separate from events
Common mistake
Registering user-level attributes here, only the event that sent the param carries the value
Sending via event parameter on a single event, all other events lose the attribute

Item scope

Item-scoped dimensions are part of the items array in ecommerce events. They describe individual products: item_colour, item_size, item_rating. You get 10 item-scoped custom dimension slots. These are used for product-level reporting and only surface in ecommerce reports.

Conducting a custom dimension audit

Step 1: map current registrations against active usage

Go to Admin > Custom Definitions. Export or document every registered dimension. For each one, note the parameter name, the scope, when it was registered, and the last data it received. You can check recent data in Explorations by adding the dimension and checking if it returns values for the past 30 days. Any dimension with no recent data is either obsolete or broken.

Step 2: check for unregistered parameters that need reporting

Review your GTM container or tracking implementation documentation. List every event parameter being sent to GA4. Compare this list against your registered custom dimensions. Parameters on that list that are not registered are invisible in reports even though the data is being collected. Prioritise registration based on which parameters are needed for active reporting requirements, and cross-reference the broaderGA4 property configuration checksto confirm the property itself is set up to surface them.

Step 3: identify scope mismatches

Any parameter that describes a user attribute but is registered as event-scoped is a scope mismatch. Common examples: logged_in_status, customer_segment, subscription_plan, A/B test variant. These should be user-scoped dimensions set via user properties, not event parameters. Misscoped dimensions mean you lose the context on every event where that property was not explicitly sent, which is one of the leading causes of(not set) values appearing in GA4 reports. Note that you cannot change the scope of a registered custom dimension — you must delete the existing registration and recreate it with the correct scope.

Step 4: check for PII in dimension values

Navigate to an Exploration and add your custom dimensions one by one. Look at the values they are returning. Any dimension that contains email addresses, names, phone numbers, or any other personally identifiable information is a serious compliance issue. GA4's terms of service prohibit sending PII to the platform. Remove these registrations and modify your implementation to exclude the offending parameters.

Want to automatically scan your custom dimensions for scope mismatches and PII?

Step 5: cardinality review

High-cardinality dimensions cause the (other) row problem in GA4 reports. Specific product SKUs, individual page URLs, session IDs, and order IDs are classic examples. In Explorations, high-cardinality dimensions can trigger row limits quickly and make reports unreliable, similar to the issues described inincompatible dimensions and metrics combinations. Consider whether the parameter can be redesigned as a category that is more useful for reporting.

Governance practices to keep custom definitions healthy

  • Registration as a change management step: Before any new event parameter enters production, it must go through a review that includes: does a native dimension already cover this, what is the scope, will it ever have high cardinality, does it need to appear in standard reports or is BigQuery sufficient?
  • Quarterly cleanup: Audit dimensions that are no longer active or no longer needed. Archive or delete those that are clearly obsolete so quota is available for new reporting requirements.
  • Documentation: Maintain a tracking plan that maps every custom dimension to the event that sends it, the expected value range, the business owner, and the date it was registered. This prevents duplicate registrations and scope errors.

Custom dimensions: audit, fix, and govern

Validate

  • Go to Admin > Custom Definitions and document every registered dimension, name, scope, parameter name, and date registered
  • In Explorations, add each dimension and check if it has returned data in the past 30 days, dimensions with no recent values are either obsolete or broken
  • List every event parameter in your GTM container or tracking implementation and compare against registered dimensions, unregistered parameters are invisible in reports
  • Inspect dimension values in Explorations for PII: email addresses, names, phone numbers, or any identifiable strings
  • Check quota usage: count event-scoped, user-scoped, and item-scoped registrations against the 50 / 25 / 10 slot limits

Fix

  • Delete or archive dimensions that are clearly obsolete so quota slots are available for current reporting needs
  • Re-register user-level attributes (subscription_plan, customer_segment, A/B variant) as user-scoped dimensions and update implementation to use gtag('set', {'user_properties': {'property_name': 'value'}})
  • Remove any registrations that expose PII and update the implementation to exclude those parameters from being sent to GA4
  • Redesign high-cardinality parameters as categories before registering, use product_category instead of product_sku, content_type instead of full page title
  • Register parameters that are actively sent but not yet registered, prioritised by reporting need

Watch for

  • The (other) row appearing in Explorations, signals high-cardinality dimensions hitting row limits
  • Quota usage getting tight enough that new reporting requirements cannot be registered cleanly
  • New tracking implementations that register parameters without a governance review
  • User-level attributes showing up with data gaps, only appearing on specific events rather than all events for a user

Custom dimensions audit checklist

  • All registered custom dimensions are receiving data in the past 30 days
  • No user-level attributes are registered as event-scoped dimensions
  • No PII is present in any dimension values
  • All actively sent parameters that need reporting are registered
  • Dimensions with high cardinality are reviewed and redesigned if needed
  • Quota usage is monitored before registration capacity becomes a constraint
  • A tracking plan document maps every dimension to its source event and business owner

How healthy are your custom dimensions?

GA4Audits can flag missing registrations, scope mismatches, and dimension hygiene issues, but teams should still review definitions against their reporting plan.

Audit findings should be reviewed by a qualified analyst before they are used for major reporting, media, or implementation decisions. Review your findings

GA4 Audits Team

GA4 Audits Team

Analytics Engineering

Specialising in GA4 architecture, consent mode implementation, and multi-layer audit frameworks.

Share