TL;DR, Quick Answer
8 min readGA4 user properties are attributes of the user, such as a plan tier or a preferred language, that GA4 applies to every later event from that user. You set them with gtag('set', 'user_properties', {...}), in the User Properties section of a GA4 Event tag in Tag Manager, or through the Firebase SDK, then register each one as a user-scoped custom dimension to report on it. A standard property allows 25 user properties and a 360 property 100. Names stop at 24 characters, values at 36, and Google's policy bans personally identifiable information in them.
What are GA4 user properties?
Google Analytics 4 uses GA4 user properties to describe the person behind the events, such as a plan tier, a preferred language or a role, and it applies each value to every later event from that user. Google's help page defines them as "attributes that describe groups of your user base," with language preferences and geographic locations as its examples. Use them for facts that hold across many events, and keep per-action details in event parameters.
A user property only shows up in reports after you register it as a user-scoped custom dimension. Google says it plainly: "To report on the data you collect through user properties, create user-scoped custom dimensions." Its help page on custom dimensions adds that "User properties become aliases for user-scoped custom dimension slots," so you work with meaningful names like customer_tier instead of numbered slots.
GA4 also fills a set of user dimensions on its own, such as Country, Language and Device category. Those predefined dimensions cover the common cases. Custom user properties are for facts only your site knows, such as whether a visitor is on a free or paid plan.
How do user properties differ from event parameters?
User properties describe the user and carry forward to future events, while event parameters describe one event and stop there. Google's custom dimensions page draws the line in two sentences: event parameters "provide more details about these actions, like which link was clicked," and "User properties tell you more about the users themselves."
| Point | User property | Event parameter |
|---|---|---|
| Describes | The user | One action |
| Applies to | That event and all later events from the user | Only the event that sent it |
| Custom dimension scope | User | Event |
| Count limit, standard property | 25 user properties | 25 parameters per event |
| Name length | 24 characters | 40 characters |
| Value length | 36 characters | 100 characters |
| Example | customer_tier = pro | link_type = outbound |
The 36-character value limit means short category labels, not free text. If you are still planning which data deserves a slot, start with the decisions it should inform, as the guide to custom analytics implementation lays out.
How do you set user properties with gtag?
You set user properties with the Google tag by calling the set command with a user_properties object, which applies the values to every event on the page. Google's help page gives this example:
gtag('set', 'user_properties', {
favorite_composer: 'Mahler',
favorite_instrument: 'double bass',
season_ticketholder: 'true'
});To scope the values to one data stream, Google shows the same object inside a config command instead: gtag('config', 'STREAM_ID', { 'user_properties': { ... } }). Run the call as soon as your page knows the value, such as right after login.
Google's help page lists two other ways to set them:
- Google Tag Manager. On a Google Analytics 4 Event tag, "add a row in the User Properties section for each parameter you want to include."
- Firebase for mobile apps. After installing the Google Analytics for Firebase SDK, follow Firebase's "Set user properties" documentation.
Server code can send user properties through the Measurement Protocol in a user_properties object, where each property holds a value field. Google's developer guide notes you can send user properties without any events, and that "Google Analytics uses the most recent value of a user property for each user."

