AnalyticsLast updated September 13, 2026 · 9 min read

GA4 Custom Dimensions and Metrics: Track What GA4 Misses

GA4's built-in dimensions only capture so much. Custom dimensions and metrics let you track the data your business actually needs.

What GA4 Tracks by Default (and What It Misses)

GA4 ships with dozens of built-in dimensions and metrics. Session source, device category, page title, engagement rate - the basics are there. But the moment you need to answer a question specific to your business, the defaults run out fast.

Is this visitor a paid subscriber or a free user? Did they arrive with a coupon code? What plan tier are they on? What content category are they reading? GA4 has no built-in way to capture any of that. Custom dimensions and metrics are how you fill those gaps.

Most analysts know custom dimensions exist. Fewer understand the scoping rules, the registration requirements, and the quotas that determine whether they actually work in reports. That's what this guide covers.

The Difference Between Custom Dimensions and Custom Metrics

The distinction matters because they work differently in reports.

Custom dimensions are categorical. They describe something - a user type, a content category, a subscription plan. You use them to break down and filter your data. In a report, they appear in rows, not columns.

Custom metrics are numerical. They measure something - a score, a quantity, a duration in seconds. You use them to aggregate and compare. They appear in columns as values you can sum, average, or count.

A concrete example: if you're tracking a reading progress feature, the content category a user was reading would be a custom dimension. The percentage of the article they read before leaving would be a custom metric.

Research Data

GA4 properties are limited to 50 custom dimensions per scope level - 50 event-scoped and 50 user-scoped. Once you hit that limit, new dimensions stop appearing in reports, even if events fire correctly. Planning your schema before you build saves significant headaches later.

Source: Google Analytics Help Documentation, 2026

Scoping: The Concept Most People Get Wrong

Every custom dimension in GA4 has a scope. The scope determines what level of data the dimension attaches to. Get it wrong and you'll see blank values or data that doesn't aggregate the way you expect.

There are three scopes in GA4:

Event Scope

An event-scoped dimension applies to a single event. It captures a value that's specific to one thing that happened - the category of a product clicked, the name of a video played, the form field that triggered an error.

Event-scoped dimensions are the most common type and the safest default when you're not sure which scope to use. They're flexible, they don't persist between sessions, and they don't carry over to future visits.

User Scope

A user-scoped dimension attaches a value to the user profile and persists across sessions. Use this for attributes that define who the user is rather than what they just did - their subscription plan, their role, whether they've completed onboarding.

One important nuance: user-scoped dimensions in GA4 can be overwritten. If you send a new value for the same dimension, it replaces the old one. There's no history kept. This matters if you're tracking something that changes, like a plan upgrade.

Item Scope

Item-scoped dimensions are specific to e-commerce and apply to individual products within events like view_item or purchase. If you need to capture something about a product that isn't covered by GA4's standard item parameters - a custom product label, a warehouse location, a promotional tag - item scope is what you use.

This scope only makes sense if you've set up GA4 e-commerce tracking. For guidance on that foundation, see the GA4 e-commerce event setup guide.

CUSTOM DIMENSION SCOPE COMPARISON

Event Scope
Tied to a single event - content_category, video_name, form_id
User Scope
Persists across sessions - plan_tier, user_role, onboarding_status
Item Scope
E-commerce only - product_label, warehouse_id, promo_tag

Each scope requires separate registration in GA4 Admin before it appears in reports

The Two-Step Setup Most People Miss

Here's the part that trips up even experienced analysts. Sending a custom parameter with an event is not enough to make it appear as a dimension in GA4 reports. You have to do two separate things.

Step 1: Send the Parameter

Whether you're using GA4's gtag.js directly or routing through Google Tag Manager, you need to pass the custom value as a parameter in your event. For example, if you want to track which content category a user reads:

In GTM, you'd add a custom parameter called content_category to your event tag, pulling its value from a dataLayer variable. The event fires, the parameter travels to GA4, and GA4 stores it - but only internally. It doesn't appear in any report yet.

If you're not already using GTM for this, the Google Tag Manager setup guide covers the infrastructure you need first.

Step 2: Register the Dimension in GA4 Admin

Go to GA4 Admin, then Custom Definitions under the Data Display section. Create a new custom dimension. Give it a name (this is what appears in reports), set the scope, and map it to the exact parameter name you're sending.

Once registered, GA4 starts populating the dimension going forward. It won't backfill historical data before the registration date. This is worth knowing before you launch - register the dimension before you start collecting data, not after.

Custom Metrics: When to Use Them

Custom metrics follow the same two-step process - send the parameter, register in Admin - but the use cases are different. You're looking for numerical values that GA4 doesn't capture natively.

Common examples include:

Scroll depth as a percentage - GA4 has a built-in scroll event that fires at 90% by default. If you want finer granularity, a custom metric capturing the actual percentage at scroll depth events gives you that.

