Follow me on LinkedIn - AI, GA4, BigQuery

Understanding GA4 user properties is a game changer for anyone looking to understand their audience really well.

GA4 user properties let you define custom attributes, such as user preferences, subscription tiers, or engagement levels, to gain deeper insights into user behaviour.


Imagine segmenting audiences not just by clicks but by who they are and what drives them. This capability can transform your analytics from surface-level data into powerful, personalized insights.

Learn to create and use the GA4 user properties through this step by step guide.

What are GA4 User properties?

GA4 User properties are attributes used to describe segments of your user base. They help you segment and analyse user data. 

These user attributes include language preference, geographic location, age, gender, membership level, etc. 

By default, Google Analytics 4 automatically logs a few user properties like the ones below:

User dimension

Type

Description

Age

Text

Identifies users by six categories: 18-24, 25-34, 35-44, 45-54, 55-64, and 65+.

Country

Text

The country the user resides in.

Device Category

Text

The category of the mobile device (e.g. mobile or tablet).

Device Model

Text

The mobile device model name (e.g. iPhone 5s or SM-J500M).

Gender

Text

Identifies users as either male or female.

Interests

Text

Lists the interests of the user (e.g. “Arts & Entertainment, Games, Sports”).

Language

Text

The language setting of the device OS (e.g. en-us or pt-br).

What’s the difference between user attributes, user properties and user-scoped custom dimensions?

User attributes are the attributes of your website users.

We typically capture those user attributes that GA4 does not automatically track with the help of hard-coded data layers on the website.

We then pull the data from data layers via the GTM data layer variables.


Once you have mapped the data layer variables to their corresponding user attributes in GTM, the user attributes become user properties.

We send the user attribute data to GA4 via user properties.

You can create a user-scoped custom dimension by registering an event parameter with the ‘user’ scope in the GA4 user interface.

This parameter can be an automatically tracked parameter or a custom parameter.

Here, the custom parameter is the user property.


In other words, the user properties that you register in your GA4 property via the user scope custom dimensions are user-scoped custom dimensions.

user scoped custom dimensions 1
User-scope means the value of the custom dimension is calculated and sent once for each user. 

When to create a User Property?

Google recommends creating a user property when you want to identify static or slowly changing attributes of your website/app users, such as changes in subscription plan, membership level, or game difficulty.

If a built-in user-scoped dimension does not capture any specific users’ details relevant to your business or tracking goals, create its corresponding user property and then register it as a user-scoped custom dimension in GA4.


Following is an example to illustrate my point:

You run a publishing website and want to track a user’s “subscription status” (free, paid) across their interactions.

A built-in user-scoped dimension might not capture this specific detail.


You can create a “Subscription Status” custom user-scoped dimension to capture this specific detail.

By creating and populating the “Subscription Status” custom user-scoped dimension, you can now:

  • Segment users based on their subscription status (free users vs. paid users).
  • Analyze how subscription status affects user engagement with your platform content.
  • Identify trends in user subscription behavior (e.g., free users upgrading to paid).

How to create a user property in GA4?

Follow the steps below to create a user property in GA4:

#1 Decide the user attributes you want to track. 

#2 Check whether the user attributes you want to track are already being tracked in your GA4 property. Confirming this avoids redundant work.


#3 If the user attributes you want to track are not already being tracked in your GA4 property, then ask your developer to push the required user attributes you want to track into a data layer hardcoded on your website.

#4 Pull the user attributes from the data layer via one or more data layer variables in GTM.


#5 Create an event settings variable in GTM and map each data layer variable to its corresponding user attribute. Once you have mapped the data layer variables to their corresponding user attributes in GTM, the user attributes become user properties.

#6 Add the event settings variable to your GA4 configuration tag (aka Google Tag) and all the GA4 event tags.


#7 If you need different user properties on specific events, edit the GA4 event tags as needed and create separate Event Settings variables with the required properties, or directly add user properties to individual GA4 event tags.

#8 Preview the GTM container to ensure that the data layer variables, Google Tag and GA4 event tags contain the desired user properties.


#9 Navigate to the debug view report in your GA4 property to confirm that the user property is being logged/recorded.

#10 If everything looks good, publish your GTM container.


