GA4 gives you 50 event-scoped custom dimensions, 25 user-scoped custom dimensions, 50 event-scoped custom metrics, and 5 user-scoped custom metrics. Most properties use a fraction of these and still manage to fill the wrong ones with junk that nobody reports on.
The setup itself is trivial. The real question is what to register, why, and how to structure it so that the data is actually useful when you open Explorations six months later.
This post covers scope in plain terms, the strategic decisions around quota, and the practical reporting uses that justify each type of dimension and metric.
What Custom Dimensions and Metrics Actually Are
GA4 tracks everything as events. Events have parameters. Parameters are the raw data attached to an event — things like product_name, order_value, user_tier, article_author, video_duration.
These parameters are collected by your tags and stored in GA4’s raw event data. But they are not automatically visible in reports. To use a parameter in reports, Explorations, or audiences, you have to register it as a custom dimension or metric in the GA4 Admin.
Registration does two things: it tells GA4 to surface that parameter in the reporting interface, and it assigns a scope that determines how the parameter is associated with users and events.
Without registration, the raw data exists in BigQuery (if you have the export set up) but is invisible in the GA4 UI.
Scope: The Most Important Decision You Will Make
Every custom dimension has a scope: event, user, or item. Getting this wrong means the data is attached to the wrong unit of analysis, and the numbers you see in reports will not mean what you think they mean.
Event Scope
An event-scoped dimension captures a value that is specific to a single event. It answers the question: what was true at the moment this event happened?
Examples:
page_typeon apage_viewevent (what type of page was viewed)form_idon aform_submitevent (which form was submitted)video_percenton avideo_progressevent (how far through the video)coupon_codeon apurchaseevent (which coupon was used)
Event-scoped dimensions are used to break down event counts and conversion rates. They appear as dimensions in Explorations and standard reports and let you segment: “how many purchases used a coupon vs not” or “which page type had the highest scroll depth.”
Quota: 50 event-scoped custom dimensions per property.
User Scope
A user-scoped dimension captures a persistent attribute of a user — something that is true about them across sessions, not just at a single moment. GA4 stores the most recently set value and associates it with the user going forward.
Examples:
account_type(free, pro, enterprise)loyalty_tier(bronze, silver, gold)signup_source(the acquisition source at the time of registration)customer_segment(set by your CRM, passed to GA4 via user properties)
User-scoped dimensions are used to segment audiences and analyze behavior differences across user groups. They are the right tool when you want to answer: “do pro users convert at a higher rate than free users across all sessions?”
Quota: 25 user-scoped custom dimensions per property.
Item Scope
Item-scoped dimensions attach to the product items array in ecommerce events. They let you add product attributes beyond the standard GA4 ecommerce fields.
Examples:
item_coloritem_sizeitem_margin(gross margin percentage, if you want to track profitability by product)item_season(collection or season tag for fashion retailers)
Item-scoped dimensions appear in ecommerce reports and let you break down revenue and purchases by product attributes that GA4 does not track by default.
Quota: 10 item-scoped custom dimensions per property.
How to Register a Custom Dimension
In GA4: Admin > Data display > Custom definitions > Create custom dimension.
Fields:
- Dimension name: What you want it called in reports. Use human-readable names with spaces (“Page Type,” “Coupon Code”) — you cannot easily rename these later without losing historical report configurations.
- Scope: Event, User, or Item.
- Event parameter / User property: The exact parameter name as it appears in your data layer or tag. Case-sensitive.
- Description: Optional but worth filling in. Future-you (or a colleague) will need to know what “ua_segment_v2” means.
Custom metrics follow the same flow but require a unit type (Standard, Currency, Distance, Time).
The Quota Problem: What You Should Never Register
50 event-scoped dimensions sounds like plenty until a team of three people starts registering dimensions for every analytics request without a governance process.
Do not register:
- Parameters you are collecting but not sure you need yet. Collect them, evaluate in BigQuery or the DebugView, register later when you have a specific reporting need.
- Parameters with high cardinality that you will not filter or group.
page_urlas a custom dimension is a waste of a slot — GA4 already haspage_locationbuilt in. - Duplicate parameters under different names. Agree on naming conventions before registering.
- Test parameters pushed during development. These fill quota and show up as noise in reports.
- Parameters that only exist for one-off analyses. Use BigQuery for one-time exploration; reserve GA4 custom dimensions for ongoing, repeated reporting needs.
Do register:
- Parameters you will use in standard reports weekly.
- Parameters you need for audience definitions (login status, account type, plan tier).
- Parameters that segment your core conversion events (purchase type, form type, content category).
- Parameters tied to business KPIs that stakeholders ask about regularly.
The frame is: if you cannot name a specific report or audience that needs this dimension, do not register it.
Strategy for Event-Scoped Dimensions
The most useful event-scoped dimensions segment your key events by a property that changes the interpretation of the event.
Page classification:
Register a page_type dimension (values: homepage, product, category, blog, checkout, confirmation). Push it on every page_view event. This turns every GA4 standard report into a segmentable view — you can now see bounce rate, engagement, and conversion paths broken down by page type, not just individual URLs.
Content attributes for media sites:
If you publish content: article_author, content_category, content_tag, word_count. These let you answer “which author drives the most engaged sessions” or “which content category leads to the most conversions.”
Conversion qualifiers:
On purchase events: coupon_code, payment_method, is_first_purchase (true/false). These let you analyze order quality and discount dependency without leaving GA4.
Form identification:
If you have multiple forms: form_name or form_id on your form_submit event. Lets you break down form conversion rates by form in a single report instead of filtering by page URL for each form separately.
Strategy for User-Scoped Dimensions
User-scoped dimensions are most valuable for segmenting behavior by account type, acquisition context, or CRM attributes.
Account/subscription type:
If you have free and paid tiers, a plan_type user property set at login is one of the highest-value dimensions in a SaaS GA4 property. Every report becomes segmentable by plan — engagement, retention, feature adoption.
Acquisition context:
signup_source set at registration time (not the session source — the source that was attributed to the account creation) lets you analyze long-term retention and LTV by acquisition channel. This is the dimension that answers “are users from organic search more valuable than users from paid campaigns?”
CRM segments:
If your backend syncs customer segments to GA4 via the Measurement Protocol or User-ID feature, register those segments as user-scoped dimensions. customer_lifetime_value_tier, churn_risk, account_health_score — these make GA4 a window into behavioral differences between CRM-defined customer groups.
Using Custom Dimensions in Explorations
Custom dimensions registered in the Admin are available immediately in Explorations as dimensions in the dimension picker.
The reporting patterns that make custom dimensions most useful:
Free-form with custom dimension as row:
Create a Free-form Exploration. Add your page_type dimension as rows. Add Sessions, Engaged Sessions, Conversions as metrics. You now have a page-type-level performance report.
Funnel Exploration with custom dimension filter:
Build a checkout funnel. Add a segment filter for plan_type = free and another for plan_type = pro. Compare the funnel completion rates side by side. This is a report that is impossible to build in standard reports.
User Explorer with user-scoped dimensions:
Open User Explorer. Add your customer_segment user-scoped dimension as a column. Browse individual user journeys filtered to a specific segment. Useful for qualitative analysis of high-value user behavior.
Segment builder using user properties:
In Explorations, build a user segment where loyalty_tier exactly matches “gold.” Apply this segment to any Exploration to see how your best customers behave differently from your average user.
Custom Dimensions in Standard Reports
Custom dimensions also appear in standard reports but with more limited configuration options.
In the standard reports, go to any report > Customize report (pencil icon, top right) > Dimensions. Your registered custom dimensions appear in the dimension picker and can be added as secondary dimensions or used to configure the report’s primary breakdown.
This is particularly useful in the Traffic Acquisition report (adding signup_source as a secondary dimension to see long-term retention by acquisition source) and in the Ecommerce reports (adding coupon_code to the purchase breakdown).
Auditing What You Have
Before registering anything new, audit what already exists in your property.
Admin > Data display > Custom definitions shows all registered custom dimensions and metrics, their scope, the parameter they map to, and when they were last updated.
Common issues to look for:
- Dimensions with zero data (the parameter was never actually pushed, or the name does not match the parameter in the data layer)
- Duplicate dimensions mapping to the same parameter
- Dimensions registered for a one-time analysis that are now just occupying quota
- Dimensions with no description that no one can interpret
For dimensions with zero data: check the parameter name in DebugView or in a real-time report to confirm the exact spelling. GA4 custom dimensions are case-sensitive — PageType and page_type are different parameters.
Key Takeaway
Custom dimensions are not a setup task. They are an analytical infrastructure decision. What you register determines what questions you can answer in GA4 for the next several years. Build around your actual reporting needs, not around what might be useful someday.
The three most valuable investments for most properties: a page_type event-scoped dimension for page-level segmentation, a plan_type or account_type user-scoped dimension for user group analysis, and item-scoped dimensions for any product attributes that matter to your merchandising or profitability analysis.
Everything else should be justified by a specific, recurring reporting need before it takes up quota.
Up next in the GA4 Advanced Series: GA4 Predictive Audiences — How to Use Purchase Probability and Churn Signals in Google Ads
Related Posts
GA4 Channel Groupings: Why the Default Is Wrong and How to Fix It
12 min read
GA4 Cohort Analysis: How to Measure Retention and Campaign Quality Over Time
11 min read
GA4 Reporting Identity: Why Your User Counts Are Wrong and How to Fix It
11 min read
Need Help With Your Google Ads?
I help e-commerce brands scale profitably with data-driven PPC strategies.
Get In Touch