Track stream performance and viewer behavior
Combine streaming data with your existing web analytics for complete user journey tracking
Understand watch time, engagement patterns, drop-off points, and viewer demographics
Track how streams drive website visits, sign-ups, and purchases with full attribution
Build custom GA4 dashboards with streaming KPIs alongside your business metrics
Set up a Google Analytics 4 property for your streaming analytics
Note: You'll need your Measurement ID (starts with G-) and API Secret from Data Streams settings.
Retrieve your Measurement ID and API Secret for server-side tracking
Set up webhook to send stream events to Google Analytics
Choose which streaming events to send to Google Analytics
Verify events are flowing to Google Analytics correctly
| Parameter | Type | Description |
|---|---|---|
| stream_id | string | Unique stream identifier |
| stream_title | string | Stream title/name |
| creator_id | string | Streamer user ID |
| creator_name | string | Streamer display name |
| viewer_count | number | Current concurrent viewers |
| peak_viewers | number | Maximum concurrent viewers |
| duration_minutes | number | Stream duration |
| category | string | Stream category/game |
| quality | string | Video quality (720p, 1080p, 4K) |
| revenue | number | Total revenue generated |
Create a custom GA4 dashboard to monitor your streaming KPIs in real-time
Understand how streams influence user behavior and drive conversions on your website
Pro Tip: Use UTM parameters in stream descriptions to track traffic from streams to your website: ?utm_source=wave&utm_medium=stream&utm_campaign=stream_id
Example code to send custom events from your server to GA4
// Node.js example
const fetch = require('node-fetch');
async function sendGA4Event(measurementId, apiSecret, clientId, event) {
const url = `https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`;
const payload = {
client_id: clientId,
events: [{
name: event.name,
params: event.params
}]
};
const response = await fetch(url, {
method: 'POST',
body: JSON.stringify(payload)
});
return response.ok;
}
// Usage example
await sendGA4Event(
'G-XXXXXXXXXX', // Your Measurement ID
'your_api_secret', // Your API Secret
'user_12345', // Client ID (user identifier)
{
name: 'stream_started',
params: {
stream_id: 'stream_abc123',
stream_title: 'Product Launch 2024',
creator_name: 'JohnDoe',
category: 'Technology',
quality: '1080p'
}
}
);Track viewer interactions directly from your streaming page
<!-- Add to your streaming page -->
<script>
// Send event when viewer joins
gtag('event', 'viewer_joined', {
'stream_id': 'stream_abc123',
'stream_title': 'Product Launch 2024',
'viewer_id': 'viewer_12345',
'timestamp': new Date().toISOString()
});
// Track watch time every 30 seconds
setInterval(() => {
gtag('event', 'watch_time_update', {
'stream_id': 'stream_abc123',
'seconds_watched': getCurrentWatchTime(),
'quality': getCurrentQuality()
});
}, 30000);
// Send event on stream end
window.addEventListener('beforeunload', () => {
gtag('event', 'viewer_left', {
'stream_id': 'stream_abc123',
'total_watch_time': getTotalWatchTime()
});
});
</script>Check that Measurement ID and API Secret are correct. Verify webhook is enabled in WAVE settings. Events can take 1-2 minutes to appear in realtime view.
Ensure all custom parameters are registered in GA4 (Admin → Custom Definitions → Create Custom Dimension/Metric). Parameter names must match exactly.
Verify client_id is unique per viewer. Check for duplicate events. Confirm viewer_joined and viewer_left events are being tracked correctly.
Ensure user_id or client_id is consistent across stream and website tracking. Set up cross-domain tracking if needed. Mark key events as conversions in GA4.
Explore other analytics and tracking integrations