GA4 automatically collects page views, session starts, and first visits. But the actions that actually matter for your business — button clicks, form submissions, checkout steps, video plays — you have to define yourself. These are custom events, and getting them right is the foundation of any useful analytics setup.
This guide covers when to use custom events, how to set them up with and without Google Tag Manager, and how to mark them as conversions for reporting and Google Ads bidding.
What GA4 Custom Events Are (and What They Are Not)
GA4 groups events into four categories:
- Automatically collected events —
page_view,session_start,first_visit. No configuration needed. - Enhanced measurement events — scroll, outbound clicks, site search, video engagement. Enabled in your GA4 data stream settings.
- Recommended events — events with predefined names and parameters that Google suggests for specific industries:
purchase,add_to_cart,sign_up,generate_lead. You implement these yourself but follow Google’s exact naming convention. - Custom events — anything that does not fit the above. You define the name and parameters.
The most important rule: if a recommended event name exists for what you want to track, use it. Recommended events have built-in support in GA4 reports. Custom event names appear in a catch-all category unless you build custom explorations around them.
Which Events to Track
Do not track everything. Focus on events that either indicate strong purchase intent or act as a measurable milestone in your conversion funnel. High-value custom events for most ecommerce and lead gen sites:
- generate_lead — contact form submission (recommended event name)
- begin_checkout — user clicks “Proceed to Checkout” (recommended event name)
- cta_button_click — specific CTA buttons: “Get a Quote”, “Start Free Trial”, “Book a Call”
- video_play — user starts a product demo or explainer video
- phone_click — user clicks a phone number link (especially important for service businesses)
- scroll_depth — user reaches 50% or 75% of a long-form content page
- filter_used — user interacts with collection filters on category pages
Start with the top two or three events that are closest to revenue. Get those verified and reporting correctly before adding more.
Method 1: Set Up Custom Events with Google Tag Manager
GTM is the recommended approach. It does not require code changes on your site and lets non-developers manage tracking changes independently.
Step 1: Identify the Trigger
- Open GTM Preview mode and navigate to the page with the element you want to track.
- Perform the action — click the button, submit the form, play the video.
- In the Tag Assistant panel, find the corresponding event (usually Click or Form Submission).
- Open the Variables tab to see
Click ID,Click Classes,Click Text, andClick URL.
Use one of those attributes to build a precise trigger. For a “Book My Free Audit” button: trigger type Click — All Elements, condition Click Text contains "Book My Free Audit".
Step 2: Create the GA4 Event Tag
- In GTM, create a new tag → Google Analytics: GA4 Event.
- Select your GA4 configuration tag (or enter your Measurement ID directly).
- Set the Event Name. Use a recommended name if one fits. For a CTA click:
cta_button_click. - Add Event Parameters to provide context in GA4 reports:
button_text→ {{Click Text}} (built-in GTM variable)page_location→ {{Page URL}}
- Set the trigger to the click trigger you built in Step 1.
- Save and publish your GTM container.
Step 3: Verify in GA4 DebugView
- Enable GTM Preview mode — this automatically enables GA4 debug mode for your session.
- In GA4, go to Admin → DebugView.
- Perform the action on your live site.
- The event should appear in real-time in DebugView with all parameters visible.
DebugView data is not saved to your main reports. Allow 24–48 hours for the event to appear in the standard Events report. Do not assume the setup is broken if you do not see data on day one.
Method 2: Set Up Custom Events with gtag.js (Direct Code)
If you are not using GTM, push events directly using the gtag() function:
// On form submission
document.getElementById('contact-form').addEventListener('submit', function() {
gtag('event', 'generate_lead', {
form_name: 'contact_form',
page_location: window.location.href
});
});
// On button click
document.getElementById('cta-btn').addEventListener('click', function() {
gtag('event', 'cta_button_click', {
button_text: this.innerText,
page_location: window.location.href
});
});
One important limitation: if the page redirects immediately after the form submission (common with thank-you page redirects), the event may not finish sending before the page unloads. To handle this, either use GTM’s Form Submit trigger (which handles timing correctly) or add a short callback delay before the redirect in your form handler.
Method 3: Create Custom Events from Existing Events in the GA4 UI
GA4 lets you create new events by filtering existing ones — no GTM or code required:
- In GA4, go to Admin → Events → Create event.
- Set the new event name (e.g.
book_audit_click). - Add matching conditions:
event_nameequalsclickANDclick_textequalsBook My Free Audit. - Copy parameters from the source event so they carry over.
- Save.
This method is useful for quickly segmenting a generic click event into a specific named event without touching GTM. The limitation is that it only works on events GA4 already collects — you cannot create something from nothing.
Marking Custom Events as Conversions
Once your event has collected data for at least 24 hours:
- In GA4, go to Admin → Events.
- Find your event in the list.
- Toggle Mark as conversion on.
The event will now appear in your Conversions report and become available to import into Google Ads for bidding.
Only mark events as conversions if they represent genuine business value. Marking scroll depth or tab interactions as conversions floods your conversion count and sends confusing signals to any Smart Bidding campaign you run.
Making Event Parameters Visible in Reports
Event parameters appear in raw event data but are not visible in GA4’s standard reports until you register them as custom dimensions:
- In GA4, go to Admin → Custom definitions → Create custom dimension.
- Set the dimension name (visible in reports).
- Set the scope to Event.
- Set the event parameter to match exactly what you pass in your tag code — e.g.
button_text. - Save.
Custom dimensions are available in Explore reports within 24–48 hours. GA4 allows up to 50 custom event-scoped dimensions on the free tier.
Common Mistakes with GA4 Custom Events
- Capital letters or spaces in event names — GA4 event names are case-sensitive and treat spaces as errors. Use
cta_button_clicknotCTA Button Click. Two differently-cased versions of the same event appear as two separate events in reports. - Not registering custom dimensions — parameters appear in raw data but are invisible in standard reports until registered. Do this on day one.
- Marking every event as a conversion — this floods your Conversions report and makes Google Ads Smart Bidding optimise toward low-quality signals.
- Inconsistent parameter data types — if
order_valueis sometimes a string ("49.99") and sometimes a number (49.99), GA4 treats them as different values. Always pass numbers as numbers. - Duplicating events from both GTM and gtag — if your site has both GTM and a hardcoded gtag snippet, the same event may fire twice. Check for duplicate fires in DebugView.
Build a Measurement Plan First
Before setting up any event, write a one-page measurement plan. This prevents duplicate events, unclear naming, and tracking noise:
| Event Name | Trigger | Parameters | Conversion? |
|---|---|---|---|
| generate_lead | Contact form success | form_name, page_location | Yes |
| begin_checkout | Click “Proceed to Checkout” | item_count, cart_value | No (funnel step) |
| cta_button_click | Click any primary CTA button | button_text, page_path | No (analysis only) |
| phone_click | Click phone number link | phone_number, page_location | Yes |
If you want these events captured even when a user has an ad blocker installed, you will need server-side tracking — the approach changes significantly once events need to bypass browser-level restrictions.
Related Articles
- Google Ads Conversion Tracking Setup: Step-by-Step Guide (2025)
- GA4 Audiences for Remarketing: Setup Guide and Best Practices
- How to Import GA4 Conversions into Google Ads
- Shopify GA4 Purchase Tracking Setup
Want Someone to Audit Your GA4 Setup?
Custom events are only useful if they are firing correctly. If you are not sure your setup is tracking what you think it is, we offer a free 20-minute tracking audit — we will look at your GA4 events live and tell you exactly what to fix.