GA4 Custom Dimensions and Metrics
Expert guidance for registering event parameters as custom dimensions and creating custom metrics.
Overview
Custom dimensions and metrics transform event parameters into reportable fields in GA4. All custom parameters remain invisible in reports until registered. Registration requires understanding scope types, following naming conventions, and accounting for processing delays.
Understanding Scopes
GA4 uses three scopes that determine what data the parameter applies to:
Event Scope
Applies to: Single event occurrence Lifespan: That specific event only Use for: Event-specific information
gtag('event', 'button_click', {
'button_name': 'Subscribe', // Event-scoped
'button_location': 'header', // Event-scoped
'button_id': 'btn_subscribe_01' // Event-scoped
});
Examples: form_name, video_title, button_name, page_section
User Scope
Applies to: All events from that user Lifespan: Session persistence (until cleared) Use for: User attributes that persist
gtag('set', 'user_properties', {
'subscription_tier': 'premium', // User-scoped
'customer_lifetime_value': 5000, // User-scoped
'preferred_language': 'en' // User-scoped
});
Examples: subscription_tier, customer_segment, company_size, signup_date
Item Scope
Applies to: Individual items in ecommerce events Lifespan: That transaction only Use for: Product-specific information
gtag('event', 'purchase', {
'items': [
{
'item_id': 'SKU_123',
'item_name': 'Blue T-Shirt',
'item_color': 'blue', // Item-scoped
'item_size': 'large', // Item-scoped
'supplier': 'Vendor A' // Item-scoped
}
]
});
Examples: item_color, item_size, supplier, product_quality
Scope Selection Matrix
| Question | Event Scope | User Scope | Item Scope |
|---|---|---|---|
| Applies to one event? | Yes | No | No |
| Applies to all user events? | No | Yes | No |
| Applies to products? | No | No | Yes |
| Changes per interaction? | Yes | Rarely | Per item |
Dimension Limits
Standard GA4
| Dimension Type | Limit |
|---|---|
| Event-scoped | 50 |
| User-scoped | 25 |
| Item-scoped | 10 |
| Custom metrics | 50 |
| Calculated metrics | 5 |
GA4 360
| Dimension Type | Limit |
|---|---|
| Event-scoped | 125 |
| User-scoped | 100 |
| Item-scoped | 25 |
| Custom metrics | 125 |
| Calculated metrics | 50 |
Registration Workflow
Step 1: Send Parameter in Event
First, ensure the parameter is being sent in events:
Event-scoped parameter:
gtag('event', 'video_watched', {
'video_title': 'Getting Started Guide',
'video_duration': 180,
'video_quality': 'hd'
});
User-scoped parameter (user property):
gtag('set', 'user_properties', {
'customer_segment': 'enterprise',
'subscription_tier': 'premium'
});
Item-scoped parameter:
gtag('event', 'purchase', {
'items': [{
'item_id': 'SKU_123',
'supplier': 'Vendor A' // Custom item parameter
}]
});
Step 2: Verify in DebugView
Before registration, confirm the parameter appears:
- Admin -> DebugView
- Enable Google Analytics Debugger extension
- Trigger the event
- Click event in DebugView
- See parameter in event details
- Note exact parameter name (case-sensitive)
Step 3: Register as Custom Dimension
Navigate to Admin -> Data Display -> Custom Definitions:
- Click "Create custom dimension"
- Fill form:
- Dimension name: Human-friendly name (e.g., "Video Quality")
- Scope: Select Event, User, or Item
- Description: Optional notes
- Event parameter / User property: Exact name from code (case-sensitive)
- Click Save
Step 4: Wait for Data Population
Critical: Custom dimensions don't appear immediately.
- Wait time: 24-48 hours
- Historical data: Retroactively processed
- New data: Starts populating
- Do not create duplicate dimensions while waiting
Step 5: Use in Reports
After 24-48 hours:
- Standard Reports: Add as secondary dimension
- Explorations: Select from dimension picker
- Filters/Segments: Filter by dimension values
- Google Ads: Export for audience building
Creating Custom Metrics
Standard Custom Metrics
For numerical tracking beyond standard metrics:
gtag('event', 'video_watched', {
'video_title': 'GA4 Tutorial',
'minutes_watched': 45, // Custom metric
'completion_rate': 85 // Custom metric
});
Registration:
- Admin -> Data Display -> Custom Definitions
- Click "Create custom metric"
- Fill form:
- Metric name: Display name (e.g., "Minutes Watched")
- Scope: Event (only option)
- Event parameter: Parameter name (minutes_watched)
- Unit of measurement: Standard, Currency, Distance, Time (optional)
- Save and wait 24-48 hours
Calculated Metrics
Create metrics derived from existing metrics:
Examples:
- Revenue per User = revenue / users
- Conversion Rate = conversions / sessions * 100
- Average Order Value = revenue / purchases
Creation:
- Admin -> Data Display -> Custom Definitions
- Click "Create custom metric"
- Metric Name: "Revenue per User"
- Type: Calculated
- Formula:
revenue / users - Save (no processing delay for calculated metrics)
Common Registration Examples
Event-Scoped Dimensions
| Dimension Name | Parameter Name | Use Case |
|---|---|---|
| Video Title | video_title | Track video performance |
| Form Name | form_name | Analyse form submissions |
| Button Location | button_location | Track CTA placement |
| Content Type | content_type | Categorise content |
| Error Message | error_message | Debug issues |
User-Scoped Dimensions
| Dimension Name | User Property | Use Case |
|---|---|---|
| Subscription Tier | subscription_tier | Segment by plan |
| Customer Segment | customer_segment | Analyse cohorts |
| Company Size | company_size | B2B analysis |
| Account Age | account_age_days | Retention analysis |
| Preferred Language | preferred_language | Localisation |
Item-Scoped Dimensions
| Dimension Name | Item Parameter | Use Case |
|---|---|---|
| Item Colour | item_color | Product analysis |
| Item Size | item_size | Inventory insights |
| Supplier | supplier | Vendor performance |
| Material | material | Product attributes |
| Stock Status | stock_status | Availability analysis |
Troubleshooting
Dimension Not Appearing After 48 Hours
Possible causes:
- Parameter name mismatch (case-sensitive)
- Events not sending parameter
- Wrong scope selected
- Low data volume (threshold not met)
Solutions:
- Verify exact parameter name in DebugView
- Confirm events are sending parameter
- Check scope matches how parameter is sent
- Wait for more data volume
Parameter in DebugView But Not Reports
Expected behaviour for first 24-48 hours
If persists:
- Check Realtime reports (available sooner)
- Verify at least 1000 events with parameter
- Check data retention settings
- Confirm dimension registered correctly
Dimension Quota Exceeded
Cause: Hit maximum dimension limit
Solutions:
- Delete unused dimensions
- Combine similar dimensions
- Plan essential dimensions
- Consider GA4 360 for higher limits
Multiple Users Same Dimension Value
For user-scoped: Expected - applies to all user events For event-scoped: Expected if same value sent For item-scoped: Expected across products
Best Practices
Planning Strategy
- Audit existing parameters - What are you already sending?
- Prioritise dimensions - Which are essential for reporting?
- Reserve capacity - Don't use all 50 immediately
- Document dimensions - Maintain registry of all dimensions
Naming Conventions
Parameter names:
- snake_case
- Under 40 characters
- Descriptive and consistent
Dimension display names:
- Title Case
- Clear and descriptive
- Match parameter purpose
Documentation Template
## Custom Dimension: Video Title
**Parameter Name:** video_title
**Scope:** Event
**Description:** Title of video watched by user
**Events Using:** video_start, video_complete, video_progress
**Registration Date:** 2024-01-15
**Status:** Active
**Example Value:** "Getting Started with GA4"
**Reports Using:**
- Video Performance Exploration
- Content Engagement Dashboard
Quick Reference
Registration Checklist
- Parameter sent in events
- Verified in DebugView
- Correct scope selected
- Exact parameter name used
- Waited 24-48 hours
- Tested in Explorations
Scope Quick Guide
| I want to track... | Use Scope |
|---|---|
| Per-event data | Event |
| User attributes | User |
| Product attributes | Item |
Limits Summary
| Type | Standard | 360 |
|---|---|---|
| Event dimensions | 50 | 125 |
| User dimensions | 25 | 100 |
| Item dimensions | 10 | 25 |
| Custom metrics | 50 | 125 |