Glossary

Setting GA4 User Properties and Reporting on Them

Taras Shynkarenko
Taras Shynkarenko
•Updated: •8 min read
Setting GA4 User Properties and Reporting on ThemSetting GA4 User Properties and Reporting on Them

TL;DR, Quick Answer

8 min read

GA4 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."

PointUser propertyEvent parameter
DescribesThe userOne action
Applies toThat event and all later events from the userOnly the event that sent it
Custom dimension scopeUserEvent
Count limit, standard property25 user properties25 parameters per event
Name length24 characters40 characters
Value length36 characters100 characters
Examplecustomer_tier = prolink_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:

  1. 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."
  2. 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."

An analyst at a desk reviewing charts on a laptop, picturing the step of registering a user property so it shows up in reports.

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:

  1. In Admin, under Data display, click Custom definitions.
  2. Open the Custom dimensions tab and click Create custom dimensions.
  3. Enter a dimension name. Hyphens are not allowed, but underscores and spaces are.
  4. Set Scope to User. Google says the scope can't be changed after saving.
  5. Enter the user property name exactly as your code sends it. This field is also fixed once saved.
  6. 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.

From code to report in four steps
1
Send it. Call gtag('set', 'user_properties', {...}) as soon as the page knows the value.
2
Confirm it. Look for the property in the Users by User property card of the Realtime report.
3
Register it. Create a user-scoped custom dimension in Admin and enter the property name exactly as your code sends it.
4
Wait. The dimension reaches reports after 24 to 48 hours.
Register the dimension on the day the property ships so the wait starts early.

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.

LimitStandard property360 property
User properties per property25100
User-scoped custom dimensions25100
User property name length24 charactersNot listed on the 360 limits page
User property value length36 charactersNot 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_id and first_open_after_install can't be used.
  • Reserved prefixes. Names can't start with google_, ga_ or firebase_.
  • 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
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.

A padlock resting on a laptop keyboard, standing for the rule that user properties must never hold personal 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
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

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

Related Articles