# 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