GA4 Custom Dimensions: What They Are and How to Set Them Up Correctly

Most GA4 accounts I open for the first time are tracking traffic but not the details that actually explain it. Pageviews, sessions, users, all present. But the moment a client asks “which membership tier converts best” or “which blog category drives the most leads,” the standard reports go quiet. That gap is almost always solved with custom dimensions, and setting them up correctly the first time saves you months of backfilling data you wish you had captured from day one.

What Custom Dimensions Actually Do in GA4

A custom dimension lets you attach a piece of business specific data to the events GA4 already collects. Out of the box, GA4 tracks generic parameters like page location or session source. It has no idea what a membership tier is, what author wrote a post, or which service a form submission was about. Custom dimensions close that gap by telling GA4 to recognize a parameter you are already sending and turn it into something you can filter, segment, and report on.

The key thing to understand is that GA4 does not invent this data for you. You have to send the parameter first, through your site code or Google Tag Manager, and then register it as a custom dimension inside GA4 so the platform knows to keep it and expose it in reports.

Event Scoped vs User Scoped Dimensions

GA4 gives you two scopes for custom dimensions, and picking the right one determines whether your reports make sense six months from now.

Event scoped dimensions

These attach to a single event and only describe that moment. Article category on a page_view event is a good example. It tells you what the visitor was looking at during that specific interaction, nothing more.

User scoped dimensions

These describe a property of the person, not the moment. Membership tier or account type are good examples. Once set, a user scoped dimension follows that user across sessions until it changes again. Mixing these up is the most common mistake I see. Assigning membership tier as event scoped, for instance, means you lose the value the moment the triggering event passes, which defeats the purpose entirely.

How to Register a Custom Dimension in GA4

Once your parameter is flowing into GA4 as an event parameter or user property, registering it takes a few minutes.

Steps inside GA4

Go to Admin, then Custom Definitions, then Create Custom Dimension. Give it a clear name that matches how your team will talk about it, choose the correct scope, and select the event parameter or user property it should pull from. GA4 will only show parameters it has already seen come through, so this step has to happen after the data is live, not before.

One limit worth knowing up front: standard GA4 properties cap you at 50 event scoped and 25 user scoped custom dimensions. That sounds like plenty until a site has been live for a few years and nobody has cleaned up unused ones. Plan your naming and scope decisions with some discipline from the start.

Sending the Data From Your Site or Tag Manager

Registering the dimension in GA4 is only half the job. The parameter has to actually be sent with your events, and for most of the sites I work on, that happens through Google Tag Manager.

In your GA4 event tag, add an event parameter with a name that matches exactly what you plan to register in GA4, and a value pulled from a data layer variable, a DOM element, or a custom JavaScript variable. Exact naming matters here. GA4 is case sensitive and will treat “MembershipTier” and “membership_tier” as two unrelated parameters if you are not consistent between your tag and your GA4 registration.

If your site is built on WordPress with Divi, this is usually a matter of pushing the right values into the data layer through a small snippet or a plugin, then referencing that data layer variable inside your GTM tag. Shopify sites need the same values pushed through the theme’s data layer or a checkout extension, depending on where the parameter needs to fire.

Common Setup Mistakes to Avoid

A few issues show up again and again in accounts I audit.

Registering a dimension before any data has been sent, which leaves it empty in GA4’s parameter list and forces you to wait or guess. Choosing the wrong scope, which quietly breaks the reporting logic without throwing any errors. Inconsistent parameter naming between GTM and the site itself, which causes data to arrive but never populate the dimension you registered. And forgetting that custom dimensions are not retroactive. GA4 only reports data from the point the dimension is registered forward, so the sooner you set these up correctly, the more history you build.

Reading Your Custom Dimension Data in Reports

Once data starts flowing, custom dimensions show up as available fields in Explorations, and in many standard reports through the comparison and secondary dimension tools. This is where the setup work pays off. You can finally break down conversions by membership tier, see which blog category drives newsletter signups, or compare service page performance by the specific offer a visitor viewed. None of that is possible with GA4’s default fields alone.

Build a habit of checking Admin, Custom Definitions periodically to confirm your dimensions are still receiving data. Site redesigns and CMS migrations break data layers more often than people expect, and a dimension that quietly stops receiving values will not warn you. It will just leave a gap in your reports that nobody notices until a quarterly review.

If your GA4 reports are technically correct but never answer the questions your business actually asks, custom dimensions are usually the missing piece. I help clients plan and implement tracking setups that reflect how their business really works, not just what GA4 tracks by default. If you want a second pair of eyes on your current setup, reach out and let’s talk through it.