← All Guides

GA4 Custom Events and Custom Dimensions: Naming, Limits, GTM Setup and Making Them Reportable

How to design and send custom events to GA4 through Google Tag Manager, register parameters as custom dimensions and metrics, use user properties, stay inside the limits, and avoid the mistakes that leave parameters invisible in reports.

Atiqul Islam
Written by Atiqul Islam

Tracking & analytics specialist. 278+ GTM, GA4 and server-side tracking projects for clients in the US, UK and Australia.

Rather not do this yourself? I set this up for clients every week. Free 15-minute audit, no obligation.

Book a Free Audit

Custom events are where GA4 becomes yours. Recommended events cover purchases and leads; custom events cover the calculator on your pricing page, the chat widget, the configurator step, the video that matters. Done well, they answer specific business questions. Done badly, they fill the property with click and button events nobody can interpret and parameters nobody can report on.

This guide covers naming, the dataLayer and GTM setup, registering dimensions and metrics, user properties, limits and verification.

Design Before You Build

Write a short table before touching GTM. For each event: name, what triggers it, parameters, and the question it answers.

Event Trigger Parameters Question
calculator_complete Quote calculator finishes calculator_type, estimated_value Which calculator leads to quotes?
chat_started Visitor opens chat and sends a message page_section Where do people need help?
phone_click tel: link clicked phone_location Which pages drive calls?
video_milestone 25, 50, 75, 100 percent video_title, milestone Which videos get watched?

If you cannot write the question, do not build the event.

Naming Rules

Step 1: Push the Event to the dataLayer

Every custom event starts as a push from the site:

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'calculator_complete',
  calculator_type: 'roof_replacement',
  estimated_value: 18500,
  calculator_steps: 4
});

Where the site cannot push directly, GTM can build the event from a trigger: a click on a specific element, element visibility, or a form success event. The GTM Triggers guide on this site covers those. Still push a named dataLayer event from the listener tag rather than firing GA4 straight from a click trigger, so the event has a clean name and parameters.

Step 2: Variables and Trigger in GTM

Create a Data Layer Variable for each parameter: calculator_type, estimated_value, calculator_steps. Create a Custom Event trigger with the event name calculator_complete.

Step 3: The GA4 Event Tag

Create a GA4 Event tag:

If a parameter should ride on every event, set it in the Google tag's shared event settings instead of on each event tag.

Step 4: Register Custom Dimensions and Metrics

In GA4 Admin, then Custom definitions:

From the moment you save, reports can use them. Give them readable display names; the parameter name stays technical.

Step 5: User Properties

For attributes of the person rather than the event, send user properties. Push them to the dataLayer when known, for example on login:

window.dataLayer.push({
  event: 'user_data_ready',
  user_plan: 'pro',
  user_customer_status: 'existing',
  user_id: '48213'
});

In the Google tag's configuration, map user properties: plan to {{dlv - user_plan}}, customer_status to {{dlv - user_customer_status}}. Set User ID in the Google tag fields to {{dlv - user_id}} for cross-device reporting where you have logged-in users. Register each user property as a user-scoped custom dimension.

Never send personally identifiable information such as names, emails or addresses as parameters or user properties.

Step 6: Mark Key Events

If the custom event is a business outcome, open Admin, then Events, and mark it as a key event. If it should carry value, send value and currency as parameters.

Step 7: Verify

  1. GTM Preview. Trigger the event. Confirm the GA4 tag fires with all parameters populated.
  2. GA4 DebugView. Click the event and confirm each parameter and user property is present with the right value.
  3. The next day, open Reports, then Engagement, then Events, click the event, and add a secondary dimension using your custom dimension. If it appears, registration worked.
  4. Build an Exploration with the custom dimension and metric to be sure both are usable.

Limits to Remember

Item Standard property limit
Event-scoped custom dimensions 50
User-scoped custom dimensions 25
Item-scoped custom dimensions 10
Custom metrics 50
Parameters per event 25
Parameter name length 40 characters
Parameter value length 100 characters
User properties 25
Distinct event names 500 per app instance; web is not hard-capped but keep it sane

If you are near the dimension limit, consolidate. A cta_location parameter beats ten separate cta_header, cta_footer events.

Common Mistakes

Outcome

A small set of well-named custom events with registered dimensions and metrics, user properties for the attributes that matter, and reports that can finally answer the questions you built the events for.

Frequently Asked Questions

Why does my custom parameter not appear in reports?

Parameters are collected but not reportable until you register them as a custom dimension or metric in Admin. Registration applies from that moment forward; earlier data is not backfilled. DebugView and BigQuery show unregistered parameters, standard reports do not.

What are the limits?

Standard properties allow 50 event-scoped custom dimensions, 25 user-scoped custom dimensions, 50 custom metrics and 10 item-scoped dimensions. Each event can carry up to 25 parameters, names up to 40 characters, values up to 100 characters. Archiving a dimension is permanent and frees the slot after a short delay.

Custom event or recommended event?

Recommended event whenever one fits, because reports understand it. Custom event for anything specific to your site, such as calculator_complete or chat_started. Never rename a recommended action to something custom.

What is the difference between an event parameter and a user property?

An event parameter describes the event: which form, which product, which button. A user property describes the person and sticks to all their events: plan type, customer status, logged-in state. Register parameters as event-scoped dimensions and user properties as user-scoped dimensions.

Should I create events inside the GA4 interface or in GTM?

GTM. Events created in the GA4 interface from existing events are a convenience for small fixes, but they are invisible to anyone looking at your container and easy to forget. Keep the logic in one place.

Want This Done Right the First Time?

Book a free 15-minute audit call. I'll review your setup, show you what is broken, and tell you exactly what it takes to fix it.

Chat Now