How do you report on a GA4 user property?
You report on a GA4 user property by creating a user-scoped custom dimension in Admin under Data display, Custom definitions, with the Editor role or above on the property. Google's procedure:
- In Admin, under Data display, click Custom definitions.
- Open the Custom dimensions tab and click Create custom dimensions.
- Enter a dimension name. Hyphens are not allowed, but underscores and spaces are.
- Set Scope to User. Google says the scope can't be changed after saving.
- Enter the user property name exactly as your code sends it. This field is also fixed once saved.
- Click Save.
Google's pages disagree on the order. The page on collecting user data says to create the dimension "Before you set user properties," while the page on creating the dimension says to add the property to your code first and confirm it in the "Users by User property" card of the Realtime report. Google says the dimension reaches reports after 24 to 48 hours, so register it on the day the property ships. Once it exists, you can use it in comparisons, filters, explorations and audience conditions.
What limits apply to GA4 user properties?
A standard GA4 property accepts 25 user properties and a Google Analytics 360 property accepts 100, with names up to 24 characters and values up to 36 characters. Google's collection limits page states that Analytics "doesn't process the 26th user property" on a standard property.
| Limit | Standard property | 360 property |
|---|---|---|
| User properties per property | 25 | 100 |
| User-scoped custom dimensions | 25 | 100 |
| User property name length | 24 characters | Not listed on the 360 limits page |
| User property value length | 36 characters | Not listed on the 360 limits page |
Names follow three more rules from Google's developer guide and help pages:
- Reserved names.
first_open_time,first_visit_time,last_deep_link_referrer,user_idandfirst_open_after_installcan't be used. - Reserved prefixes. Names can't start with
google_,ga_orfirebase_. - Case sensitivity. Google warns that "setting two user properties whose names differ only in case results in two distinct user properties being logged."
A fourth trap sits in the custom dimension. Google says "any value in a custom dimension that resembles a number will be treated as a number, even if it was originally formatted as text." A tier code like 94E40 turns into scientific notation, so prefix codes with a letter.
Flowsery
Start Your 14-Day Free Trial
Real-time dashboard
Goal tracking
Cookie-free tracking
Which user properties does GA4 collect automatically?
GA4 collects a set of predefined user dimensions automatically, and Google says that with gtag.js or the SDK "you don't need to write additional code to collect" them. On websites these include Age, Gender, Interests, Language, Country, Region, City, Browser, Device category, Device brand, Operating system and Platform. App streams add App store, App version, Device model and New/Established.
Don't spend one of your 25 slots copying these. Google's page on user-scoped custom dimensions says: "Don't create a custom user property if a predefined user dimension already exists."
Age, Gender and Interests come with a catch. Google says you "must meet the Analytics data thresholds to see demographic and interest data," and Google withholds those rows when a group is small enough to identify people. The page on GA4 data thresholding explains when that happens and what reduces it.
When does a GA4 user property start applying?
A GA4 user property applies from the moment it is set to all future events for that user, including later sessions, and never to earlier events. Google's wording: "The user property will not apply to events that happened before the user property was set."
If a visitor reads five pages and only then receives customer_tier at signup, those five pageviews carry no tier. Set the property on every page load for a signed-in user.
GA4 also deduplicates. Google says Analytics collects a user property when it is "set for the first time on a page" or when its value changes, so repeating the same set call on one page does not send extra data.