#11 After 24 hrs have elapsed, navigate to your GA4 property and register the logged user property as a new user-scoped custom dimension. This action is required so that you can use the logged user property in GA4 reports. 

#12 Use the user-scoped custom dimension in the exploration report or user explorer report. You can also use the user-scoped custom dimension to create or edit audiences or comparisons. 

Example of creating a user property in GA4.

Let’s say you want to track a user property called “Subscription Status” to identify whether users are “Free” or “Paid” subscribers.


#1 Decide the user attributes you want to track.

We decided to track “Subscription Status” as our user attribute. This attribute will indicate if a user has a “Free” or “Paid” subscription.


#2 Check whether the user attributes you want to track are already being tracked in your GA4 property.

Navigate to your GA4 property and check if “Subscription Status” is already available as a user property. If it isn’t, continue to the next step.


#3 If the user attributes are not tracked, ask your developer to push the required user attributes into a data layer hardcoded on your website.

Ask your developer to add “subscription_status” to the data layer on the website, setting its value to “Free” or “Paid” based on the user’s current subscription level. 


Here’s an example of what the developer might add:

window.dataLayer = window.dataLayer || [];

window.dataLayer.push({

  'event': 'subscriptionStatusUpdate',

  'subscription_status': 'Paid'

});

Including an event name (‘subscriptionStatusUpdate’) ensures that GTM can easily listen for this specific event if needed.


#4 Pull the user attributes from the data layer via one or more data layer variables in GTM.

In GTM, create a Data Layer Variable:

  1. Navigate to Variables > New > Variable Configuration.
  2. Select Data Layer Variable.
  3. Name it “DLV – Subscription Status” and set the Data Layer Variable Name to “subscription_status“.
DLV – Subscription Status

#5 Create an Event Settings Variable in GTM and map each data layer variable to its corresponding user attribute.

  1. Navigate to Variables > New > Variable Configuration > Google Tag: Event Settings.
  2. In the ‘Google Analytics User Properties’ section, add a user property with the name “subscription_status“.
  3. Map it to the ‘DLV – Subscription Status’ variable created in step 4.
  4. Save this as an Event Settings Variable (e.g., “ESV – User Properties“).
ESV User Properties

#6 Add the Event Settings Variable to your Google Tag and all GA4 event tags.

  1. Navigate to your Google Tag in GTM and select the newly created Event Settings Variable in the Event Settings section.
  2. Also, add the Event Settings Variable to any specific GA4 event tags you have so that the “subscription_status” property is included with all events.
Add the Event Settings Variable to your Google Tag
Add the Event Settings Variable to all GA4 event tags

#7 Only if you need different user properties on specific events, edit the GA4 event tags as needed and directly add the user properties.


#8 Preview the GTM container to ensure that the data layer variables, Google Tag, and GA4 event tags contain the desired user properties.

  1. Use Preview Mode in GTM to verify the setup.
  2. Open the Debug Console in the browser.
  3. Check that the data layer correctly populates “subscription_status”.
  4. Check the value of the ‘Event settings’ variable in the Google tag on the initialization event.
  5. Check the value of the ‘Event settings’ variable in one or more GA4 event tags.

Check that the data layer correctly populates “subscription_status”.

subscription status update

Check the value of the ‘Event settings variable in the Google tag on the initialization event.

Check the value of the ‘Event settings variable

Check the value of the ‘Event settings’ variable in one or more GA4 event tags.

Check the value of the ‘Event settings variable in one or more GA4 event tags

#9 Navigate to the DebugView report in your GA4 property to confirm that the user property is being logged/recorded.

  1. In GA4, navigate to ‘Data Display’ > ‘DebugView’.
  2. Confirm that the “Subscription Status” user property is appearing with each relevant event.
Confirm that the Subscription Status user property is appearing with each relevant event
button click event

#10 If everything looks good, publish your GTM container.


#11 After 24 hrs, register the logged user property as a new user-scoped custom dimension in your GA4 property.

  1. Navigate to Data Display > Custom Definitions > Create Custom Dimension.
  2. Set the dimension name to “Subscription Status,” Scope to “User,” and select User Property as “subscription_status“.
  3. Save it. This custom dimension should be available in GA4 reports within 24 hours.
register the logged user property as a new user scoped custom dimension in your GA4 property

#12 Use the user-scoped custom dimension in GA4 reports.

