Without registration your parameters are collected but invisible in reports and explorations.
GA4 only puts a parameter in the dimension picker once you tell it to. Admin > Custom definitions is where you do that.
A custom dimension maps a parameter name to a reportable dimension and has a scope:
- Event-scoped: the parameter is on an event (
billing_period,article_author). Up to 50 per property. - User-scoped: a user property, an attribute of the person (
plan,account_type). Up to 25. - Item-scoped: a custom field in an ecommerce
itemsarray (item_colour). Up to 10.
A custom metric maps a numeric parameter to a metric (plan_count, video_seconds) with a unit (standard, currency, distance, time). Up to 50.
User properties are sent separately from events with gtag('set', 'user_properties', {...}) before the events they should describe; GA4 attaches the latest value to every subsequent event from that user, and reports show the value in effect at the time of each event. They are ideal for things that change rarely: subscription tier, signup cohort, language preference. Never put personal data (name, email) in them.
Registration is not retroactive. Data for a custom dimension starts from the moment you create it, even though the parameter was collected earlier; BigQuery still has the raw values for the past. Create definitions on the same day you deploy the parameter, and you cannot delete a definition for a while after use, only archive it, so name carefully.
High-cardinality dimensions (unique IDs, timestamps, long free text) blow the row limits and surface as (other). Keep values categorical.
Example
// User property: set once, GA4 attaches it to every later event from this user
gtag('set', 'user_properties', {
plan: 'pro', // register as user-scoped custom dimension "plan"
signup_cohort: '2026-Q3'
});
// Event with a parameter you will register as an event-scoped custom dimension
// and one you will register as a custom metric (unit: time)
gtag('event', 'video_watched', {
video_title: 'Onboarding tour', // -> custom dimension (event scope)
watch_seconds: 142 // -> custom metric
});
// Admin > Custom definitions > Create custom dimension
// Dimension name: Video title | Scope: Event | Event parameter: video_title
// Admin > Custom definitions > Create custom metric
// Metric name: Watch seconds | Event parameter: watch_seconds | Unit: TimeRemember
- Custom dimensions: event (50), user (25), item (10); custom metrics: 50
- User properties describe the person and ride along on every later event
- Registration is not retroactive; avoid high-cardinality values