Can GA4 user properties contain personal data?
GA4 user properties must not contain personally identifiable information, because Google's policy forbids sending any. Google's help page states that its "policies mandate that no data be passed to Google that Google could use or recognize as personally identifiable information (PII)," and names "email addresses, personal mobile numbers, and social security numbers" as examples. Its list of features that need special care includes "All custom dimensions," which covers every registered user property.
Keep values to categories like pro, trial or admin. For a stable account identifier, Google points to the User-ID feature instead of a user property, and its custom dimensions page warns against "a custom dimension for a unique ID per user." Even an ID that names no one can still count as personal data under privacy law, as the guide to analytics identifiers and personal data explains.
How does Flowsery attach details to a signed-in user?
Flowsery attaches details to a signed-in user with one identify() call, which its SDK docs describe as a way to "Identify the current visitor with user details." The documented example passes a user ID, email and name: flowsery.identify({ userId: 'user_123', email: 'user@example.com', name: 'John Doe' }). Flowsery's visitor API then returns that user's ID, name and email in a profile field, which is null for anonymous visitors. Anonymous traffic works differently. With the "Cookieless" option, Flowsery runs with a daily-rotating visitor hash and stores no personal data, so it does not link an anonymous visitor across days or devices. Custom events accept optional metadata: the script tag records one with window.flowsery("signup") and the npm SDK with flowsery.trackEvent('signup'), as part of Flowsery's goal and event tracking. Events appear in Flowsery's real-time event feed as they fire, with no registration step in between.
Frequently asked questions
What is the difference between a user property and a user-scoped custom dimension?
A user property is the value your code sends, such as customer_tier. A user-scoped custom dimension is the registration in GA4 Admin that makes that property visible in reports. You need both, and Google says the dimension reaches reports 24 to 48 hours after you create it.
How many user properties can a GA4 property have?
A standard property can have 25 user properties and a Google Analytics 360 property can have 100. Analytics doesn't process the 26th user property on a standard property. User-scoped custom dimensions follow the same 25 and 100 caps.
Do GA4 user properties apply to past events?
No. Google says a user property applies to all future events for that user, including later sessions, but "will not apply to events that happened before the user property was set." Set the property as early as you know the value.
How do I change a GA4 user property?
Send the property again with the new value. Google's developer guide says Analytics "uses the most recent value of a user property for each user," and GA4 collects the property again whenever its value changes. Earlier events keep the value they had when they were sent.
Can I use user_id as a user property name?
No. user_id is one of five reserved names, along with first_open_time, first_visit_time, last_deep_link_referrer and first_open_after_install. Names also can't start with google_, ga_ or firebase_. Use the User-ID feature for account IDs.
Flowsery
Start Your 14-Day Free Trial
Real-time dashboard
Goal tracking
Cookie-free tracking
Where can I check that a user property is arriving?
Open the Realtime report and look at the "Users by User property" card. Google says the card "shows the number of people who are grouped into each user property." Confirm the property there before you build reports on it.
Can I set GA4 user properties in Google Tag Manager?
Yes. On a Google Analytics 4 Event tag, add a row in the User Properties section for each property you want to send. Register each one as a user-scoped custom dimension afterwards, or it will not show up in reports.
Why is my GA4 user property missing from reports?
A user property stays out of reports until its custom dimension exists and has finished processing. Google says the dimension reaches reports 24 to 48 hours after you create it. Check that the scope is User and that the property name matches what your code sends exactly, since both are fixed once saved.
Can a GA4 user property hold an email address?
No. Google's policy forbids sending any data it could recognize as personally identifiable information, and email addresses are named as an example. Keep values to short categories like pro, trial or admin.
Should I create a user property for Country or Language?
Don't. GA4 already collects predefined user dimensions such as Country, Language and Device category, and Google says not to create a custom one if a predefined user dimension already covers the data. Save your 25 slots for facts only your site knows.
Was This Article Helpful?
Let us know what you think!
See us more often in Google
One click marks Flowsery as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.
Before you go...
Flowsery
Revenue-first analytics for your website
Track every visitor, source, and conversion in real time. Simple, powerful, and cookie-free.
Real-time dashboard
Goal tracking
Cookie-free tracking
Related Glossary Terms


What GA4 Custom Dimensions Do, and the Quotas That Cap Them
Registering GA4 custom dimensions turns your event parameters into report fields. See the three scopes, the 50, 25 and 10 quotas and the cardinality trap.


Why Your GA4 Bounce Rate Is Just Engagement Rate Flipped
Your GA4 bounce rate is the share of sessions that were not engaged. How Google defines it, how it differs from Universal Analytics, and where to add it.


What the GA4 Landing Page Report Counts and Where It Goes Blank
Google's GA4 landing page report lists the first page of every session. Where to find it, its default metrics, why (not set) rows appear and how to add source.


How GA4 Site Search Tracking Records What Visitors Type
Set up GA4 site search with enhanced measurement, add your own query parameters, find the Search term dimension and track searches without a URL.


How to Link Search Console to GA4 and Publish Its Reports
Learn how to link Search Console to GA4 in Admin, which roles you need, how to publish the two reports in Library and what the data can't join.


How to Build GA4 Calculated Metrics Inside a Five-Slot Quota
Google caps GA4 calculated metrics at 5 per standard property. Learn the formula syntax, the units, where they appear and what a formula can't use.
Related Articles


Setting Up GA4 Content Grouping With One Parameter
Set up GA4 content grouping with the content_group parameter in gtag or Tag Manager, read the Content group dimension and keep (not set) rows out.


How to Add Google Analytics Annotations in GA4 and Keep a Change Log
In GA4, Google Analytics annotations pin a dated note to line graphs. Who can add them, the 60 and 150 character limits, the 1,000 cap, and change log use.


How a Google Analytics Opt Out Works, and What Each Method Blocks
A Google Analytics opt out can be a browser add-on, a ga-disable window flag or denied consent. What each one blocks, who controls it, and where it stops.

