GA4 Ultimate Stack

Check that GA4 parameters are populated on real traffic

A registered dimension isn't proof the data is there. Validate parameters across properties, read each status, set a sensible tolerance and find what's behind a failure.

Registered isn't the same as populated

A custom dimension can be registered, the event can fire, and the report can still be useless, because the parameter arrives blank, as (not set), or as a placeholder like undefined. Setup checks won't show that. Only the collected data does.

Dimensions Control Center's Validate mode reads real, already-collected traffic and checks how often each parameter is actually populated. It is read-only.

Setup says yes; real traffic says 41% (not set). Validation reads the traffic.

Two panels: setup shows the dimension registered and the event firing, while real traffic shows large shares of not set and undefined values.

Pick properties, dimensions, a window and a tolerance

  1. Select the properties. Free checks one property per run; Premium can check several.
  2. List the dimensions to check by display name, for example Form Name, Insurance Type.
  3. Choose the date window.
  4. Optionally set a tolerance: the share of rows allowed to be blank before a dimension fails.
  5. Run Validate.
Dimensions, a window and a tolerance. Validation never writes.

A validate form with two dimensions, a 28-day window and a 2% tolerance.

Read the results

Results come back as a property × dimension matrix. Click a cell for the detail behind it. Each cell carries one status:

StatusMeaning
passPopulated on every real row checked, or blank on no more rows than the tolerance allows
failBlank, (not set) or a placeholder on more rows than the tolerance allows
no dataNothing fired for this parameter in the window, so there was nothing to check
not registeredNo custom dimension with this display name exists on the property
unsupported scopeItem-scoped dimensions aren't validated
no accessYour Google account can't read this property
Five properties, two dimensions. Fails, not-registered and no-data cells each need a different response.

A property by dimension grid with pass, fail with percentages, not registered and no data cells.

Each status needs a different response

  • fail is a tracking problem: the tag sends the parameter without a useful value.
  • not registered is a configuration gap: register the dimension, or check that the display name matches.
  • no data may be normal for a seasonal form, or a sign the event stopped. Check the event first.
  • unsupported scope and no access mean the check couldn't run, which is different from a failure.
Six statuses, three kinds of problem: tracking, configuration and access.

A two-column list of the six validation statuses with their meanings.

Set a tolerance that reflects reality

Some blank rows are genuine: an edge case, an old browser, a form submitted before the page finished loading. A small tolerance, such as 2%, absorbs those without hiding a broken implementation. Agree the number with whoever owns the reporting, and use the same tolerance every time you compare.

At a 2% tolerance, 1.2% blank passes and 3.5% fails. 53% fails at any sensible setting.

Three bars of blank share by brand, labelled pass or fail at a 2% tolerance.

Investigate a failure

Open the failing cell. The values usually point straight at the cause:

  • (not set) means the parameter wasn't sent on those events at all.
  • undefined, null or an empty string usually means the tag read a variable before the page set it.
  • A real value on some rows and blanks on others often means one form or page template is missing it.

Fix it at the source, in the tag or the page, then validate again over a fresh window.

The values behind a failure: placeholders next to real values point at where the tag reads too early.

A table of values for Form Name on Brand C: not set, contact, undefined and quote, with placeholder and real labels.

ODDVX for Windows

Every property, one screen.

Start free on one GA4 brand per run. Premium adds every brand in one run, batch writes, exports and scheduled checks.