You can now use the ‘user-scoped’ custom dimension in Explorations and User Explorer reports or use it to create or edit audiences and comparisons based on subscription status.

Caveat: Logged event parameters should supply the value of a user scope custom dimension.

Before you create a user-scoped custom dimension, you would need a logged event parameter in your GA4 property, and this parameter must have user scope. 

In other words, you cannot create a user-scoped custom dimension by registering a parameter with event scope

For example, the ‘page_title’ parameter has an event scope, so you cannot register this parameter as a user-scoped custom dimension.


You can only register parameters as user-scoped custom dimensions if they have user scope. 

You can also create a user-scoped custom dimension before logging the event parameter, but that is not the best practice for creating user-scoped custom dimensions.


When you create a custom dimension without an existing logged event parameter, the dimension won’t have anything to populate it with. This can lead to a high number of  “(not set)” values in your reports, making it difficult to understand user behaviour or trends.

Where can I find data for user-scoped custom dimensions in GA4?

You can find data for user-scoped custom dimensions in GA4 in the following places:

#1 Exploration reports – When you create a new exploration report or edit an existing report, you can add the user-scoped custom dimension to your report:

you can add the user scoped custom dimension to your report

#2 User Explore report – User scoped dimensions are available in this report by default. You can find them under ‘user properties’:

  1. Navigate to the user explore report in your GA4 property.
  2. Click on an ‘Effective User ID’ listed on the reporting canvas.
  3. A new tab will automatically open. Click on a listed event to see the user property. 
effective user id
effective user id 2
effective user id 3

#3 You can add a user-scoped custom dimension as a secondary dimension to any standard GA4 report containing a data table:

user scoped custom dimension as a secondary dimension to any standard GA4 report

#4 You can use user-scoped custom dimensions to create comparisons:

create comparisons

#5 You can use user-scoped custom dimensions to create custom audiences:

create custom audiences

Note: Unlike event-scoped custom dimensions, user-scoped dimensions won’t appear as individual data cards within event reports. This is because they are not directly tied to a single event but rather the user itself.

The true value of user-scoped custom dimensions lies in segmenting and analysing user behaviour over time. 

How to delete a user scoped custom dimension in GA4?

GA4 does not allow you to delete a user scoped custom dimension. But you can archive it.


Since GA4 provides only 25 custom user scoped dimensions, if you exceed the limit or do not want to continue with an existing user scoped dimenion, you can archive any of the current dimensions that are no longer needed or less important.

Follow the steps below to archive a user scoped custom dimension:

Step-1: Navigate to the admin section of your GA4 property and then click on ‘Custom Definitions’ under ‘Data Display’:

Navigate to the admin section of your GA4 property

Step-2: Click on the three dots menu next to the user-scoped custom dimension you want to archive:

Click on the three dots menu next to user property

Step-3: Click on the ‘Archive‘ option:

‘Archive‘ option

Step-4: Click on the ‘Archive’ button:

Click on the ‘Archive button

Important points about archiving a user scoped custom dimension.

  1. Archiving stops new data from being collected for that user scoped dimension.
  2. It affects any audiences, explorations, comparisons, or custom reports using the archived dimension.
  3. Historical data is preserved, but no new data is generated.
  4. Archiving a user scoped custom dimension is permanent. It cannot be undone.
  5. The archived user property will no longer be usable throughout GA4 without first re-registering.

Sending Client ID as a User Property to GA4.

Follow the steps below:


Step-1: Login to your Google Tag Manager account and then click on the ‘Templates‘ link:

click on the ‘Templates‘ link

Step-2: Click on the ‘Search Gallery‘ button under the ‘Tag Templates’ section:

Click on the ‘Search Gallery‘ button

Step-3: Click on the magnifying glass to display a search box:

Click on the magnifying glass
import tag template

Step-4: Type ‘GTAG GET API‘ in the search box and then click on the first search result:

Type ‘GTAG GET API‘ in the search

Step-5: Click on the ‘Add to workspace‘ button:

Click on the ‘Add to workspace‘ button

Step-6: Click on the ‘Add‘ button:

Click on the ‘Add‘ button

You should now see the new tag template listed under the ‘Tag Templates‘ section:

see the new tag template listed under the ‘Tag Templates‘ section

