GA4 9 min read

GA4 Custom Dimensions and Metrics: Practical Implementation

Learn how to create, configure, and use GA4 custom dimensions and metrics to segment your analytics data by business-specific attributes like plan tier, user type, and product category.

A
Aumlytics Team
·

GA4’s predefined dimensions cover what Google thinks most businesses need. Your business probably has attributes — customer plan tier, product category, subscription status, user cohort — that don’t map to anything built-in. Custom dimensions and metrics are how you teach GA4 to speak your business language.

What Are Custom Dimensions and Metrics?

Custom dimensions are text-based attributes you attach to events or users. Examples: plan_tier (free/pro/enterprise), user_type (new/returning), product_category, ab_test_variant.

Custom metrics are numeric values you track alongside events. Examples: cart_item_count, subscription_days_remaining, video_percent_watched.

GA4 gives you 50 event-scoped custom dimensions, 25 user-scoped custom dimensions, and 50 custom metrics per property. Use them thoughtfully — you can’t delete them once created (only archive them, which doesn’t free up the slot).

Event-Scoped vs User-Scoped

The scope of a custom dimension determines how long GA4 associates it with a user and where it appears in reports.

Event-Scoped

The dimension value is tied to a specific event. It only appears in reports for sessions where that event fired.

Use for: product category, CTA location, form name, checkout step, content type.

// Event-scoped: "product_category" attached to this specific add_to_cart event
gtag('event', 'add_to_cart', {
  product_category: 'Electronics',
  value: 299.99,
  currency: 'USD'
});

User-Scoped

The dimension value is tied to the user (stored in their cookie) and persists across all future sessions.

Use for: account type, plan tier, signup date, user segment, customer ID hash.

// User-scoped: "plan_tier" persists across all this user's future sessions
gtag('set', 'user_properties', {
  plan_tier: 'premium',
  account_type: 'business',
  user_cohort: '2025-Q1'
});

Item-Scoped

For e-commerce product attributes not covered by standard GA4 parameters.

window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: 'view_item',
  ecommerce: {
    items: [{
      item_id: 'SKU_123',
      item_name: 'Wireless Headphones',
      // Standard GA4 params:
      item_category: 'Electronics',
      price: 149.99,
      // Custom item attributes:
      item_color: 'Midnight Black',
      item_collection: 'Pro Series',
      warranty_years: '2'
    }]
  }
});

Creating Custom Dimensions in GA4 Admin

  1. In GA4, go to Admin → Custom definitions → Custom dimensions
  2. Click Create custom dimension
  3. Fill in:
    • Dimension name: Use human-readable names (“Plan Tier”, not “plan_tier”)
    • Scope: Event or User
    • Description: What this dimension tracks (your future self will thank you)
    • Event parameter: The exact parameter name from your code (e.g., plan_tier)
  4. Click Save

Allow 24-48 hours before the dimension appears populated in standard reports. It won’t backfill historical data.

Sending Custom Dimensions via GTM

If you’re using Google Tag Manager, configure custom dimensions as additional event parameters in your GA4 Event tags.

In GTM:

  1. Create a Data Layer Variable for your custom parameter: DLV - plan_tier
  2. In your GA4 Event tag → More Settings → Event Parameters:
    • Parameter name: plan_tier
    • Value: {{DLV - plan_tier}}

For user properties, use the GA4 Config tag → Fields to Set:

  • Field name: plan_tier (under User Properties)
  • Value: {{DLV - user plan tier}}

Custom Metrics: When You Need Numbers

Custom metrics let you track numeric values that GA4 doesn’t measure automatically.

Example: Track cart abandonment value

gtag('event', 'session_end', {
  abandoned_cart_value: 127.50, // The value left in cart
  items_in_cart: 3
});

Create this in GA4 Admin → Custom definitions → Custom metrics:

  • Metric name: Abandoned Cart Value
  • Event parameter: abandoned_cart_value
  • Unit of measurement: Currency

Using Custom Dimensions in GA4 Reports

In Explore (the custom reporting area):

  1. Click + Import dimensions/metrics
  2. Find your custom dimensions under Event → Custom or User → Custom
  3. Drag them into your rows/columns

Example exploration: Which plan_tier has the highest purchase rate?

  • Rows: plan_tier
  • Metrics: Sessions, Purchases, Purchase Rate
  • This reveals if your free-tier users convert to paid at meaningful rates

How Custom Dimensions Appear in BigQuery

If you’ve connected GA4 to BigQuery, custom event parameters appear in the event_params array:

SELECT
  user_pseudo_id,
  event_name,
  -- Extract custom dimension from event_params
  (SELECT value.string_value FROM UNNEST(event_params)
   WHERE key = 'plan_tier') AS plan_tier,
  (SELECT value.double_value FROM UNNEST(event_params)
   WHERE key = 'abandoned_cart_value') AS abandoned_cart_value
FROM
  `your-project.analytics_XXXXXXXXX.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20250101' AND '20250131'
  AND event_name = 'session_end'

User-scoped properties appear in user_properties:

SELECT
  user_pseudo_id,
  (SELECT value.string_value FROM UNNEST(user_properties)
   WHERE key = 'plan_tier') AS plan_tier
FROM
  `your-project.analytics_XXXXXXXXX.users_*`

Planning Your Custom Dimension Strategy

Before creating custom dimensions, answer these questions:

  1. What business questions can’t you answer today? Start there.
  2. Is this event-scoped or user-scoped? Values that change per event → event-scoped. Values that define the user → user-scoped.
  3. Will you need this in BigQuery or just in the GA4 UI? If BigQuery, make sure the parameter name in your code exactly matches the event parameter you register.
  4. Are you near the 50-dimension limit? Audit existing custom dimensions first. Archived dimensions still count against your quota.

The 50-Dimension Limit: Use It Wisely

GA4’s 50 event-scoped custom dimension limit sounds generous until you’ve worked on a large e-commerce site for two years. Common traps:

  • Creating separate dimensions for data that could be combined (use content_type: "blog" instead of a Boolean is_blog_post)
  • Registering dimensions for one-time A/B tests that never get cleaned up
  • Using custom dimensions for data better captured as the event name itself

Rule of thumb: If you’ll use the dimension in recurring reports, register it. If it’s a one-time investigation, just look at it in the raw event_params in BigQuery.


Designing a custom dimension strategy that scales with your business is part science, part experience. If you’re setting up GA4 for the first time or cleaning up a property with years of accumulated clutter, our team can help.

#ga4#custom-dimensions#google-analytics#analytics#segmentation#bigquery

Want This Implemented Correctly?

Let our team apply these concepts to your specific setup — with QA validation and 30 days of support.