Skip to content

Guide 158 · Events · GA4 + Tag Manager

Create a custom event with a GA4 Event tag in Tag Manager: any name, any trigger, no interface limit

Checked 11 November 2026 · Verification: container fragment validated structurally (format 2, unique IDs, trigger resolves, variable references exist); worked example recomputed · Steps traced to Analytics Help and Tag Manager Help, opened 11 November 2026 · 6-minute read

When no recommended event fits and no existing event can be sliced, the custom event is created in Tag Manager: a GA4 Event tag with a name of your own, on a trigger that matches the action. This guide builds quote_requested from a button click, with one parameter of its own, and checks it in Preview and DebugView before publishing.

Expected signal

After the tag is published, a test click shows in DebugView as a quote_requested event with product_category set, and the Realtime report lists it under Event count by Event name within minutes.

Download the container fragment: the quote_requested event container fragment (JSON) (2376 bytes, MD5 ee87b7627cf80bf88641427786749f0f). It holds one GA4 Event tag named GA4 - quote_requested, a Click trigger that fires on the quote button, and the data layer variable for product_category. The Measurement ID is left as G-XXXXXXXXXX for you to replace. Import it from Admin, then Import Container, choosing Merge if the container already has tags.

What you need

  • The Google tag already installed through Tag Manager. This guide adds one event tag beside it.
  • An action GA4 does not already measure. Here the action is a click on the Request a quote button. Check the recommended events list first: a custom event that duplicates a recommended one is one of the most common implementation mistakes.
  • A name that follows the rules. The name is quote_requested: lowercase letters and underscores, starting with a letter, under 40 characters. The naming-rules guide covers the full list, including the reserved prefixes.

The worked example

The test below is twenty quote requests in one week across three product categories. The count that matters is the split: one category took half the requests.

Product categoryRequests
Windows10
Doors6
Roofing4
Total requests20
Windows share10 of 20 (50.00%)

Those figures were recomputed here before publication: 10 plus 6 plus 4 is 20 requests; 10 divided by 20 is 0.5, so Windows is 50.00% of the requests. The data layer push that carries one of those requests is the standard form:

dataLayer.push({
  event: "quote_requested",
  product_category: "Windows"
});

The trace

  1. Check the recommended list first. Open the recommended events page and confirm no recommended event fits the action. A quote request is not a purchase, not a lead form, and not a content pick, so no recommended name fits; the custom name quote_requested is the right call.
  2. Push the action to the data layer. When the quote button is clicked, run dataLayer.push({ event: "quote_requested", product_category: "Windows" }), with the category set to the real one. The event name is the custom name, and the parameter name is product_category.
  3. Create the data layer variable. In Tag Manager, go to Variables, then in User-Defined Variables click New, choose Data Layer Variable, set the Data Layer Variable Name to product_category, and name the variable DLV - product_category.
  4. Add the GA4 Event tag. Go to Tags, then click New. Name it GA4 - quote_requested. In Tag Configuration, choose tag type Google Analytics: GA4 Event. Enter your Measurement ID. In Event Name, enter quote_requested. Under Event Parameters, add a row with Parameter Name product_category and Value {{DLV - product_category}}.
  5. Set the trigger. In Triggering, click the trigger box and choose New, then choose trigger type Custom Event. Set Event Name to quote_requested and choose All Custom Events. Click Save, then Save the tag.
  6. Check it in Preview and DebugView. Click Preview, enter the site URL, and click Connect. Click the Request a quote button. In Tag Assistant, the quote_requested event must appear in the left panel with the tag under Tags Fired. Then open DebugView (Admin, then Data display, then DebugView) and confirm the event shows with product_category set to Windows.
  7. Publish it as a version. Click Submit at the top right, select Publish and Create Version, name the version, and click Publish.

Dead ends

DEAD END — A CUSTOM NAME THAT DUPLICATES A RECOMMENDED EVENT. A custom event named lead_form where Google's generate_lead fits means the site loses the lead reports Google builds for the recommended name. Check the recommended list before every custom name.

DEAD END — THE NAME CARRIES THE VARIABLE. An event name such as quote_requested_windows bakes the category into the name, and every new category becomes a new event. The name stays constant; the variable goes in a parameter. The naming-rules guide covers this rule.

DEAD END — A RESERVED NAME OR PREFIX. Names starting with ga_, google_, or firebase_ are reserved, and a custom event that reuses a recommended name for a different meaning is dropped or mishandled. The naming-rules guide lists the reserves.

End state

One tag, one trigger, one parameter. A quote request shows in DebugView within a minute of the test, in Realtime within minutes of publishing, and in the Events report within 24 hours, with the request split visible per product_category. Register product_category as an event-scoped custom dimension if you want to break the Events report down by category — the custom dimensions guide covers that step.

Sources

Checked 11 November 2026. The click paths above are the ones in Google's help and developer pages, opened 11 November 2026. No step in this guide was run inside a live Analytics property or a live Tag Manager container, because both need a Google sign-in and this site does not sign in as anyone. What was run: the container fragment was validated structurally in Python 3.12.3 — export format version 2, unique IDs, the tag's firing trigger resolves to the Custom Event trigger in the file, and the {{DLV - product_category}} reference exists as a variable — and the worked example was recomputed: 10 + 6 + 4 = 20 requests; 10 / 20 = 50.00% for Windows. Google moves menu items without warning; if a path on this page no longer matches, the linked help page is the current map.