12 KiB
Data Streams Configuration Guide
Complete reference for configuring GA4 data streams for web, iOS, and Android platforms.
Overview
Data streams are platform-specific tracking configurations that collect and send data to your GA4 property. Each data stream receives a unique Measurement ID used in implementation.
Data Stream Types
Web Data Stream
- Platform: Websites
- Measurement ID Format: G-XXXXXXXXXX
- Installation Methods: gtag.js, GTM, CMS plugins
- Enhanced Measurement: Available
iOS Data Stream
- Platform: Apple iOS applications
- Measurement ID Format: G-XXXXXXXXXX
- Installation Methods: Firebase SDK
- Additional Setup: Firebase project integration
Android Data Stream
- Platform: Android applications
- Measurement ID Format: G-XXXXXXXXXX
- Installation Methods: Firebase SDK
- Additional Setup: Firebase project integration
Creating a Web Data Stream
Step-by-Step Process
Step 1: Navigate to Data Streams
- GA4 Property → Admin
- Under "Property" column → Data Streams
- Click "Add Stream"
- Select "Web"
Step 2: Configure Stream Details
Website URL:
- Enter primary domain:
example.com - Do not include
https://orwww - Example:
example.comnothttps://www.example.com
Stream Name:
- Descriptive identifier for internal use
- Example: "Main Website" or "E-commerce Site"
- Shows in Data Streams list
Step 3: Enhanced Measurement
Toggle Enhanced Measurement:
- Recommended: ON (enabled)
- Automatically tracks common interactions
- Can customize which events to collect
Enhanced Measurement Events:
- Page views (cannot disable)
- Scrolls (90% depth)
- Outbound clicks
- Site search
- Video engagement (YouTube)
- File downloads
- Form interactions
Step 4: Create Stream
Click "Create stream" button
Result:
- Data stream created
- Unique Measurement ID generated (G-XXXXXXXXXX)
- Installation instructions available
Web Data Stream Settings
After creation, access stream settings:
Navigate: Admin → Data Streams → Click your web stream
Available Settings:
1. Stream Details
- Stream name (editable)
- Stream ID (read-only)
- Measurement ID (read-only, copy for installation)
- Website URL (editable)
- Enhanced Measurement toggle
2. Enhanced Measurement Configuration
Click gear icon to customize:
Page views:
- Always collected (cannot disable)
- Triggers on: Page load, history changes
- Parameters: page_location, page_referrer, page_title
Scrolls:
- Toggle: ON/OFF
- Trigger: 90% vertical scroll depth (first time only)
- Event name:
scroll
Outbound clicks:
- Toggle: ON/OFF
- Trigger: Click to different domain
- Event name:
click - Parameters: link_url, link_domain, outbound=true
Site search:
- Toggle: ON/OFF
- Auto-detects common query parameters (q, s, search, query)
- Event name:
view_search_results - Parameters: search_term
Video engagement:
- Toggle: ON/OFF
- Platform: YouTube embedded videos only
- Events:
video_start,video_progress,video_complete - Parameters: video_title, video_url, video_duration, video_percent
File downloads:
- Toggle: ON/OFF
- Auto-detects: .pdf, .xlsx, .docx, .txt, .csv, .zip, etc.
- Event name:
file_download - Parameters: file_name, file_extension, link_url
Form interactions:
- Toggle: ON/OFF
- Events:
form_start(first interaction),form_submit - Parameters: form_id, form_name, form_destination
3. Tagging Instructions
View tag instructions button provides:
- Installation code snippets
- GTM setup guidance
- Platform-specific instructions
4. Configure Tag Settings
Advanced gtag.js configuration options
5. More Tagging Settings
Cross-domain Measurement:
- Configure domains for cross-domain tracking
- List all domains to track as single session
- Format:
example.com,shop.example.com
Ignore Internal Traffic:
- Define IP ranges for internal traffic
- Create rules to filter office/test traffic
- Traffic tagged as "internal" in reports
List Unwanted Referrals:
- Exclude payment processors, login pages
- Prevents session breaks from expected referrals
- Example:
paypal.com,stripe.com
6. Measurement Protocol API Secrets
Generate API secrets for:
- Server-side event tracking
- Measurement Protocol implementations
- Secure server-to-server communication
Create API Secret:
- Click "Create"
- Enter secret nickname
- Copy secret value (shown once only)
- Store securely
Creating an iOS Data Stream
Prerequisites
Required:
- Apple Developer account
- iOS app published or in development
- Firebase project (auto-created if needed)
Setup Process
Step 1: Add Stream
- Admin → Data Streams
- Click "Add Stream"
- Select "iOS app"
Step 2: Configure App Details
Bundle ID:
- Format:
com.company.appname - Must match Xcode project bundle identifier
- Example:
com.acme.myapp
App Store ID (Optional):
- Found in App Store Connect
- Format: Numeric ID
- Example:
1234567890
App Name:
- Descriptive name for internal use
- Example: "Acme Mobile App (iOS)"
Step 3: Register App
Click "Register app"
Result:
- Firebase project created (if didn't exist)
- Data stream created
- Measurement ID assigned
iOS Firebase Configuration
Step 4: Download Config File
- Download
GoogleService-Info.plist - Add to Xcode project root
- Ensure file included in app target
Step 5: Add Firebase SDK
Using CocoaPods:
# Podfile
pod 'Firebase/Analytics'
Using Swift Package Manager:
Add Firebase package:
https://github.com/firebase/firebase-ios-sdk
Step 6: Initialize Firebase
In AppDelegate.swift:
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
return true
}
}
Step 7: Verify Installation
Run app and check:
- Xcode console for Firebase initialization
- GA4 DebugView (enable debug mode in Xcode scheme)
- Realtime reports in GA4
Creating an Android Data Stream
Prerequisites
Required:
- Android Studio
- Android app package name
- Firebase project (auto-created if needed)
Setup Process
Step 1: Add Stream
- Admin → Data Streams
- Click "Add Stream"
- Select "Android app"
Step 2: Configure App Details
Package Name:
- Format:
com.company.appname - Must match AndroidManifest.xml package
- Example:
com.acme.myapp
App Name:
- Descriptive name for internal use
- Example: "Acme Mobile App (Android)"
Step 3: Register App
Click "Register app"
Result:
- Firebase project created (if didn't exist)
- Data stream created
- Measurement ID assigned
Android Firebase Configuration
Step 4: Download Config File
- Download
google-services.json - Place in
app/directory - Ensure file in version control
Step 5: Add Firebase SDK
Project-level build.gradle:
buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.3.15'
}
}
App-level build.gradle:
plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}
dependencies {
implementation platform('com.google.firebase:firebase-bom:32.0.0')
implementation 'com.google.firebase:firebase-analytics'
}
Step 6: Initialize Firebase
Firebase initializes automatically when app starts (no code needed)
Step 7: Verify Installation
Run app and check:
- Logcat for Firebase initialization
- GA4 DebugView (debug mode enabled via ADB)
- Realtime reports in GA4
Data Stream Management
Viewing All Data Streams
Navigate: Admin → Data Streams
List Shows:
- Stream name
- Platform type (Web, iOS, Android)
- Stream ID
- Status (Active/Inactive)
Editing Data Stream
Click stream name to access settings:
- Modify stream name
- Update website URL (web only)
- Configure Enhanced Measurement (web only)
- Manage cross-domain tracking
- Create API secrets
- View tagging instructions
Deleting Data Stream
Warning: Cannot be undone; historical data retained but no new data collected
Steps:
- Click stream name
- Top-right: More (three dots) → Remove this stream
- Confirm deletion
Use Cases for Deletion:
- Decommissioned website/app
- Test stream no longer needed
- Consolidating tracking
Multiple Data Streams Strategy
When to Use Multiple Streams
Same Property, Multiple Streams:
- Main website + mobile site
- Main website + blog subdomain
- iOS app + Android app
- Different platforms for same business
Benefits:
- Combined reporting
- Shared custom definitions
- Unified conversion tracking
- Cross-platform user journeys
Stream Naming Best Practices
Use clear, descriptive names:
Good Examples:
- "Main Website (example.com)"
- "iOS App (Production)"
- "Android App (Production)"
- "Mobile Site (m.example.com)"
Bad Examples:
- "Website 1"
- "Stream"
- "Test"
Measurement ID Reference
Format & Location
Format: G-XXXXXXXXXX
- G- prefix (identifies GA4)
- 10 alphanumeric characters
- Case-sensitive
Where to Find:
- Admin → Data Streams
- Click stream name
- Top-right: Measurement ID displayed
- Click copy icon to copy
Using Measurement IDs
gtag.js Installation:
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
GTM Configuration:
- Tag Type: Google Tag
- Tag ID: G-XXXXXXXXXX
Measurement Protocol:
- Query parameter:
measurement_id=G-XXXXXXXXXX
Common Data Stream Issues
Issue: Wrong Platform Type Selected
Problem: Created web stream but need app stream (or vice versa)
Solution:
- Cannot change platform type
- Delete stream and create correct type
- Historical data from deleted stream retained
Issue: Cannot Find Measurement ID
Solution:
- Admin → Data Streams
- Click stream name
- Top section shows Measurement ID
- Use copy icon
Issue: Enhanced Measurement Not Working
Checklist:
- Is Enhanced Measurement toggle ON?
- Which specific event not working?
- Check event-specific toggle
- For file downloads: is file extension in default list?
- For site search: are query parameters standard (q, s, search)?
- For video: is video embedded YouTube with JS API enabled?
Issue: Multiple Measurement IDs
Scenario: Have multiple Measurement IDs, unsure which to use
Solution:
- Check Data Streams list
- Match stream name to your platform
- Use correct ID for correct platform
- Don't mix IDs (don't use web ID for app)
Advanced Configuration
Debug Mode for App Streams
iOS Debug Mode:
- Xcode scheme argument:
-FIRDebugEnabled - Events visible in DebugView
Android Debug Mode:
adb shell setprop debug.firebase.analytics.app com.example.app
Stream ID vs Measurement ID
Stream ID:
- Numeric identifier
- Format: 1234567890
- Used in APIs
- Internal reference
Measurement ID:
- G-XXXXXXXXXX format
- Used in tracking code
- Public-facing identifier
- Implementation key
Next Steps
After configuring data streams:
- Install Tracking Code (see installation-methods.md)
- Verify Installation (see verification-checklist.md)
- Configure Internal Traffic Filters
- Set Up Cross-Domain Tracking (if needed)
- Create Custom Events
Additional Resources
- Official Google: Web Stream Setup
- Official Google: iOS Stream Setup
- Official Google: Android Stream Setup
- Official Google: Enhanced Measurement Events
- Firebase Documentation: iOS SDK
- Firebase Documentation: Android SDK