Now, we are going to create a new tag based on this tag template.


Step-7: Click on the ‘Tags‘ link and then click on the ‘New‘ button to create a new tag:

click on the ‘New‘ button to create a new tag

Step-8: Name the new tag ‘Gtag get api‘:

Name the new tag ‘Gtag get api‘

Step-9: Click on the ‘choose a tag type’ button:

Click on the ‘choose a tag type button

Step-10: Scroll down and then click on the custom template ‘GTAG GET API‘:

click on the custom template ‘GTAG GET API‘

Step-11: Enter the measurement ID of your GA4 property and then click on the ‘Save‘ button:

Enter the measurement ID of your GA4 property

Step-12: Click on the ‘Save Tag‘ button, as your tag will not have any firing trigger:

Click on the ‘Save Tag‘ button as your tag will not have any firing trigger

Now, we need to edit the GA4 configuration tag (the Google tag we used to install and enable the GA4 tracking) and add the tag ‘Gtag get API‘ in a tag sequence.


Step-13: Find and edit your Google tag and then click on the ‘Advanced Settings‘ link:

Find and edit your Google tag and then click on the ‘Advanced Settings‘ link

Step-14: Click on ‘Tag Sequencing‘:

Click on ‘Tag Sequencing‘ 1
‘Tag Sequencing‘

Step-15: Click on the checkbox ‘Fire a tag after Google Tag – All Pages fires‘:

Click on the checkbox ‘Fire a tag after Google Tag – All Pages fires‘

Step-16: Click on the ‘Select tag‘ drop-down menu:

Click on the ‘Select tag‘ drop down menu

Step-17: Click on the ‘Gtag get api‘ tag:

Click on the ‘Gtag get api‘ tag

Step-18: Click on the ‘Save‘ button to save your tag:

save your tag

Step-19: Click on the ‘Triggers‘ link and then click on the ‘New‘ button to create a new trigger.

click on the ‘New‘ button to create a new trigger

Step-20: Name the new trigger ‘gtagApiGet‘ and then choose the trigger type to ‘Custom Event‘:

Name the new trigger ‘gtagApiGet‘

Step-21: Type ‘gtagApiGet‘ in the ‘Event Name’ text box and then click on the ‘Save‘ button:

Type ‘gtagApiGet‘ in the ‘Event Name text

Step-22: Click on the ‘Variables‘ link and then click on the ‘New‘ button under the ‘User-Defined Variables‘ section:

click on the ‘New‘ button under the ‘User Defined Variables‘ section

Step-23: Name the new variable ‘Return Client ID‘ and then set the variable type to ‘Data Layer Variable‘:

Name the new variable ‘Return Client ID‘

Step-24: Type ‘gtagApiResult.client_id‘ in the ‘Data Layer Variable Name’ text box and then click on the ‘Save‘ button:

Type ‘gtagApiResult.client id‘ in the ‘Data Layer Variable Name text

Step-25: Click on the ‘Tags‘ link and then click on the ‘New‘ button to create a new tag:

Click on the ‘Tags‘ link

Step-26: Name the new tag ‘Send client id to GA4 test property‘ (or whatever best works for you) and then select ‘Google Analytics: GA4 Event‘ as the tag type:

Name the new tag ‘Send client id to GA4 test property‘

Step-27: Enter your measurement ID:

Enter your measurement ID

Step-28: Type ‘get_user_data‘ in the ‘Event Name‘ text box:

Type ‘get user data‘ in the ‘Event Name‘ text

Step-29: Click on the ‘User Properties‘ drop-down menu:

Click on the ‘User Properties‘ drop down menu

Step-30: Click on the ‘Add Row‘ button:

Click on the ‘Add Row‘ button

Step-31: Type ‘client_id_custom‘ in the ‘Property Name‘ text box and ‘{{Return Client ID}}.‘ in the ‘Value‘ text box:

Type ‘client id custom‘ in the ‘Property Name‘ text

Note: Make sure that you add the dot . after the {{Return Client ID}} variable to force GA4 to treat the value of this variable as a string and not a number.


Step-32: Click on the ‘Choose a trigger’ button:

Click on the ‘Choose a trigger button

Step-33: Click on ‘gtagApiGet‘ trigger:

Click on ‘gtagApiGet‘ trigger

