QA Ultimate Stack

Read form test results: never observed, params missing, fired more than once

What each form test result means, how to tell a site problem from a tag problem from a config problem, and what the run records to help you decide.

Pass or fail per layer

Results show each form's overall status (failures first) and each expectation's result per layer: dataLayer, tag and cookies. A form passes only if every required expectation passed. On Premium, export the results, including the captured values, to Excel.

One row per expectation per layer, failures first.

A results table with rows for several forms showing params OK, params missing, never observed, fired more than once and never got to submit.

What each result means

ResultMeaningUsually points at
Fired, params OKObserved, with every expected parameter non-blankNothing: it works
Fired, params missingObserved, but a parameter was blank or absentThe site's code (dataLayer) or the tag's parameter mapping (tag)
Never observedNot seen before the timeoutThe site didn't push it, or the tag didn't fire
Fired more than onceThe duplicate check found extra firesA GTM trigger matching twice
Never got to submitA step failed before the submit clickThe config: a moved field or a changed page
Confirmation never appearedThe success URL or final wait wasn't reachedThe site's own validation rejected the submission
Missing (info only)A third-party cookie wasn't setUsually the browser's tracking prevention
Not checkedNo expectation was set for this layerAdd one if you need the layer
Eight results, each pointing at a different place to look.

A two-column list of form test results with short meanings.

When the site's validation swallowed the submit

A submit click that the site's own validation rejects looks like a tracking gap: no navigation, no conversion push, every post-submit event never observed. ODDVX separates the two. It records whether the page navigated after submit and the URLs it went through. On a failing run, it also records the visible error text and a screenshot. "Please choose an option" next to an unset radio group is a config problem, not a tag problem.

Zero navigations and a visible error: the config left a required question unanswered.

A failure detail showing no navigation after submit, the visible error text and a captured screenshot.

Site, tag or config?

Work down the layers:

  1. Did the submit land? If not, fix the config or answer the question the site's validation complained about.
  2. Did the dataLayer push happen, with values? If not, it's the site's code. Send it to the developers with the spec.
  3. Did the GA4 hit go out? If the push happened but the hit didn't, it's the GTM tag or trigger.
Three questions, three owners: config, developers, GTM.

A decision diagram from a missing event to three questions, each pointing at the config, the site's code or the GTM tag.

Read everything the run observed

Each form keeps a timeline of what was observed: every dataLayer push and every GA4 hit, with time and parameters, including the ones you didn't list as expectations. When a parameter is blank in the dataLayer push and blank in the hit, the site sent it blank. When it's filled in the push but blank in the hit, the tag's parameter mapping is wrong.

The value parameter was pushed blank: a site issue, not a tag issue.

A timeline of observed dataLayer pushes and GA4 hits, with one push carrying a blank value.

ODDVX for Windows

From the page to the hit, proved.

Start free with one saved form, one page and one parity check. Premium adds batch runs, exports and scheduled QA.