Understanding GA4 Events: A Plain-English Explainer
By Emily Redmond, Data Analyst at Emilytics · April 2026
TL;DR: Events are actions users take. GA4 has automatic events (pageview, scroll, click) and custom events you define. Each event has parameters that add context. Understanding events is the foundation of GA4 tracking.
GA4 is event-driven. Everything—every interaction, every state change—is an event. If you don't understand events, you're lost in GA4. But they're simpler than they sound. This article breaks it down in plain English.
What Is an Event?
An event is something a user does, or something that happens on your site or app. Examples:
- Landing on a page (page_view)
- Scrolling down the page (scroll)
- Clicking a button (click)
- Submitting a form (form_submit)
- Playing a video (video_play)
- Purchasing an item (purchase)
- Closing the app (app_close)
In GA4's worldview, every interaction is an event. No distinction between "important" and "unimportant"—they're all events. You decide which ones matter by marking them as conversions.
Automatic Events
GA4 automatically collects certain events without any custom setup:
| Event | Fires When |
|---|---|
| page_view | User lands on a page |
| scroll | User scrolls down the page (25%, 50%, 75%, 100%) |
| click | User clicks a link or button |
| view_search_results | User performs a search (if you implement search tracking) |
| video_start | User starts playing a YouTube video |
| video_progress | User reaches 10%, 25%, 50%, 75% of a video |
| video_complete | User finishes a video |
| file_download | User downloads a file (.pdf, .zip, etc.) |
| form_start | User interacts with a form field |
| form_submit | User submits a form |
These are useful, but they're only the foundation. They tell you that something happened, but not why or what.
💡 Emily's take: I once audited a GA4 setup where someone relied entirely on automatic events. They knew users were scrolling, but not what content was engaging them. Custom events with parameters changed everything—suddenly they could see "users who watched >75% of the pricing page" or "users who hovered over the product demo." That's when GA4 becomes powerful.
Custom Events
A custom event is one you create to track something specific to your business. Examples:
search_performed: A user searched for a productadd_to_cart: A user added an item to their cartfeature_used: A user used a specific featurevideo_started: A user clicked play on your own (non-YouTube) videoerror: A JavaScript error occurredchat_opened: A user opened the chat widget
To fire a custom event, you use code or Google Tag Manager:
Via Code (JavaScript)
gtag('event', 'add_to_cart', {
item_id: '12345',
item_name: 'Blue Widget',
item_price: 29.99,
quantity: 1
});
Via Google Tag Manager
- Create a trigger (e.g., "Click on add-to-cart button")
- Create a GA4 event tag with the event name (
add_to_cart) - Add parameters (item_id, item_name, etc.)
- Publish
Parameters: The Secret Sauce
An event parameter is a key-value pair that adds context to an event. Parameters are where GA4 gets powerful.
A basic page_view event tells you a page was visited. But a page_view event with parameters tells you:
Event: page_view
Parameters:
- page_path: /pricing
- page_title: Pricing Page
- page_category: pricing
- user_segment: premium
- experiment_id: test_v2
Now you can filter: "Show me pageviews on the pricing page for premium users in the test group." Without parameters, that's impossible.
Standard Parameters (Built-In)
GA4 includes standard parameters automatically:
page_path: The URL pathpage_title: The page titlepage_referrer: Where the user came frompage_location: The full URLevent_count: How many times this event has fired in the session
Custom Parameters (You Define)
You can add up to 25 custom parameters per event:
gtag('event', 'purchase', {
transaction_id: 'txn_12345',
value: 99.99,
currency: 'USD',
items: [
{
item_id: 'prod_001',
item_name: 'Widget',
price: 99.99,
quantity: 1
}
],
coupon_code: 'SAVE20',
shipping_address: 'New York'
});
Each parameter should have a clear name and value. item_name: 'Widget' is good; x: 'w' is useless.
Event Naming Conventions
Name your custom events clearly. Use snake_case (underscores, not spaces or dots). Examples:
✓ Good: video_play, form_submission, add_to_cart, feature_upgrade
✗ Bad: Video Play, form.submission, addToCart, x1
GA4 lets you use up to 40 characters. Use that space to be descriptive.
Recommended Custom Events (By Use Case)
For SaaS / Service Businesses
demo_requested: User requested a demopricing_viewed: User viewed the pricing pagefree_trial_started: User started a free trialsubscription_upgraded: User upgraded their plansupport_ticket_opened: User opened a support ticket
For Ecommerce
product_viewed: User viewed a product detail pageadd_to_cart: User added item to cartremove_from_cart: User removed item from cartbegin_checkout: User started checkoutpurchase: User completed a purchasewishlist_added: User added item to wishlist
For Publishers / Content Sites
article_read: User finished reading an articlevideo_completed: User watched full videonewsletter_signup: User signed up for newslettercomment_posted: User posted a comment
For Apps
onboarding_completed: User finished onboardingfeature_used: User used a specific featureapp_crashed: App crashedpush_notification_clicked: User clicked a push notification
How to Fire a Custom Event: Step-by-Step
Let's say you want to track when someone clicks your "Book a Demo" button.
Option 1: Google Tag Manager (No Code)
- Go to your GTM container
- Create a Trigger:
- Trigger type: Click
- Some Clicks
- Filter: Click text → contains → "Book a Demo"
- Create a Tag:
- Tag type: Google Analytics: GA4 Event
- Event name:
demo_requested - Measurement ID: (your GA4 ID)
- Triggering: Apply the trigger you created above
- Add Parameters (optional):
- Parameter name:
button_location| Value:homepage_header
- Parameter name:
- Save and Publish
Visit your site, click the button, check GA4 Real-Time. You should see demo_requested fire.
Option 2: Direct Code (JavaScript)
document.querySelector('.book-demo-button').addEventListener('click', function() {
gtag('event', 'demo_requested', {
button_location: 'homepage_header',
timestamp: new Date().toISOString()
});
});
Or, if you're using a framework:
handleDemoClick = () => {
gtag('event', 'demo_requested', {
button_location: 'pricing_page_cta'
});
// Redirect to booking tool
window.location.href = '/booking';
}
Viewing Events in GA4
In Real-Time
- Go to GA4
- Click Real-time (under Reports)
- You see events firing in real-time
- Expand an event to see its parameters
In Standard Reports
- Click Reports → Events (under Engagement)
- Select the event name
- See event count, unique users, etc.
In Explorations
- Click Explore (bottom of left sidebar)
- Create a freeform report
- Add
event_nameas a dimension - Filter or segment by events
Event Data Storage and Limits
GA4 stores event data with timestamps, parameters, and user information. A few important limits:
- Max 25 custom parameters per event (standard parameters don't count)
- Max 25 items per event (useful for purchases with multiple line items)
- Max 40 characters for custom dimension/metric names
- Event data kept for 2 months (user-level; you can extend to 14 months or export to BigQuery for unlimited)
Frequently Asked Questions
Q: If I fire the same custom event twice in one session, do both count?
A: Yes. Each event fires independently. If a user clicks "Add to Cart" twice, you'll see two add_to_cart events. GA4 counts them separately.
Q: Can I change an event name after I've been collecting it?
A: Not retroactively. If you realize you named an event signin when you meant sign_in, you can't rename the old data. Going forward, you fire the new event name. It's a fresh start for that event.
Q: What's the difference between event parameters and user properties? A: Event parameters are attached to a single event (that user's action right now). User properties are attached to the user (that user's account tier, location, etc.). Use parameters for action-specific data; use user properties for user-specific data.
Q: Can I fire events from my app and my website to the same property? A: Yes, if you use the same Measurement ID or Measurement Protocol. But best practice is to use the same property with separate data streams (one web, one app). This lets you segment by platform.
Q: How often can I fire the same event? A: As often as you want. No limits on frequency. If a user clicks a button 100 times, you'll see 100 events (though GA4 might sample them at massive scale).
The Bottom Line
Events are the language of GA4. Automatic events get you started; custom events make you powerful. Parameters turn events from "something happened" into "something specific happened to this user in this context."
Spend time thinking about which custom events matter to your business. Then implement them deliberately. The data you collect now determines the insights you can extract later.
Ready to track conversions? See How to Set Up GA4 Conversion Tracking (Step-by-Step).
Emily Redmond is a data analyst at Emilytics — the AI analytics agent that watches your GA4, Search Console, and Bing data around the clock so you never miss what matters. 8 years of experience helping founders and growth teams turn data noise into clear decisions. Say hi →