GA4 property and data stream setup best practices

Google’s own guide on how to structure GA4 properties can be a great resource, but only if you have a large and complex set up – which isn’t very helpful for the majority of people and companies that will be going through this process:

screen shot from GA4's help centre stating that they can only help for large businesses and complex setups

The things we have to define when setting up and configuring GA4 are:

  • Properties – the place that all the data flows into, all reporting will be done at this level by default
  • Data Streams – the source from where you are collecting data (iOS app, Android app or website)

An analogy to put this into context is a lake (property) that is being filled up by some waterfalls (data streams). All data goes into the one set of reports, but can be fed from many difference sources.

An image of a lake with three waterfalls - the waterfalls have labels of 'iOS', 'Android' and 'Web', and the lake is labelled as 'Reports'

We have outlines some scenarios below, but there are a few things to consider when planning out your property and data stream setup:

  1. How many websites, domains, subdomains you are tracking
  2. If you have staging/UAT/dev environments for your apps and/or websites
  3. Location of your teams and how your linked ad accounts (i.e. Google Ads) are structured
  4. If you have GA360, or are planning to get it


Firstly, the best advice we can give is to only have one web data stream if you can – especially if your website users navigate between them in a single browsing session. That is because sessions are unique to each data stream. I.e. if someone lands on data stream 1, then browses to data stream 2, this would log a new session_start event and thus increase the number of sessions, have a unique landing page, affect the average pages per session metric, and more.

If you have multiple subdomains, you can track them all within one data stream very easily, and with no additional setup required. If you have multiple (root) domains tracking in the same data stream, then you will need to configure cross-domain tracking which can be done from within the GA4 UI.

If you have completely separate websites (regardless of domain), then you could use multiple web data streams if you need to. For example, if you had a corporate/B2B website and a main/B2C website, then you could set up two data streams. The decision to set up a separate data stream within the same property, or to set up a brand new property will have to be made. I’d consider if having all the data together in all reports by default would be a benefit, or hindrance. You can always filter out what you don’t need in the reports, but that could be forgotten, or easily missed.

Testing environments

It’s good practice to have a pre-release version of your apps and websites to be able to test functionality as well as the analytics implementation on. The best practice is to have a duplicate property in place for the UAT/staging/development environments wherever possible.

For websites this can be easily achieved by using Google Tag Manager (GTM) to swap out the Measurement ID for these sites. You could use a completely separate GTM container for these environments, but that is often too much admin to maintain two completely identical containers – but it’s possible!

The main thing to consider here is that when linking your app analytics to GA4 via Firebase, it’s a one-to-one relationship for Firebase projects to GA4 properties. So make sure that your staging/dev/UAT/test apps are in a separate project if possible. It’s hard to change this once set up, so try to consider this up front if you can.

Location and connected GMP accounts

The time zone and currency settings in GA4 are at the property-level. That is, all data is converted into a single time zone and a single currency – no matter where the user that visits your website/app is in the world, or what currency they spend.

If everyone that will do the reporting and analysis is based in the UK, and the business reports globally in GBP £, then setting the property to a UK-based time zone and GBP would make sense. If that’s not the case and each region requires their own version of the data, then you have two choices:

  1. Upgrade to GA360 – to utilise subproperties or roll-up properties
  2. Use a separate property for each region

The same situation arises when linking Google Ads, DV360, CM360 and SA360 to GA4. All conversions and audience in GA4 will be shared with all of the connected ad accounts. But what if you end up needing more than the limited number of conversions and/or audiences? Or what if you need to optimise a specific ad account or campaign to a specific regions conversions?

If you have the ‘purchase’ event set up, but that’s tracking purchases from your Spanish, French and German websites, then optimising your Spanish Google Ads account to the total purchases might not be ideal (or a good idea at all).

The same two choices are then raised:

  1. Upgrade to GA360 to utilise subproperties (and share only the subproperty conversions, etc. with the ad accounts)
  2. Use a separate property for each region (and only connect the specific region’s ad accounts)

GA360 considerations

As already mentioned, upgrading to GA4’s version of GA360 is an option that some may need to consider. It’s not cheap, so not something to rush into if you’ve never paid for GA in the past. (speak to us if you want to know more, we can help figure out if you truly need to, or if there’s an alternative to paying for GA360!)

The key features of GA360 that could help when structuring your GA4 setup are:

  1. Subproperties – basically GA4’s answer to Universal Analytics’ views
  2. Roll-up properties – if you started with regional properties, this can roll them into a single set of reports (or multi-regional such as EMEA, APAC, etc.) for easier reporting

If you are on GA360 (or plan to be) before setting anything up, then you’re in a good position to build subproperties and roll-up properties into your planning. If you upgrade at a later point, it can be a benefit for sure, but might mean re-tooling the setup somewhat to make it better in the long term.
Whatever way you decide to go, remember that the raw data can be exported to BigQuery for free (well, free-ish as you just pay for storage and processing, not the actual export itself from GA4). That means you can slice and dice the data however you want, in any way you want using SQL. And hey, this is another way we could help – get in touch if you are interested in learning more!


All of the belwo scenarios assumes use of the free version of GA4, and are looking at websites only. For anything more complex, get in touch to arrange a chat with one of our analytics consultants to discuss how you could structure yours.

1 website with 1 root domain

1 property and 1 web data stream.

1 website with 1 root domain but mulitple regional paths (i.e. /uk, /fr, etc.)

1 property and 1 web data stream or >1 property with 1 web data stream each (per region).

1 website with >1 root domain

1 property and 1 web data stream (with cross-domain tracking enabled) or >1 property with 1 web data stream each (per domain).

Written by

Daniel is the innovation and training lead at Measurelab - he is an analytics trainer, co-host of The Measure Pod analytics podcast, and overall fanatic. He loves getting stuck into all things GA4, and most recently with exploring app analytics via Firebase by building his own Android apps.

Subscribe to our newsletter: