A custom dimension is a label you define and register in Google Analytics 4 so that reports can break data down by something GA4 does not record on its own, such as the name of a form, the type of service enquired about or whether a visitor is logged in. It turns a piece of information your site already knows into a column you can filter, compare and build audiences from.
How a custom dimension works
GA4 records activity as events, and each event can carry extra details called event parameters. Sending a parameter is only half the job. Until you register it under Admin, Data display, Custom definitions, GA4 receives the value but will not show it in standard reports or offer it as a dimension in explorations. Registering it tells GA4 to process that parameter as a reportable field from that point on.
Every custom dimension has a scope, which decides what the value describes:
- Event scope The value belongs to one action, for example a form_name of “callback” on a single form submission.
- User scope The value describes the person across visits, such as a customer tier or a trade account flag, sent as a user property.
- Item scope The value describes a product inside an ecommerce event, such as fabric or size range.
At the time of writing (October 2026), a standard GA4 property allows 50 event-scoped, 25 user-scoped and 10 item-scoped custom dimensions, and Analytics 360 raises those limits. The limits are generous for most small businesses, but it is still worth deciding what you need before creating anything.
Why it matters
Most UK small business sites offer several ways to get in touch: a contact form, a quote form, a callback request, a phone number and perhaps a booking widget. Out of the box, GA4 may record all of those as one generic event, or as several events with no detail attached. With a custom dimension for form name or enquiry type, you can see that paid search produces quote requests while organic traffic produces general questions, and spend accordingly.
Custom dimensions also make reporting match how the business actually thinks. An accountancy practice might care whether an enquiry was about Self Assessment, payroll or VAT returns. An online shop might want to split revenue by delivery option or by whether a discount code was used. None of that exists in GA4 until someone sends it and registers it.
When I set up tracking for performance marketing campaigns, custom dimensions are usually where reporting moves from “how many enquiries” to “which enquiries, from where, and worth how much”.
Common mistakes
- Expecting history. A custom dimension is not retroactive. Data collected before you registered it shows as “(not set)” for that dimension, so register it on the day the parameter starts being sent.
- A name that does not match. The parameter name in GA4 must match exactly what the site or Google Tag Manager sends, including capitals and underscores. “formName” and “form_name” are two different parameters.
- Too many unique values. Sending timestamps, session IDs or full URLs as a dimension creates high cardinality, and GA4 then groups the long tail into a single “(other)” row that hides the detail you wanted.
- Sending personal data. Email addresses, phone numbers and names must never go into a dimension. Google’s terms forbid it, and under UK GDPR it is personal data you would be placing in a third-party tool with no good reason.
- The wrong scope. Registering a customer type as event-scoped means it appears only on the events that happened to carry it, not on everything that person did.
How to act on it
Start with the question you cannot answer today, not with the setting. Write down the two or three breakdowns you would actually use to make a decision, for example “which service page produced the quote” or “new or returning customer”. Each one is a candidate dimension.
Then check the site sends the value consistently. Use Google Tag Manager’s preview mode and GA4’s DebugView to confirm the parameter appears on the right events with sensible values. Register it with a clear name and a description your successor will understand, and keep a short tracking plan listing every custom dimension, its scope, where the value comes from and who owns it.
After a week or two, open an exploration and test whether the breakdown answers the question you started with. If it does not change any decision, archive it and use the slot for something that will.
