
May 7, 2025
non_personalized_ads=0 in Google Analytics 4
Updated: May 7th, 2025
While working with Google Analytics 4 Debugview, you probably noticed a mysterious parameter called non_personalized_ads (containing a value of 0 or 1). What is it? How does it work?
I decided to run some tests and see what affects it. The results became a blog post you’re currently reading. Without further ado, let’s take as look.

TL;DR version
To save you some time, here’s a shorter version of my findings. But if you want to learn all the details, read the full blog post.
- non_personalized_ads=0: This means the user HAS consented to their data being used for personalized ads.
- This user property in GA4 is primarily controlled by Google’s Consent Mode, specifically reflecting the consent states for ad_user_data and ad_personalization.
- The value of non_personalized_ads directly influences whether GA4 audiences and user data can be utilized for personalized advertising campaigns in linked Google Ads accounts.
- Is it an Error? Generally, no. The non_personalized_ads parameter is an indicator of user consent choices. Seeing a 1 or 0 is expected behavior.
What is the non_personalized_ads parameter?
The non_personalized_ads parameter in Google Analytics 4 debugview helps you see the status of ad personalization for that particular user. When users visit a site with GA4 and Consent Mode or other configurations (like allow_ad_personalization_signals), they can choose to opt in or out of personalized ads.
- Value of 0 (false): When the parameter value is 0, the user has consented to personalized ads.
- Value of 1 (true): When the parameter value is 1, the user has not consented to personalized ads.
There are two locations where you can test the value of the non_personalized_ads parameter:
- GA4 Debugview: Admin > Data display > DebugView
- GTM Preview mode: When you load preview mode, you will notice two options in the header; one is for GTM, and the other is for GA4. Go to the GA4 option.
Here, you can click on any hit in the left-side tab and check the information sent to GA4. Look for the “npa” parameter.
What affects non_personalized_ads?
One feature that influences the non_personalized_ads parameter is consent mode. If you’re wondering, “What is Consent Mode?” here’s a quick overview.
Consent Mode ensures that data is only collected by Google Analytics 4 and Google Ads if the user has consented to data collection for analytics and advertising purposes.
Users can give separate consent forms for analytics and personalized ads. For example, if a user consents to analytics but not personalized ads, GA4 will track data as usual for analytics, but Google Ads will not collect user data for ad targeting. Instead, the user will see non-personalized ads.
If you’re using your own solution for gathering consent from users, you can check out this Google article on how to set up consent mode. If you use a 3rd party consent solution, you can use the built-in integrations available in GA4 to enable consent mode. Simply go to Admin > Data Streams > Consent settings and follow the steps in the dropdown menu.
You can learn more about consent mode in my GTM course for beginners.
Additionally, the non_personalized_ads parameter can be affected by configurations in your GTM tags, including using the allow_ad_personalization_signals parameter, which will disable advertising personalization features when set to false.
Next, let’s look at some examples to understand how the consent mode variables affect the value of non_personalized_ads.
Example 1: analytics_storage is granted, ad_storage, ad_user_data and ad_personalization are denied
In this example, analytics_storage is granted, and ad_storage and ad_user_data are denied. The result of this combination of values is as follows:
- analytics_storage = granted: The user consents to analytics cookies so GA4 can collect data for analysis.
- ad_storage = denied: The user does not consent to cookies related to advertising.
- ad_user_data = denied: The user does not consent to sharing their data for ad tracking or personalization.
- ad_personalization = denied: The user does not consent to personalized advertising.
gtag('consent', 'default', { ad_storage: 'denied', analytics_storage: 'granted', ad_user_data: 'denied', ad_personalization: 'denied', };
The result will be non_personalized_ads as true (or 1) since the user has not consented to cookies related to advertising or to have their data collected and used for the ads they are served.
Example 2: analytics_storage and ad_storage are granted, and ad_user_data and ad_personalization are denied (and then granted)
In this example, analytics_storage and ad_storage are granted, and ad_user_data is denied. The outcome of this combination of values is as follows:
- analytics_storage = granted: The user consents to analytics cookies so GA4 can collect data for analysis.
- ad_storage = granted: The user consents to share ad-related data, allowing conversion tracking and remarketing
- ad_user_data = denied: The user does not consent to share their data for ad tracking or personalization.
- ad_personalization = denied: The user does not consent to personalized advertising.
gtag('consent', 'default', { ad_storage: 'granted', analytics_storage: 'granted', ad_user_data: 'denied', ad_personalization: 'denied', };
However, this will still result in non_personalized_ads being true.
Now, what if the user grants consent to ad_user_data?
- ad_user_data = granted: The user consents to share their data for ad tracking and personalization.
gtag('consent', 'update', { ad_storage: 'granted', analytics_storage: 'granted', ad_user_data: 'granted', ad_personalization: 'denied', };
There is no change to the non_personalized_ads parameter.
Next, what if the user grants consent to ad_personalization but does not consent to ad_user_data?
- ad_personalization = granted: The user consents to personalized advertising.
gtag('consent', 'update', { ad_storage: 'granted', analytics_storage: 'granted', ad_user_data: 'denied', ad_personalization: 'granted', };
Still, there is no change to the non_personalized_ads parameter.
Example 3: analytics_storage and ad_storage are denied, and ad_user_data and ad_personalization are granted
Given the definitions of each of the parameters, let’s try something new:
- analytics_storage = denied: The user does not consent to analytics cookies for GA4.
- ad_storage = denied: The user does not consent to share ad-related data for conversion tracking and remarketing
- ad_user_data = granted: The user consents to share their data for ad tracking and personalization.
- ad_personalization = granted: The user consents to personalized advertising.
gtag('consent', 'update', { ad_storage: 'denied', analytics_storage: 'denied', ad_user_data: 'granted', ad_personalization: 'granted', };
The non_personalized_ads value updates and is now 0! This means that the user has consented to provide their data for personalized ads.
So, at a minimum, the user needs to provide consent for ad_user_data and ad_personalization to for the non_personalized_ads parameter to be false.
Example 4: allow_ad_personalization_signals is false
While not one of the Consent Mode parameters, the allow_ad_personalization_signals parameter controls whether Google uses data for personalized ads. When set to true, events sent from the tag become eligible for ad personalization. On the other hand, when set to false, those events will not be used for ad personalization, but they could still be used for analytics reporting.
You can configure the value of this parameter either in the Google tag or within specific GA4 event tags.
I think you can guess that if allow_ad_personalization_signals is false, non_personalized_ads will be 1, so users’ data for all events, or that specific event, will not be used for ad personalization.
Example 5: allow_ad_personalization_signals is true
In this example, we will test what happens when allow_ad_personalization_signals (I don’t think it’s too hard to guess the resulting value).
According to Google, ad personalization (non_personalized_ads is 0) only occurs when the allow_ad_personalization_signals parameter is set to true and the end user grants consent for ad personalization. It’s worth noting that if you have enabled Consent Mode, this parameter is not required, as Consent Mode already influences ad personalization.
Example 6: Manage default consent settings is set to “Yes”
In Google Analytics 4, you can automatically mark data collected through your Google tag as consented. To enable default consent settings, go to Admin > Data streams > Web stream > Consent settings > Manage default consent settings for data collection > and select “Yes”.
You’ll notice some warnings you need to read through if you choose to enable this feature, so be sure to do that before deciding anything.
To test this, assuming no consent mode is enabled on the site, you can expect that non_personalized_ads is 0. This is why, if you enable this feature, you should ensure that you have a system for users to grant consent before the Google tag is triggered.
non_personalized_ads=0 in Google Analytics 4: Final Words
Hopefully, this article gave you more clarity on what non_personalized_ads in Google Analytics 4 is and how to control it.
In a nutshell, you can control it either with Consent Mode or with the allow_ad_personalization_signals parameter. Even though that are also default consent settings in GA4, I group this with the “Consent Mode”.

6 COMMENTS
Hey Julius, great blog post as always. I have a question for you though. What might some common use cases (outside the obvious) where you would hard code the following parameter - allow_ad_personalization_signals - to either true or false on an event tag outside of respecting the CMP signals of the user when available?
The common use cases are the obvious ones. When the company does not want/need to use consent mode but they still want/have to enable ads personalization only when the users give consent (maybe their local laws require that)
Hi Julius, Thank you for the blog.
I reached your site because I was searching for why non_personalised_ads shows up as the only user property and I cannot see the user ID which I passed through GTM. I followed your instructions on how to add the user ID and can see the parameter in the preview mode of GTM, however, I can’t see it in GA4 Debug view and I can only see the non-personalised-ads show up as user property
Wondering for quite some time what this parameter was all about, but not that urgent to find it out by myself. Now I know, thank you!
Hi,
Can users really explicitly opt-in to ad_storage but opt out of ad_user_data and ad_personalisation?
On all sites that I've seen these are simply bundled together. If you accept the marketing category on the banner than you opt into ad_storage, ad_user_Data and ad_personalisation. Have you seen sites/banners that give more granular consent options than that?
Thanks!
Technically, you can. But they are indeed closely related, thus I usually combine them all under "Marketing consent"