Time spent on a key feature - For SaaS products, how long a user spends in a core workflow (a report builder, an editor, a configuration screen) is often more predictive of retention than standard engagement time.

Search result count - If your site has internal search, capturing how many results a query returned helps diagnose zero-result searches, which are a strong signal of content gaps.

Cart value at abandonment - GA4 tracks cart abandonment events, but not what the cart was worth at the time. A custom metric here quantifies the revenue impact of abandonment, not just the event count.

Research Data

GA4 supports up to 50 custom metrics per property, with values stored as integers or currencies. Unlike dimensions, custom metrics don't have a user scope - they're always event or item scoped. Trying to create a “user lifetime score” metric requires aggregating event-scoped metric values in Explorations or BigQuery.

Source: Google Analytics Help Documentation, 2026

Using Custom Dimensions in Reports and Explorations

Once registered, custom dimensions and metrics appear throughout GA4. In standard reports, you can add them as secondary dimensions. In Exploration reports, they're available in the dimension and metric pickers like any built-in field.

The real power comes when you combine them. A few patterns that are genuinely useful:

Segment by User Attribute

If you've set up a user-scoped dimension for subscription plan, you can segment any exploration by plan tier. Suddenly you can compare engagement rates, conversion paths, and retention curves between free and paid users - something GA4's defaults can't do out of the box.

This pairs naturally with GA4's Cohort Analysis. See the cohort analysis guide for how to structure that kind of comparison.

Build a Funnel by Content Category

With a content_category event-scoped dimension, you can build a funnel in Explorations that shows how users move from reading a specific category of content to converting. This answers a question most content teams desperately want answered: which content types actually drive signups?

The Funnel Exploration in GA4 supports this kind of condition-based filtering. The funnel exploration guide walks through exactly how to set it up.

Filter Acquisition Reports by User Type

Combine a user-scoped dimension with acquisition reports and you can answer questions like: which acquisition channels bring the most paying customers, not just the most users? This shifts reporting from volume metrics to quality metrics, which is where the useful decisions live.

Common Mistakes That Break Custom Dimensions

A few patterns cause custom dimensions to return blanks or wrong values in reports.

Parameter name mismatches - The parameter name in your event tag must exactly match the parameter name you registered in Admin. GA4 is case-sensitive. content_category and Content_Category are different parameters.

Registering after data collection starts - GA4 doesn't backfill. If you collect three months of data before registering the dimension, those three months are gone from that dimension's history.

Using reserved parameter names - GA4 has a list of reserved event and parameter names. Using them for custom purposes creates conflicts. Check the reserved names list in Google's documentation before naming anything.

Hitting quota limits without realizing it - At 50 event-scoped dimensions, new registrations silently stop working in reports even if the underlying events fire correctly. Audit your custom definitions regularly and deprecate ones you no longer use.

Wrong scope for the use case - Sending a user attribute as an event parameter and registering it as event-scoped means the value only appears on the events where it was explicitly sent, not across the user's full session history. Scope decisions made at setup are hard to reverse without a data gap.

BigQuery Export: The Ceiling Remover

GA4's built-in reports have sampling limits, quota constraints, and retention caps. For high-traffic properties or complex custom dimension analysis, BigQuery export removes most of those limitations.

When you export GA4 data to BigQuery, all event parameters - including your custom ones - land in the raw event table. You can query across the full dataset without sampling, join GA4 data with CRM or revenue data, and build custom aggregations that GA4's interface can't produce.

For businesses where custom dimension data is central to decision-making - SaaS companies tracking user behavior by plan tier, e-commerce brands analyzing product performance by custom category - BigQuery is worth setting up early. The free tier covers most small-to-medium properties.

CUSTOM DIMENSION SETUP CHECKLIST

Define scope before building - event, user, or item

Register the dimension in GA4 Admin before data collection starts

Confirm parameter name is exact match - case sensitive

Check against GA4's reserved parameter names list

Verify in DebugView before pushing to production

Monitor quota usage - max 50 event-scoped, 50 user-scoped

Document every dimension in a shared schema reference

Start With a Schema, Not a Wish List

The teams that get the most out of custom dimensions don't approach them opportunistically. They design a measurement schema before building anything - a document that lists every custom dimension and metric they need, what question each one answers, which events carry it, and which scope it uses.

This forces clarity. “I want to track user behavior” is a wish. “I need a user-scoped dimension called plan_tier that captures free, starter, or pro, sent on every login event and on the purchase event” is a schema entry. One of those gets built correctly the first time.

Starting with an analytics reporting strategy in mind also helps you prioritize. Build the custom dimensions that unlock decisions you're currently making by guessing. Everything else can wait.

GA4's default tracking tells you what happened on your site. Custom dimensions and metrics tell you why, and to whom. That's the difference between data that describes and data that drives decisions.