Step-34: Click on the ‘Save‘ button to save your new tag:

Click on the ‘Save‘ button to save your new tag

Step-35: Click on the ‘Preview‘ button to preview your GTM container:

Click on the ‘Preview‘ button to preview your GTM container

You should now be automatically redirected to a new tab in your web browser. 


Step-36: Enter your website address and then click on the ‘Connect‘ button:

Enter your website address and then click on the ‘Connect‘ button

You should now be automatically redirected to a new tab in your web browser which shows your website content. 


Step-37: Navigate back to your Tag Assistant window and then click on the ‘Continue‘ button:

Navigate back to your Tag Assistant window

You should now be able to see the ‘gtagApiGet’ event listed in the event list and the tags ‘Send client id to GA4 test property‘ & ‘Gtag get api‘ listed under the ‘Tags fired’ section:

You should now be able to see the ‘gtagApiGet event listed in the event list

Step-38: Navigate to the ‘DebugView‘ report of your GA4 property:

Navigate to the ‘DebugView‘ report of your GA4 property

Step-39: Find and click on the user property named ‘client_id_custom= ……‘:

Find and click on the user property named ‘client id custom 1

Step-40: Find and click on the user property named ‘client_id_custom‘:

Find and click on the user property named ‘client id custom‘

You should now be able to see the captured client ID:

You should now be able to see the captured client ID

Step-41: Navigate back to Google tag assistant window and then close it by clicking on the cross button at the top left-hand side:

close it by clicking on the cross button

Step-42: Click on the ‘Stop debugging’ button:

Click on the ‘Stop debugging button

Step-43: Navigate back to your GTM account and then click on the ‘Submit‘ button to publish your container:

click on the ‘Submit‘ button to publish your container

Step-44: Enter your container version name and then click on the ‘Publish‘ button:

Enter your container version name and then click on the ‘Publish‘ button

That’s how you can create and pass a user scope custom parameter along with an event.

Extracting User Properties data from GA4 BigQuery Data Table.

In the GA4 BigQuery Export table, you can retrieve the name of a user property from the ‘user_properties.key’ field.
Article content

In the GA4 BigQuery Export table, you can retrieve the value of a user property from one of the following fields:
  1. user_properties.value.string_value
  2. user_properties.value.int_value
  3. user_properties.value.float_value
  4. user_properties.value.double_value
  5. user_properties.value.set_timestamp_micros

For more details, check out this article: Extracting GA4 User Properties in BigQuery.
  1. Tracking New, Qualified and Converted Leads in GA4.
  2. Free GA4 training and tutorial with Certification.
  3. Understanding GA4 Ecommerce Reports (Monetization Reports).
  4. GA4 Ecommerce Tracking via GTM: Step-by-Step Setup Guide.
  5. How to see UTM parameters in GA4 (Google Analytics 4).
  6. GA4 UTM parameters not working? Here is how to fix it.
  7. How To Use UTM parameters in GA4 (Campaign Tracking).
  8. How to track AI traffic in GA4.
  9. Understanding Google Analytics 4 cookies – _ga cookie.
  10. GA4 (Google Analytics 4) Measurement Protocol Tutorial.
  11. GA4 Unassigned Traffic: Causes and How to Fix it Fast.
  12. GA4 Regex (Regular Expressions) Tutorial.
  13. GA4 Direct Traffic Spike: Common Causes and How to Fix Them.
  14. gtag.js – Google Tag in Google Analytics 4 and beyond.
  15. GA4 Scopes – User, Session, Event & Item scopes.
  16. GA4 Conversion Tracking (Key Events) Tutorial.
  17. GA4 (not set) - Guide to fixing (not set) issue.
  18. GA4 Certification Exam: Questions, Answers for Skillshop (GAIQ).
  19. GA4 User Properties (User Scoped Custom Dimensions) – Tutorial.
  20. Tracking Organic Traffic in GA4 - Complete Guide.
  21. Tracking Events in GA4 (Google Analytics 4).
  22. GTM Server Side Tagging - Setup Guide.
  23. Using Subfolder for GTM Server Side Tagging (Same Origin Tracking).
  24. Understanding Event Parameters in Google Analytics 4 (GA4).
  25. How to Uninstall GTM Server Side Tagging.