Blog

Lowering the GA4 thresholding limit by sending user_data

Thresholding hides demographic and interest data when sample sizes are small. Sending hashed user_data reduces it materially.

If your GA4 reports show the dreaded "(other)" row or thresholded rows under demographic and interest dimensions, the cause is GA4's privacy thresholding kicking in. The threshold is reduced (sometimes removed) when GA4 has enough signal to identify users via Google's own data, which means sending hashed user_data with your events.

What thresholding actually does

When GA4 cannot uniquely identify enough users in a segment, it withholds the data to protect against re-identification. The threshold is typically 50 unique users per row, but varies by report. The fewer matched users you have, the more aggressive the thresholding.

How user_data helps

When GA4 receives an event with hashed user_data (email, phone, address), it attempts to match the hash against signed-in Google users. If matched, GA4 enriches your event with verified demographic and interest data, contributing to the threshold counts in your reports.

The match rates are not high. Across our customer base, we see 15-30 percent of events get matched. That is enough, in most cases, to push reports above the threshold and reveal data that was previously hidden.

Sending user_data server-side

In your GA4 server-side tag, configure the user_data fields to read from your data layer or first-party cookies. The tag template handles hashing automatically if you give it plaintext, or skips the hash step if you give it values that are already SHA-256 encoded.

user_data: {
  email: '{{ user.email }}',
  phone_number: '{{ user.phone }}',
  address: [{
    first_name: '{{ user.first_name }}',
    last_name: '{{ user.last_name }}',
    city: '{{ user.city }}',
    region: '{{ user.region }}',
    postal_code: '{{ user.zip }}',
    country: '{{ user.country }}'
  }]
}

What to send and what not to

Send what you have. Email alone helps. Email plus phone helps more. Adding address fields beyond city and country gives diminishing returns and increases the surface area of PII you are processing.

Do not send: IP address (GA4 already collects it from the request), screen resolution (also already collected), browser language (same).

Verification

In GA4 Admin, find the Data Streams section and look at the Enhanced Measurement card. There is a "User-provided data" indicator that shows the percentage of events with user_data attached. If it shows 0 percent, your tag is not sending it. Above 30 percent is good. Above 60 percent is excellent and you will see thresholding melt away in most reports.