
Setting Up Data Streams in Google Analytics 4
A GA4 property represents your business. A data stream represents the actual source that business's data comes from — a specific website, iOS app, or Android app. This distinction, new to GA4, is exactly what lets one property unify web and app data for the same business into a single, blended set of reports, something Universal Analytics could never do cleanly.
Understanding the Property-to-Stream Relationship
One property can contain multiple data streams simultaneously — for example, a company with both a marketing website and a mobile app can track both under one GA4 property, with two data streams feeding into shared user and event reporting. This is useful when the same business genuinely wants a unified view of a user's behavior across web and app; it's less useful (and can create reporting confusion) if you're tracking genuinely unrelated properties that happen to share an organization, in which case separate GA4 properties are usually the better structural choice.
Creating a Web Data Stream
- In GA4, go to Admin → Data Streams.
- Click Add stream → Web.
- Enter your website's URL and a stream name (something recognizable, like "Main Website" or "Marketing Blog" if you run a separate subdomain).
- Configure Enhanced measurement — leave it enabled unless you have a specific reason to disable one of its automatic tracking features.
- Click Create stream.
You'll immediately be shown a Measurement ID (G-XXXXXXX) and setup instructions for installing the tag, either directly via gtag.js or through Google Tag Manager.
Creating an iOS or Android App Data Stream
- Click Add stream → iOS app (or Android app).
- Enter your app's bundle ID (iOS) or package name (Android).
- GA4 walks you through downloading a configuration file (
GoogleService-Info.plistfor iOS,google-services.jsonfor Android) needed to connect your app via the Firebase SDK, since app data streams are powered by Firebase Analytics under the hood. - Follow the Firebase SDK integration steps for your specific app platform.
App data streams require your development team to integrate the Firebase SDK into the actual app codebase — unlike web streams, there's no simple copy-paste snippet, since it involves native app configuration.
Configuring Stream-Specific Settings
Each data stream has its own configuration, independent of others under the same property:
- Enhanced measurement (web streams only) — toggle which automatic events (scroll, outbound clicks, site search, video, file downloads, forms) are active for this specific stream.
- Google tag settings — configure cross-domain tracking, internal traffic definitions, and unwanted referrals specific to this stream.
- Measurement Protocol API secrets — generate secrets scoped to this specific stream, used for server-side event sending via the Measurement Protocol.
Configuring Cross-Domain Tracking (Multiple Web Streams)
If your business spans multiple domains that should be treated as one continuous user journey (e.g., a marketing site on one domain and a checkout flow on another), configure cross-domain measurement so a session isn't artificially split when a user moves between them:
- Go to Admin → Data Streams → [your stream] → Configure tag settings.
- Click Configure your domains.
- Add each domain that should be treated as part of the same continuous session.
Without this, GA4 treats navigation between the two domains as a new session with a new referrer, incorrectly attributing the second domain's activity as if it arrived via "Referral" from the first, rather than recognizing it as a continuation of the same visit.
Understanding Stream IDs vs. Measurement IDs
Each data stream has both a Stream ID (an internal GA4 identifier) and, for web streams specifically, a Measurement ID (G-XXXXXXX, used in your tracking tag). It's the Measurement ID you'll reference when installing tracking code or configuring GTM — the Stream ID is mostly relevant for certain API and BigQuery export contexts, where distinguishing between multiple streams under one property matters for identifying which platform a given row of data came from.
Common Data Stream Mistakes
- Creating a new property instead of a new stream when adding a second website or app that logically belongs with an existing business — this fragments reporting unnecessarily across separate properties, when a second stream under the same property would have unified them.
- Forgetting cross-domain configuration for a business genuinely spanning multiple domains, leading to inflated session counts and incorrect "Referral" attribution between what should be one continuous journey.
- Not configuring Enhanced Measurement per stream, assuming a setting configured for one web stream automatically applies to another — each stream's Enhanced Measurement configuration is independent and needs to be reviewed separately.
- Losing track of which Measurement ID belongs to which stream on a property with several — clear, descriptive stream naming from the start avoids this confusion later.
When to Use Separate Properties Instead of Separate Streams
Separate GA4 properties (rather than multiple streams under one property) make more sense when:
- The businesses are genuinely unrelated, with no value in unified cross-business reporting.
- Different teams need fully separate access control without any shared visibility.
- Data retention, currency, or time zone requirements genuinely differ between the two.
If none of these apply and the properties represent facets of the same business (a website and its companion app, for example), a single property with multiple streams is almost always the better structural choice, since it enables unified user-level reporting across both.
Verifying a New Stream Is Working
For a newly created web stream:
- Install the tag (via gtag.js snippet or GTM).
- Visit the site and check Reports → Realtime, filtered to the specific stream if you have multiple, to confirm data is arriving.
- Check Admin → DebugView to confirm event parameters look correct.
For a newly created app stream, use Firebase's own DebugView (accessible via the Firebase console, linked to the same underlying event data) to verify the SDK integration is sending events correctly before considering the setup complete.
FAQ about Setting Up Data Streams in Google Analytics 4

Can one GA4 property have both web and app data streams?
Yes — this is exactly the structure GA4 is designed to support, unifying web and app reporting for the same business under one property.
Do I need Firebase to set up an app data stream?
Yes — app data streams in GA4 are powered by the Firebase SDK, so integrating Firebase into your app's codebase is a required step, unlike the simpler web tag installation.
What happens if I create a new property instead of a new data stream by mistake?
Data will still be collected, but it won't be unified with your existing property's reporting — you'd need to migrate data streams between properties (a more involved process) to consolidate them after the fact.
Is cross-domain tracking automatic, or does it require configuration?
It requires explicit configuration under your web stream's tag settings — without it, navigation between domains is treated as separate sessions with incorrect referral attribution.
Can I rename a data stream after creating it?
Yes — the stream name is just a display label and can be changed at any time without affecting the underlying Measurement ID or collected data.
How many data streams can a single GA4 property have?
There's no small, restrictive limit for typical use — most businesses need only a handful (one web stream, possibly one iOS and one Android stream), though the platform supports more if genuinely needed.
Conclusion
Data streams are the piece of Google Analytics 4's structure that makes unified web-and-app reporting possible, and getting the property-versus-stream decision right from the start avoids fragmenting your data unnecessarily later. Configure Enhanced Measurement and cross-domain settings deliberately for each stream, and verify each one independently before trusting your website's combined reporting.


