Event Tracking
Master GA4's event-based model: automatic events, enhanced measurement, custom events, and parameters.
The Event Model
GA4's event-based model is fundamentally different from Universal Analytics:
Universal Analytics:
User → Session → Pageview/Event
GA4:
User → Events (everything is an event)
├── page_view (event)
├── scroll (event)
├── click (event)
├── purchase (event)
└── custom_action (event)Event Anatomy
Every GA4 event consists of:
| Component | Description | Example | |-----------|-------------|---------| | Event Name | What happened | purchase | | Parameters | Details about the event | value, currency, items | | User Properties | Persistent user attributes | membership_level | | Timestamp | When it occurred | Auto-captured |
Event Naming Rules
Rules for event names:
├── Max 40 characters
├── Must start with a letter
├── Only letters, numbers, underscores
├── Case-sensitive (purchase ≠ Purchase)
└── Cannot use reserved prefixes (ga_, google_, firebase_)Event Limits
| Limit | Amount | |-------|--------| | Unique event names per property | 500 | | Parameters per event | 25 | | Event name length | 40 characters | | Parameter name length | 40 characters | | Parameter value length | 100 characters |
Automatic Events
These events are collected automatically without any configuration:
Core Automatic Events
| Event | Trigger | Key Parameters | |-------|---------|----------------| | first_visit | First time user visits | - | | session_start | New session begins | - | | user_engagement | 10+ seconds focused on page | engagement_time_msec | | page_view | Page loads | page_location, page_referrer, page_title |
Session Definition in GA4
A new session starts when:
├── First visit ever
├── 30+ minutes of inactivity
├── Midnight (in property timezone)
└── Campaign source changes (UTM parameters)Engaged Sessions
A session is "engaged" when ANY of:
├── Duration > 10 seconds
├── 2+ page views
└── 1+ conversion eventKey Metric: Engagement rate (engaged sessions / total sessions) replaces UA's bounce rate. Higher is better.
Enhanced Measurement
Enhanced Measurement events can be toggled on/off in the Admin interface.
How to Enable
Admin → Data Streams → Select stream → Enhanced measurement → Toggle eventsAvailable Enhanced Measurement Events
| Event | What It Tracks | Parameters | |-------|----------------|------------| | page_view | Page loads + history changes | page_location, page_title | | scroll | 90% vertical scroll depth | - | | outbound_click | Clicks to other domains | link_url, link_domain, outbound | | site_search | Internal site searches | search_term | | video_start | Embedded video starts | video_title, video_provider, video_url | | video_progress | 10%, 25%, 50%, 75% progress | video_percent, video_current_time | | video_complete | Video ends | video_duration | | file_download | File downloads | file_name, file_extension, link_url | | form_start | First form interaction | form_destination, form_id | | form_submit | Form submission | form_destination, form_id, form_submit_text |
Best Practices
□ Enable all relevant Enhanced Measurement events
□ Test each event in DebugView after enabling
□ Note: Video tracking works for YouTube embeds only
□ File download detects common extensions (.pdf, .doc, etc.)
□ Site search requires consistent URL parameterRecommended Events
Google provides recommended event names for common use cases. Using these unlocks special reporting features.
E-commerce Events
| Event | When to Use | |-------|-------------| | view_item_list | User views a list of products | | view_item | User views a product detail page | | add_to_wishlist | User adds to wishlist | | add_to_cart | User adds product to cart | | remove_from_cart | User removes product from cart | | begin_checkout | User starts checkout | | add_payment_info | User submits payment info | | add_shipping_info | User submits shipping info | | purchase | User completes purchase | | refund | Order is refunded |
Lead Generation Events
| Event | When to Use | |-------|-------------| | generate_lead | User submits lead form | | sign_up | User creates account | | login | User logs in | | share | User shares content |
Engagement Events
| Event | When to Use | |-------|-------------| | search | User searches | | view_search_results | Search results displayed | | select_content | User selects content | | select_item | User selects item from list | | select_promotion | User clicks promotion | | view_promotion | Promotion is viewed |
Why Use Recommended Events?
Benefits of recommended events:
├── Automatic e-commerce reports
├── Predictive metrics eligibility
├── Cross-platform consistency
├── Future feature compatibility
└── Better Google Ads integrationCustom Events
For actions not covered by automatic, enhanced, or recommended events.
Creating Custom Events
Method 1: gtag.js (Direct Code)
// Basic custom event
gtag('event', 'video_watched', {
'video_name': 'Product Demo',
'video_duration': 120
});
// Event with more parameters
gtag('event', 'pricing_page_interaction', {
'plan_selected': 'enterprise',
'billing_period': 'annual',
'price_viewed': 299
});Method 2: Google Tag Manager
1. Create GA4 Event tag
2. Set Event Name
3. Add Event Parameters
4. Create trigger (button click, form submit, etc.)
5. Test in Preview mode
6. PublishMethod 3: GA4 Interface (Modify Existing Events)
Admin → Events → Create event
Example: Create "signup_complete" from "page_view"
├── Matching conditions:
│ └── page_location contains "/thank-you"
└── New event name: signup_completeCustom Event Best Practices
## Naming Conventions
□ Use snake_case (video_start, not videoStart)
□ Be descriptive but concise
□ Group related events with prefixes (form_start, form_submit)
□ Don't duplicate recommended event names
□ Keep under 40 characters
## Implementation
□ Always test in DebugView first
□ Document all custom events
□ Include relevant parameters
□ Register parameters as custom dimensions if needed for reportsEvent Parameters
Parameters provide context and details about events.
Parameter Types
| Type | Scope | Example | |------|-------|---------| | Event Parameters | Single event | value, currency | | User Properties | All events for user | membership_tier | | Item Parameters | E-commerce items | item_name, price |
Common Parameters
// Event with standard parameters
gtag('event', 'purchase', {
'transaction_id': 'T12345',
'value': 99.99,
'currency': 'USD',
'tax': 8.99,
'shipping': 5.99,
'items': [{
'item_id': 'SKU123',
'item_name': 'Product Name',
'price': 85.01,
'quantity': 1
}]
});Registering Custom Parameters
To see custom parameters in reports, register them as custom dimensions/metrics:
Admin → Custom definitions → Create custom dimension
Name: Plan Selected
Scope: Event
Description: The pricing plan user selected
Event parameter: plan_selectedParameter Limits
| Type | Limit | |------|-------| | Event-scoped custom dimensions | 50 | | User-scoped custom dimensions | 25 | | Custom metrics | 50 | | Parameter name length | 40 characters | | Parameter value length | 100 characters |
Important: You only need to register parameters as custom dimensions if you want to use them in standard reports. Explorations can access unregistered parameters.