~/TechPurAI
~/tutorials/google-analytics-mastery/custom-dimensions-and-metrics
intermediate·part 16 of 22·3 min read

Custom dimensions and metrics: tracking what GA4 doesn't by default

Updated Aug 21, 2026Google Analytics

Part 10 attached a company_size parameter directly to GreenDesk's generate_lead event. That parameter is sent with every event — but it doesn't actually appear as a usable dimension in GA4's reports until it's explicitly registered as a custom dimension. This part covers that real, easy-to-miss step.

Why sending a parameter isn't the same as reporting on it

text
Event sent to GA4: generate_lead { company_size: "51-200" }
GA4's own reports: no "Company Size" dimension available anywhere,
  even though the parameter is genuinely arriving with every event

This is a real, common point of confusion — GA4 collects and stores every event parameter it receives, but only registered custom dimensions become available as columns or filters inside GA4's standard and exploration reports. An unregistered parameter isn't lost, but it's also invisible for real reporting purposes until this registration step happens.

Registering a real custom dimension for GreenDesk

text
GA4 Admin → Custom Definitions → Create Custom Dimension
  Dimension name: Company Size
  Scope: Event
  Event parameter: company_size

Once registered, "Company Size" becomes a real, selectable dimension across GA4's standard reports and Explorations (part 12) — enabling exactly the lead-quality segmentation part 10 described, like comparing generate_lead volume by company size across different channels.

Event-scoped vs. user-scoped: a real, meaningful difference

text
Event-scoped: company_size — attached to a single event, describing
  something true about that specific event occurrence
User-scoped: preferred_language — attached to the user themselves,
  applying to every event they trigger across every session, not
  just one

Choosing the correct scope matters directly: an event-scoped dimension like company_size only has meaning tied to the specific lead-generation event carrying it, while a genuinely user-level trait — like a returning customer's real subscription tier for Bright Leaf Coffee — belongs registered as user-scoped, so it applies consistently across every event that same user triggers, not just the one event where it happened to be sent.

A real custom dimension for Bright Leaf Coffee: subscription frequency

text
Event: purchase (part 9's full e-commerce sequence)
Custom parameter: subscription_frequency = "biweekly"

GA4 Admin → Custom Definitions → Create Custom Dimension
  Dimension name: Subscription Frequency
  Scope: Event
  Event parameter: subscription_frequency

This lets the product-performance report from part 9 be broken down further by real subscription frequency — revealing, for instance, whether biweekly subscribers show meaningfully different lifetime purchase patterns than monthly subscribers, a genuine business question the standard e-commerce parameters alone can't answer.

Custom metrics: registering a real numeric measure

text
GA4 Admin → Custom Definitions → Create Custom Metric
  Metric name: Estimated Deal Value
  Scope: Event
  Unit of measurement: Currency
  Event parameter: value (on generate_lead, part 10's estimated $150)

Metrics are GA4's equivalent registration step for genuinely numeric data, as opposed to dimensions for categorical data — registering value explicitly as a custom metric on generate_lead events makes it available for real aggregation (sums, averages) across GA4's reports the same way registering company_size made it filterable.

The real 50-dimension, 50-metric limit per property

text
GA4 (standard, non-360) properties: up to 50 event-scoped custom
  dimensions and 50 event-scoped custom metrics per property

This is a genuine, hard ceiling worth planning around deliberately rather than discovering by hitting it — registering every conceivable parameter "just in case" burns through a real, finite budget; the sensible approach is registering only parameters actually tied to a real, intended reporting or segmentation use, exactly like company_size and subscription_frequency above.

Common mistake

Sending rich, meaningful event parameters in code but never registering the matching custom dimensions in GA4's admin settings, then concluding weeks later that "the tracking must be broken" when the data never appears in any report. The data was arriving the entire time — it just was never registered to be reportable.

Next: privacy and Consent Mode — how GA4 handles tracking permissions honestly, and what changes when a visitor declines consent.

VK

Vijay Kumar

Founder of TechPurAI — writing hands-on tutorials and honest tool breakdowns.

LinkedIn ↗
← previous15. Search Console integration: bringing real query data into GA4next →17. GA4 and privacy: Consent Mode explained honestly