LW IT Solutions
« Blog Overview /Digital Analytics / GA4 Form Tracking: form_start Fires Once Per...

GA4 Form Tracking: form_start Fires Once Per Session, form_submit Every Time

GA4 Form Tracking: form_start Fires Once Per Session, form_submit Every Time
Contents
  1. Where the four numbers come from
  2. One start per session, one submit per submission
  3. Four parameters, and no report showing them yet
  4. What form_submit actually witnesses
  5. Four figures that do line up

Google’s tutorial on generating leads sets out four measuring points for a form on a website: how many people arrive at the site, how many reach the form, how many begin filling it in, and how many submit it. Three of the four rest on events that Google Analytics collects without a line of extra code, and the tutorial recommends holding the last two against each other to find weaknesses in the form.

That comparison deserves a second look. The enhanced-measurement reference defines the two events in one line each. form_start fires the first time a user interacts with a form in a session. form_submit fires when a form is submitted. One of the two carries a per-session cap, the other does not.

Two session lanes marked with form events: the upper lane holds one form_start pill followed by three form_submit pills, the lower lane a single form_start with nothing after it, beside a totals panel showing two starts against three submits
Two sessions, two starts, three submits. The quotient the tutorial suggests comes out at 150 percent, while the share of visitors who finished is 50 percent.

Where the four numbers come from

The first two measuring points both rest on page_view. That event is collected automatically for every web data stream, and it is the one enhanced-measurement option that cannot be switched off. Visits to the site and views of the page carrying the form are two readings of the same event, separated by the page location.

The last two come from the Form interactions option in enhanced measurement, set per data stream under Admin, then Data collection and modification, then Data streams. Changing the switch requires Editor rights or above on the property. Both events read the form element itself: form_id from its id attribute, form_name from its name attribute, form_destination from the address the form posts to. form_submit adds one more, form_submit_text, the label printed on the button.

One start per session, one submit per submission

The asymmetry becomes visible as soon as two sessions are written out side by side.

Session 1
  contact form, first keystroke ....... form_start    1
  sent, rejected by validation ........ form_submit   1
  corrected, sent again ............... form_submit   2
  newsletter box in the footer ........ form_submit   3
      no second form_start here: the cap is already spent

Session 2
  contact form, first keystroke ....... form_start    1
  leaves without sending .............. form_submit   0

Totals   form_start  2        form_submit  3
         form_submit / form_start  = 150 %
         visitors who finished     = 1 of 2 = 50 %

The numerator counts submissions. The denominator counts sessions in which any form was touched. Those are different units, so the quotient compares two unlike things and can pass one hundred per cent without anything being broken. Every retry after a validation error inflates it, and so does a second form on the same page.

A completion rate needs a denominator in the unit of the numerator. The nearest honest version is sessions containing at least one form_submit against sessions containing a form_start. Both are then counted the same way, and the result behaves.

Four parameters, and no report showing them yet

Four parameters ride along with these events, which makes it tempting to read the numbers per form straight away. The reference blocks that in a single note: the parameters become usable in reports only after a custom dimension has been created for each one.

Until then the newsletter box in the footer, the contact form and the demo request form all land in the same undifferentiated count. On a site where the footer form sits on every page, that count is dominated by the form nobody meant to measure, and the ratio above drifts further from anything useful.

Registering the dimensions takes a few minutes in Admin under Custom definitions, and the documentation puts a wait of 24 to 48 hours on it before the data can be reported on. Worth setting up before the measurement is needed rather than on the day the numbers are first read.

What form_submit actually witnesses

The event fires in the browser, at the moment the form is submitted. Everything that decides whether a lead exists happens after that: validation on the server, the spam filter, the double opt-in mail, the duplicate check against the CRM. None of it is visible to the tag.

So form_submit counts attempts, and the goal named in the tutorial itself, a person who showed interest and can be contacted, sits one step further along. The step is short, and it is exactly where the losses are. A submission the server rejected looks identical in Analytics to one that turned into a contract.

Four figures that do line up

A funnel holds together when one unit runs through all of it, and sessions are the convenient unit here because the form events already work that way.

sessions with a view of the form page   page_view, split by page location
sessions with form_start                enhanced measurement
sessions with form_submit               enhanced measurement
sessions with the confirmation          page_view on the thank-you page,
                                        or an event sent by the server
                                        once it has accepted the entry

The last line has to be built; the first three arrive on their own. Between the third and the fourth sits the difference between attempts and leads, and those two numbers next to each other say more about a form than the ratio the tutorial proposes.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Write a comment

The email address is not published. Required fields are marked with an asterisk.

ALL ARTICLES & CATEGORIES

CCTV

Follow this category by RSS

Cloud & AI

Follow this category by RSS

Data Privacy

All 11 articles in this category Follow this category by RSS

Digital Analytics

All 35 articles in this category Follow this category by RSS

Digital Marketing

All 21 articles in this category Follow this category by RSS

IT & Networks

All 11 articles in this category Follow this category by RSS

Raspberry PI

Follow this category by RSS

Smart Home

Follow this category by RSS

Web Development

Follow this category by RSS

WordPress Plugins & Tricks

Follow this category by RSS