TL;DR
- Standard GA4 properties allow 50 event-scoped, 25 user-scoped and 10 item-scoped custom dimensions plus 50 custom metrics; GA4 360 raises these to 125, 100, 25 and 125.
- Google says a new custom dimension can be used in reports 24 to 48 hours after it is created and data is sent; earlier events are not reprocessed and show (not set).
- Scope and event parameter cannot be edited after saving, and after hitting the limit and deleting dimensions you must wait 48 hours to add new ones.
- Collection limits apply first: parameter names 40 characters, values 100 characters, 25 parameters per event, and user property values 36 characters.
GA4 custom dimensions are fields you create in Google Analytics 4 so that your own event parameters and user properties, such as a form name, a membership tier or a product colour, become usable in reports and Explorations. You send the value with your events, then register it under Admin > Data display > Custom definitions, choosing one of three scopes: event, user or item.
Registration is the step people miss. GA4 receives every parameter you send, but it only turns a parameter into a reportable dimension after you register it, and it only does so from that moment forward. This guide covers the three scopes, the exact registration steps, the quotas on standard and 360 properties, why a new dimension shows no data, how to send parameters through Google Tag Manager, and when you need a custom metric instead.
Event-scoped vs user-scoped vs item-scoped custom dimensions
Scope decides which hits a value applies to. Picking the wrong one is the most common design mistake, and the scope cannot be changed after the dimension is saved.
Event-scoped
An event-scoped custom dimension describes one event. It comes from an event parameter and applies only to the event that carried it. Typical examples are form_name on a generate_lead event, article_author on a page_view, or video_title on a video event. If a later event in the same session does not carry the parameter, that later event has no value for the dimension. Most custom dimensions belong in this scope.
User-scoped
A user-scoped custom dimension describes the person, not the action. It comes from a user property, which GA4 keeps attached to the user and applies to that user's subsequent events until the value changes. Good candidates are attributes that change rarely: customer type (new or returning buyer), membership tier, preferred language, or a logged-in flag. Do not put personally identifiable information such as names, emails or phone numbers into a user property; Google's policies prohibit sending it to Analytics.
Item-scoped
An item-scoped custom dimension describes a product inside the items array of an ecommerce event, such as view_item, add_to_cart or purchase. Use it for product attributes that GA4 does not already provide, such as colour, size, supplier or a margin band. On top of the prescribed item parameters, an ecommerce event can carry up to 27 custom item-level parameters. Item-scoped dimensions pair naturally with item metrics such as items purchased and item revenue; mixing them with event-level metrics in the same table often produces (not set) rows, because the values live at a different level.
How to register a custom dimension from an event parameter
You need the Editor role or higher at the property level. The steps:
- In Admin, under Data display, click Custom definitions.
- Open the Custom dimensions tab and click Create custom dimension.
- Enter a Dimension name. This is the label people see in reports. Hyphens are not allowed, but spaces and underscores are.
- Choose the Scope: Event, User or Item.
- Optionally add a Description so colleagues know what the field means and where it comes from.
- Enter the Event parameter (or user property) exactly as your site or app sends it. Matching is exact, so form_name and formName are different parameters.
- Click Save.
Scope and the event parameter cannot be edited after saving. If either is wrong, you have to archive the dimension and create a new one, which costs a slot until the old one is cleared. Check the spelling of the parameter in DebugView before you save: open Admin > Data display > DebugView, trigger the event on your site in debug mode, click the event and read the parameter names it actually carries.
Before creating anything, check whether GA4 already has the field. Google advises against registering parameters that duplicate predefined dimensions, such as page, screen or transaction ID; doing so only spends quota.
Quotas per property, standard vs 360
Each property has fixed slots per scope. You can see how many you have used on the Custom definitions page by clicking Quota information in the top right.
| Definition type | Standard property | GA4 360 property |
|---|---|---|
| Event-scoped custom dimensions | 50 | 125 |
| User-scoped custom dimensions | 25 | 100 |
| Item-scoped custom dimensions | 10 | 25 |
| Custom metrics | 50 | 125 |
Calculated metrics have their own limit of 5 on standard properties and 50 on 360. Collection limits also apply before registration: event parameter names can be up to 40 characters and values up to 100 characters (longer for page_title, page_referrer and page_location), each event can carry up to 25 parameters, user property names are limited to 24 characters and values to 36 characters, and a property can hold up to 25 user properties. Values longer than the limit are cut off, which is a quiet way to lose detail in fields such as long product names or campaign labels.
What happens at the limit
When every slot in a scope is taken, GA4 will not let you create another dimension in that scope. You free a slot by archiving a dimension you no longer need. Google notes that after you hit the limit and remove dimensions, you have to wait 48 hours before adding new ones. Archiving also breaks Explorations and segments that use the dimension until it is removed from them, and audiences built on it stop adding users, so check with the people who rely on it first.
The practical lesson is to plan the slots. Ten item-scoped dimensions on a standard property go quickly in a store with many product attributes. A short list of approved dimensions, each with a written definition and an owner, prevents a property from filling up with near-duplicates such as formName, form_name and Form Name.
Why a new custom dimension shows no data
The most common complaint after registration is an empty report. There are four usual causes.
- Processing time: Google says you can start reporting on a new custom dimension 24 to 48 hours after it is created and the data is sent. Checking an hour later will show nothing.
- No backfill: A custom dimension only applies to events processed after you register it. Parameters sent last month, before the dimension existed, are not reprocessed, so historical rows show (not set). If you need the history, the raw parameters are available in the BigQuery export, if it was switched on at the time.
- The parameter never arrives: A typo in the parameter name, a Tag Manager variable that returns undefined, or a value sent on a different event than the one you are reporting on all leave the dimension empty. DebugView is the place to confirm the parameter is present on the event.
- Scope mismatch: Pairing an event-scoped dimension with a metric from another level, or an item-scoped dimension with session metrics, produces (not set) for rows where the value does not apply.
One more effect to know about: when a dimension has a very large number of unique values, standard reports can group the long tail into an (other) row. Avoid registering fields that are unique per event, such as timestamps or order numbers, as event-scoped dimensions; they consume a slot and make reports harder to read.
Sending parameters via Google Tag Manager
In Google Tag Manager, event parameters are added in the Google Analytics: GA4 Event tag. Open the tag, expand Event Parameters, and add a row for each parameter: the parameter name in the left column, and a variable for the value in the right. The value usually comes from a Data Layer Variable that reads what your site pushes to the data layer, or from a built-in variable such as Click Text or Form ID.
For example, a lead form could push event: "generate_lead" and form_name: "contact_th" to the data layer when the form submits successfully. In GTM you create a Data Layer Variable for form_name, a Custom Event trigger for generate_lead, and a GA4 Event tag that sends the parameter. Then you register form_name as an event-scoped custom dimension in GA4.
User properties go in the tag's User Properties section rather than Event Parameters. Parameters that should go with every event, such as a site language or page template, can be set once in the Google tag's shared event settings instead of repeated in each event tag. Always test in GTM preview mode, which also puts your browser into debug mode so the hits appear in GA4 DebugView.
Using custom dimensions in Explorations and reports
In Explore, open or create an Exploration, click the plus sign next to Dimensions, and find your custom dimension under the Custom group. Import it, then drag it into rows, columns, filters or segment conditions. Custom dimensions are especially useful as segment conditions, for example building a segment of users whose membership tier is "gold" and comparing their purchase paths with everyone else.
In standard reports, you can add a custom dimension as a secondary dimension using the plus icon above the table. Editors can go further with Customize report and set the custom dimension as a primary dimension option, so the whole team sees it without rebuilding the view. Remember that data retention limits Explorations but not standard reports: on a property with 2-month retention, an Exploration cannot show the custom dimension beyond that window.
Custom dimensions vs custom metrics
A custom dimension describes something: text or categories you group and filter by. A custom metric counts or measures something: a number GA4 sums across events. If you want to answer "which form brings the most leads?", form name is a dimension. If you want to answer "how much total estimated deal value did forms generate?", the estimated value is a metric.
Custom metrics are registered on the same Custom definitions page, on the Custom metrics tab. Each needs a measurement unit, such as standard, currency, distance or time, and they are event-scoped. Do not register numeric identifiers like an order number as a metric; GA4 would add them up and produce meaningless totals. Calculated metrics, a separate type, are formulas built from existing metrics, such as revenue per user.
What this means for Thai marketers
Bilingual sites are common in Thailand, and a page-level language dimension is an obvious first custom dimension: send the page language as an event parameter on every event and register it, so you can compare Thai and English visitors without depending on URL patterns. If your site uses Thai text in parameter values, such as Thai product names or form labels, keep them within the 100-character limit; short English codes such as contact_th are safer as parameter values, with the human-readable label kept elsewhere.
Many Thai businesses also hand leads off to LINE Official Account. A custom dimension on the click event recording which button or page sent the visitor to LINE gives you a way to rank pages by chat intent, even though the conversation itself happens outside GA4.
FAQ
How many GA4 custom dimensions can I create?
A standard GA4 property allows 50 event-scoped, 25 user-scoped and 10 item-scoped custom dimensions. GA4 360 raises these to 125, 100 and 25.
Do GA4 custom dimensions apply to past data?
No, GA4 custom dimensions only apply to data processed after you register them, and they start appearing in reports 24 to 48 hours later. Older events show (not set) for the new dimension.
Can I change the scope of a custom dimension?
No, scope and the event parameter are fixed once you save the dimension. To correct either, archive the dimension and create a new one with the right settings.
Should I use a custom dimension or a custom metric?
Use a custom dimension for labels you group or filter by, and a custom metric for numbers you want GA4 to add up. A form name is a dimension; an estimated deal value is a metric.
Plan your custom definitions before the slots run out
Relevant Audience's GA4 setup and migration service includes designing the event and custom dimension plan, building it in Tag Manager and verifying it in DebugView. The data integration and consolidation service connects GA4 with CRM and ad platform data when one report needs all of them.







