Custom dimensions and metrics: tracking what GA4 doesn't by default
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
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 eventThis 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
GA4 Admin → Custom Definitions → Create Custom Dimension
Dimension name: Company Size
Scope: Event
Event parameter: company_sizeOnce 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
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 oneChoosing 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
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_frequencyThis 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
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
GA4 (standard, non-360) properties: up to 50 event-scoped custom
dimensions and 50 event-scoped custom metrics per propertyThis 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.
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.