# Event Parameters Complete Guide ## Overview Event parameters provide context and detail about user interactions in GA4. Understanding parameter structure, limits, and best practices is essential for effective event tracking. ## What Are Event Parameters? **Definition:** Additional data points attached to events that provide context about user actions. **Structure:** ```javascript gtag('event', 'event_name', { 'parameter_name_1': 'value', 'parameter_name_2': 123, 'parameter_name_3': true }); ``` ## Parameter Types ### 1. Automatically Collected Parameters Parameters GA4 collects without additional configuration. #### Web Stream Standard Parameters **Page Parameters:** - `page_location` - Full page URL (max 1000 chars) - `page_referrer` - Previous page URL (max 420 chars) - `page_title` - Page title from `` tag (max 300 chars) **User/Device Parameters:** - `language` - Browser language (e.g., en-us) - `screen_resolution` - Device screen size (e.g., 1920x1080) - `client_id` - Anonymous user identifier **Engagement Parameters:** - `engagement_time_msec` - Time engaged in milliseconds - `session_id` - Current session identifier - `session_number` - Count of sessions for user #### App Stream Standard Parameters - `app_version` - Current application version - `firebase_screen_id` - Unique screen identifier - `firebase_screen_class` - Screen class name - `platform` - iOS or Android ### 2. Enhanced Measurement Parameters Parameters automatically collected with enhanced measurement events. #### Scroll Event Parameters - `engagement_time_msec` - Time engaged before scroll #### Click Event Parameters - `link_classes` - CSS classes on link - `link_domain` - Destination domain - `link_id` - Element ID - `link_url` - Full destination URL - `outbound` - true (for outbound links) #### File Download Parameters - `file_extension` - File type (.pdf, .xlsx) - `file_name` - Name of file - `link_classes` - CSS classes - `link_id` - Element ID - `link_text` - Link text - `link_url` - Download URL #### Video Engagement Parameters - `video_title` - YouTube video title - `video_url` - YouTube video URL - `video_duration` - Total length (seconds) - `video_current_time` - Playback position - `video_percent` - Milestone reached (10, 25, 50, 75) - `video_provider` - youtube.com - `visible` - Viewport visibility (true/false) #### Form Interaction Parameters - `form_id` - HTML form ID - `form_name` - HTML form name - `form_destination` - Form action URL - `form_submit_text` - Submit button text #### Search Parameters - `search_term` - User's search query - `unique_search_term` - First occurrence flag ### 3. Recommended Event Parameters Standardized parameters for Google-defined recommended events. #### Authentication Parameters **login event:** - `method` - Authentication method (email, google, facebook, phone) **sign_up event:** - `method` - Registration method (email, google, facebook) #### Ecommerce Parameters **Required for purchase event:** - `transaction_id` - Unique transaction identifier (CRITICAL - must be unique) - `value` - Total transaction value (numeric) - `currency` - ISO 4217 currency code (USD, EUR, GBP) **Recommended for purchase:** - `tax` - Tax amount (numeric) - `shipping` - Shipping cost (numeric) - `items` - Array of product objects (see Items Array section) - `coupon` - Coupon code applied (string) - `affiliation` - Store/affiliate name (string) **Item-level parameters (in items array):** - `item_id` - Product SKU/ID - `item_name` - Product name - `price` - Unit price - `quantity` - Number of units - `item_category` - Primary category - `item_category2` through `item_category5` - Hierarchical categories - `item_brand` - Brand name - `item_variant` - Size, color, variant - `coupon` - Item-level coupon - `discount` - Discount amount - `affiliation` - Store name - `index` - Position in list (0-based) - `item_list_id` - List identifier - `item_list_name` - List name - `location_id` - Physical location ID #### Search Parameters - `search_term` - User's search query #### Content Selection Parameters - `content_type` - Type of content (article, video, product) - `item_id` - Content identifier #### Promotion Parameters - `promotion_id` - Promotion identifier - `promotion_name` - Promotion name - `creative_name` - Creative asset name - `creative_slot` - Position (banner_slot_1) ### 4. Custom Parameters Business-specific parameters created for custom events. **Examples:** ```javascript // Video tutorial tracking gtag('event', 'video_tutorial_watched', { 'tutorial_id': 'VID_123', 'tutorial_name': 'GA4 Basics', 'tutorial_duration': 1200, // seconds 'completion_percent': 100, 'difficulty_level': 'beginner', 'language': 'en' }); // SaaS feature usage gtag('event', 'feature_activated', { 'feature_name': 'advanced_reporting', 'feature_tier': 'enterprise', 'activation_source': 'settings_page', 'first_time_use': true }); // E-learning course gtag('event', 'course_enrollment', { 'course_id': 'COURSE_101', 'course_name': 'Advanced Analytics', 'instructor': 'John Doe', 'price': 99.99, 'currency': 'USD', 'level': 'advanced', 'enrollment_method': 'direct' }); ``` ## Parameter Limits and Constraints ### Critical Limits | Limit Type | Standard GA4 | GA4 360 | |------------|-------------|---------| | Parameters per event | 25 | 25 | | Event-scoped custom dimensions | 50 | 125 | | User-scoped custom dimensions | 25 | 100 | | Item-scoped custom dimensions | 10 | 25 | ### Character Limits | Element | Maximum Characters | |---------|-------------------| | Parameter name | 40 | | Parameter value (standard) | 100 | | `page_title` parameter | 300 | | `page_referrer` parameter | 420 | | `page_location` parameter | 1000 | ### Data Type Constraints **Supported Types:** - String (text) - Number (integer or float) - Boolean (true/false) - Array (for items parameter) **Not Supported:** - Objects (except items array) - Nested objects - Functions - Null values (use for clearing only) ## Parameter Naming Conventions ### Best Practices **DO:** - Use snake_case (lowercase with underscores) - Be descriptive but concise - Use consistent naming across events - Keep under 40 characters **DON'T:** - Use spaces or special characters - Use camelCase or PascalCase - Use generic names (param1, value, data) - Include personally identifiable information (PII) ### Naming Patterns **Recommended Patterns:** ``` [object]_[attribute] Examples: product_id, user_tier, video_duration [action]_[attribute] Examples: purchase_value, scroll_depth, form_name [category]_[subcategory]_[attribute] Examples: ecommerce_item_price, video_completion_percent ``` ### Reserved Parameter Names GA4 reserves certain parameter names. Avoid using these for custom parameters: - `client_id` - `session_id` - `session_number` - `page_location` - `page_referrer` - `page_title` - `language` - `screen_resolution` - All recommended event parameter names (transaction_id, value, currency, etc.) ## Items Array Structure ### Overview The `items` parameter is a special array structure for ecommerce events containing product information. ### Required Fields At minimum, each item must have: - `item_id` OR `item_name` (at least one required) ### Complete Item Object ```javascript { // Required (at least one) 'item_id': 'SKU_12345', 'item_name': 'Stan and Friends Tee', // Highly Recommended 'price': 10.01, 'quantity': 3, 'item_category': 'Apparel', // Optional but Useful 'item_brand': 'Google', 'item_variant': 'green', 'item_category2': 'Adult', 'item_category3': 'Shirts', 'item_category4': 'Crew', 'item_category5': 'Short sleeve', // Ecommerce Context 'affiliation': 'Google Merchandise Store', 'coupon': 'SUMMER_FUN', 'discount': 2.22, 'index': 0, 'item_list_id': 'related_products', 'item_list_name': 'Related Products', 'location_id': 'L_12345', // Custom Item Parameters 'item_color': 'green', 'item_size': 'large', 'supplier': 'Vendor_A' } ``` ### Items Array Limits - Maximum 27 items per event - Maximum 10 item-scoped custom dimensions per property (standard GA4) - Maximum 25 item-scoped custom dimensions per property (GA4 360) ### Items Array Example ```javascript gtag('event', 'purchase', { 'transaction_id': 'TXN_12345', 'value': 142.52, 'currency': 'USD', 'items': [ { 'item_id': 'SKU_001', 'item_name': 'Product A', 'price': 49.99, 'quantity': 2, 'item_category': 'Electronics' }, { 'item_id': 'SKU_002', 'item_name': 'Product B', 'price': 29.99, 'quantity': 1, 'item_category': 'Accessories' } ] }); ``` ## Parameter Value Formatting ### Currency Values **Format:** Numeric (not string) ```javascript // ✅ CORRECT 'value': 99.99, 'currency': 'USD' // ❌ WRONG 'value': '$99.99', 'currency': '$' ``` **ISO 4217 Currency Codes:** - USD - US Dollar - EUR - Euro - GBP - British Pound - JPY - Japanese Yen - CAD - Canadian Dollar - AUD - Australian Dollar - CHF - Swiss Franc ### Boolean Values **Format:** true/false (not string) ```javascript // ✅ CORRECT 'first_time_user': true, 'promotional_email_opt_in': false // ❌ WRONG 'first_time_user': 'true', 'promotional_email_opt_in': 'false' ``` ### Numeric Values **Format:** Number (integer or float) ```javascript // ✅ CORRECT 'quantity': 5, 'duration_seconds': 120, 'rating': 4.5 // ❌ WRONG 'quantity': '5', 'duration_seconds': '120', 'rating': '4.5' ``` ### String Values **Format:** Text within character limits ```javascript // ✅ CORRECT 'product_name': 'Blue Widget', 'category': 'Widgets', 'description': 'High-quality blue widget' // ⚠️ WARNING - Will be truncated 'very_long_description': 'This is an extremely long description that exceeds the 100 character limit and will be truncated in GA4 reports which may cause data loss' ``` ## Parameter Scopes Parameters have different scopes determining their application. See **references/parameter-scopes.md** for complete details. ### Quick Reference **Event Scope:** Applies to single event occurrence. Example: `button_name`, `form_id`, `video_title` **User Scope:** Applies to all events from user across sessions. Example: `subscription_tier`, `customer_segment`, `account_type` **Item Scope:** Applies to products in ecommerce items array. Example: `item_color`, `item_size`, `supplier_name` ## Registering Parameters as Custom Dimensions ### Why Register Custom parameters won't appear in GA4 reports until registered as custom dimensions. ### Registration Process 1. **Send Parameter in Event:** ```javascript gtag('event', 'video_watched', { 'video_quality': 'hd', // Custom parameter 'video_duration': 300 }); ``` 2. **Navigate to GA4 Admin:** Admin → Data Display → Custom Definitions 3. **Create Custom Dimension:** - Dimension Name: "Video Quality" - Scope: Event - Event Parameter: "video_quality" - Description: "Quality setting of watched videos" - Click Save 4. **Wait 24-48 Hours:** Data will populate in reports after processing delay ### Registration Best Practices **DO:** - Use descriptive dimension names (appear in reports) - Match parameter name exactly (case-sensitive) - Choose correct scope - Plan dimensions before hitting quota limits - Document all custom dimensions **DON'T:** - Register high-cardinality parameters (unique IDs, timestamps) - Use dimension names with special characters - Change scope after creation (not possible) - Expect immediate data (24-48hr delay) - Register parameters you won't analyze ## Common Parameter Mistakes ### 1. Missing Currency Parameter ```javascript // ❌ WRONG - Missing currency gtag('event', 'purchase', { 'transaction_id': 'TXN_123', 'value': 99.99 }); // ✅ CORRECT gtag('event', 'purchase', { 'transaction_id': 'TXN_123', 'value': 99.99, 'currency': 'USD' }); ``` ### 2. Using Currency Symbols ```javascript // ❌ WRONG - Currency symbol 'currency': '$' // ✅ CORRECT - ISO code 'currency': 'USD' ``` ### 3. Exceeding Parameter Limit ```javascript // ❌ WRONG - 30 parameters (exceeds 25 limit) gtag('event', 'custom_event', { 'param_1': 'value1', 'param_2': 'value2', // ... 28 more parameters 'param_30': 'value30' // This won't be collected }); ``` ### 4. Parameter Name Too Long ```javascript // ❌ WRONG - 52 characters 'this_is_a_very_long_parameter_name_that_exceeds_limit': 'value' // ✅ CORRECT - 28 characters 'descriptive_param_name': 'value' ``` ### 5. Sending PII ```javascript // ❌ WRONG - Contains PII gtag('event', 'form_submit', { 'user_email': 'john@example.com', 'user_phone': '555-1234', 'user_name': 'John Doe' }); // ✅ CORRECT - No PII gtag('event', 'form_submit', { 'email_domain': 'example.com', 'form_type': 'contact', 'form_location': 'footer' }); ``` ### 6. Wrong Data Types ```javascript // ❌ WRONG - Numeric values as strings 'quantity': '5', 'price': '99.99', 'in_stock': 'true' // ✅ CORRECT - Proper types 'quantity': 5, 'price': 99.99, 'in_stock': true ``` ## Parameter Testing Checklist Before deploying event parameters: - [ ] Parameter names follow snake_case convention - [ ] Parameter names are under 40 characters - [ ] Parameter values are under 100 characters (or applicable limit) - [ ] Total parameters per event ≤ 25 - [ ] Correct data types used (number, string, boolean) - [ ] Currency uses ISO codes (not symbols) - [ ] No PII included in parameters - [ ] Parameters visible in DebugView - [ ] Custom parameters registered as custom dimensions (if needed) - [ ] Scope correctly assigned (event/user/item) - [ ] Documentation created for custom parameters ## Advanced Parameter Patterns ### Conditional Parameters ```javascript // Only include parameter if value exists const eventParams = { 'event_category': 'engagement' }; if (couponCode) { eventParams.coupon = couponCode; } if (userTier) { eventParams.user_tier = userTier; } gtag('event', 'purchase', eventParams); ``` ### Dynamic Parameter Values ```javascript // Calculate parameter values dynamically gtag('event', 'video_complete', { 'video_id': videoId, 'video_duration': Math.round(duration), 'completion_time': Date.now(), 'engagement_rate': Math.round((watchedTime / totalTime) * 100) }); ``` ### Merging Parameter Objects ```javascript // Combine multiple parameter sources const baseParams = { 'event_category': 'ecommerce', 'currency': 'USD' }; const productParams = { 'product_id': 'SKU_123', 'product_name': 'Widget', 'price': 29.99 }; gtag('event', 'view_item', { ...baseParams, ...productParams }); ``` ## Parameter Debugging ### Using DebugView 1. Enable debug mode (Google Analytics Debugger extension) 2. Navigate to Admin → DebugView 3. Trigger event 4. Click event in left panel 5. Inspect parameters in right panel **What to Check:** - All expected parameters present - Parameter names correct (case-sensitive) - Parameter values correct type and format - No truncation of values - Parameters within limits (≤25) ### Common DebugView Issues | What You See | Problem | Solution | |-------------|---------|----------| | Parameter missing | Not sent in event | Check event code | | Parameter value wrong | Incorrect data source | Verify variable/value | | Parameter truncated | Exceeds character limit | Shorten value | | Too many parameters | >25 sent | Reduce parameter count | | Parameter not in reports | Not registered as dimension | Register in Admin | ## Additional Resources - Official GA4 Event Parameters: https://support.google.com/analytics/answer/9267735 - Custom Dimensions Guide: https://support.google.com/analytics/answer/10075209 - Items Array Reference: https://developers.google.com/analytics/devguides/collection/ga4/ecommerce