Event count is one of the most useful metrics in GA4, but finding it requires knowing where to look. Unlike Universal Analytics, GA4 treats every interaction as an event, so visualizing event frequency matters whether you're tracking form submissions, button clicks, or custom business events.
Visualize Event Count in the GA4 Interface
The easiest way to see how often events fire is through GA4's built-in reports.
Step 1: Navigate to the Events Report
In GA4, go to Reports > Events in the left sidebar. This shows all events collected in your property ranked by count. GA4 displays the event name and the total number of times it fired during your selected date range.
// GA4 Events Report is built-in
// Navigate via UI: Reports > Events
// No API call needed — this is the native report viewStep 2: Filter to a Specific Event
Click on any event name to drill down into that event's details. GA4 shows you the event count broken down by user properties and custom dimensions. Use the Date range selector at the top to adjust your analysis window.
// Click an event name in the Events report
// GA4 auto-generates a secondary report showing:
// - Event parameters
// - User breakdown
// - Conversion tracking statusStep 3: Create a Custom Exploration for Advanced Visualization
For more control, use Explore (top navigation). Create a new blank exploration, add eventCount as your metric, eventName as a dimension, and adjust your visualization type to bar chart or table. This lets you compare event counts side-by-side across multiple events.
// In GA4 Explore:
// 1. Click Explore > Blank exploration
// 2. Metric: eventCount
// 3. Dimension: eventName
// 4. Visualization: Bar chart or Table
// 5. Run the reportQuery Event Count Programmatically with the Reporting API
To pull event count data into your own dashboard or application, use the Google Analytics Reporting API.
Step 1: Set Up Authentication with a Service Account
Create a service account in Google Cloud Console and download the JSON key file. Install the googleapis npm package. Authenticate using the service account with read-only analytics scope.
const { google } = require('googleapis');
const auth = new google.auth.GoogleAuth({
keyFile: '/path/to/service-account-key.json',
scopes: ['https://www.googleapis.com/auth/analytics.readonly']
});
const analyticsreporting = google.analyticsreporting({
version: 'v4',
auth
});Step 2: Build a Report Request for Event Count
Call reports.batchGet() with your property ID, date range, and metrics. Use eventCount as your metric and eventName as a dimension to break down counts by event. Order the results by count descending to see your most-fired events first.
const request = {
reportRequests: [
{
viewId: '123456789',
dateRanges: [
{
startDate: '2026-01-01',
endDate: '2026-03-26'
}
],
metrics: [
{
expression: 'eventCount'
}
],
dimensions: [
{
name: 'eventName'
}
],
orderBys: [
{
fieldName: 'eventCount',
sortOrder: 'DESCENDING'
}
],
pageSize: 100
}
]
};
analyticsreporting.reports.batchGet({ requestBody: request });Step 3: Parse and Visualize the Response
The API returns rows with dimensions: [eventName] and metrics: [eventCount]. Map through the rows to extract event names and counts, then pass to Chart.js or your charting library of choice.
analyticsreporting.reports.batchGet({ requestBody: request }, (err, response) => {
if (err) {
console.error('API error:', err);
return;
}
const report = response.data.reports[0];
const rows = report.data.rows || [];
const eventData = rows.map(row => ({
eventName: row.dimensions[0],
count: parseInt(row.metrics[0].values[0])
}));
console.log('Event counts:', eventData);
// Pass to Chart.js or D3 for visualization
});orderBys: { fieldName: 'eventCount', sortOrder: 'DESCENDING' } to get the most-fired events first. Without sorting, results may be in arbitrary order.Filter Event Count by User Segments
Sometimes you need event counts for only a specific segment of users.
Step 1: Add Dimension Filters to Narrow Your Results
In your batchGet() request, add dimensionFilterClauses to filter events. For example, filter to count events only from mobile users, users in a specific country, or those with a particular property. This narrows your event count to meaningful segments.
const request = {
reportRequests: [
{
viewId: '123456789',
dateRanges: [{ startDate: '2026-01-01', endDate: '2026-03-26' }],
metrics: [{ expression: 'eventCount' }],
dimensions: [{ name: 'eventName' }],
dimensionFilterClauses: [
{
operator: 'AND',
filters: [
{
dimensionName: 'deviceCategory',
operator: 'EXACT',
expressions: ['mobile']
}
]
}
]
}
]
};
analyticsreporting.reports.batchGet({ requestBody: request });pageToken from the response.Common Pitfalls
- Confusing 'eventCount' (total event firings) with 'users' (unique users) — GA4 reports both, but they measure different things.
- Relying on Debug View for event counts — it's real-time but not for actual analytics. Use the Events report or API for definitive counts.
- Missing events because GA4 doesn't display events with zero occurrences — check Debug View if an event you're tracking doesn't appear in reports.
- Using an old Universal Analytics property ID instead of a GA4 property ID — GA4 IDs are numeric; UGA properties have alphanumeric IDs.
Wrapping Up
You now know how to visualize event counts in GA4 both through the dashboard and programmatically via the Reporting API. Whether you're doing a quick check in the Events report or pulling counts into a custom dashboard, event count is your foundation for understanding how often key interactions happen. If you want to track and visualize event counts automatically across multiple tools—GA4, Mixpanel, Amplitude, PostHog, and more—Product Analyst can help.