Skip to content

Guide 155 · Events · GA4 + Tag Manager

Track form submissions with the recommended form_submit event: form_id, the GA4 Event tag, and the submit-vs-accepted split

Checked 11 November 2026 · Verification: container fragment validated structurally (format 2, unique IDs, trigger resolves, variable references exist); worked example recomputed · Steps traced to Analytics Help and Tag Manager Help, opened 11 November 2026 · 6-minute read

A site with five forms and one submission count cannot tell which form works. The form_submit event is a recommended event with four prescribed parameters — form_id, form_name, form_destination, and form_submit_text — and this guide builds it as a GA4 Event tag that fires on the submit, carrying the identity of the form.

Expected signal

After the tag is published, a test submission shows in DebugView as a form_submit event with form_id, form_name, form_destination, and form_submit_text all set, and the Realtime report lists it under Event count by Event name within minutes.

Download the container fragment: the form_submit event container fragment (JSON) (4938 bytes, MD5 45f474cda1f7aa2c1dc4e4ad26a3bb27). It holds one GA4 Event tag named GA4 - form_submit, the Custom Event trigger that fires when the data layer event equals form_submit, and the four data layer variables for form_id, form_name, form_destination, and form_submit_text. The Measurement ID is left as G-XXXXXXXXXX for you to replace. Import it from Admin, then Import Container, choosing Merge if the container already has tags.

What you need

  • The Google tag already installed through Tag Manager. This guide adds one event tag beside it.
  • A form submit your site can signal. The push runs in the submit handler, carrying the identity of the form that was submitted.
  • Four values per submit. The prescribed parameters for form_submit are form_id (the identifier of the form), form_name (the name of the form), form_destination (the page the visitor lands on after submitting), and form_submit_text (the text on the submit button).

The worked example

The test below is sixty form starts and forty-five submits across two forms in one week. The number that decides which form works is the submit rate per form.

Form (form_id)StartsSubmitsSubmit rate
contact-form403280.00%
quote-form201365.00%
All forms604575.00%

Those figures were recomputed here before publication: 40 plus 20 is 60 starts; 32 plus 13 is 45 submits; 32 divided by 40 is 0.8, so the contact form submits at 80.00%; 13 divided by 20 is 0.65, so the quote form submits at 65.00%; 45 divided by 60 is 0.75, so the overall submit rate is 75.00%. The data layer push that carries one of those submits is the standard form:

dataLayer.push({
  event: "form_submit",
  form_id: "contact-form",
  form_name: "Contact us",
  form_destination: "/thank-you",
  form_submit_text: "Send message"
});

The trace

  1. Push the submit to the data layer in the submit handler. When the form is submitted, run the push above with each value set to the real one. The event name is form_submit, exactly as Google spells it, and the parameter names are form_id, form_name, form_destination, and form_submit_text.
  2. Create the four data layer variables. In Tag Manager, go to Variables, then in User-Defined Variables create one Data Layer Variable per parameter: DLV - form_id, DLV - form_name, DLV - form_destination, and DLV - form_submit_text, each with the matching Data Layer Variable Name.
  3. Add the GA4 Event tag. Go to Tags, then click New. Name it GA4 - form_submit. In Tag Configuration, choose tag type Google Analytics: GA4 Event. Enter your Measurement ID. In Event Name, enter form_submit. Under Event Parameters, add four rows, one per parameter, each with its matching data layer variable.
  4. Set the trigger. In Triggering, click the trigger box and choose New, then choose trigger type Custom Event. Set Event Name to form_submit and choose All Custom Events. Click Save, then Save the tag.
  5. Check it in Preview and DebugView. Click Preview, enter the site URL, and click Connect. Submit the contact form. In Tag Assistant, the form_submit event must appear in the left panel with the tag under Tags Fired. Then open DebugView (Admin, then Data display, then DebugView) and confirm the event shows with all four parameters set, including form_id contact-form.
  6. Publish it as a version. Click Submit at the top right, select Publish and Create Version, name the version, and click Publish.

Dead ends

DEAD END — THE SUBMIT COUNTS A FAILED FORM. A submit that fails validation is a form_start that never became a submit. If the push runs before validation, the report counts every failed attempt as a submission. The push runs after the form passes validation.

DEAD END — FORM_ID IS THE PAGE URL. Two forms on one page then share one form_id, and the report cannot tell them apart. The form_id is the identifier of the form itself, not the page it sits on.

DEAD END — FORM_SUBMIT_TEXT IS FREE TEXT FROM THE VISITOR. The submit text is the label on the button — Send message — not anything the visitor typed. A value that carries visitor input can carry personal data into GA4, which breaks Google's terms.

End state

One tag, one trigger, four parameters. A submit shows in DebugView within a minute of the test, in Realtime within minutes of publishing, and in the Events report within 24 hours, with the submit rate visible per form_id. The submit rate needs the form_start count as well — the start event is the other half of the same funnel, and it is built the same way, with the event name form_start and no prescribed parameters.

Sources

Checked 11 November 2026. The click paths above are the ones in Google's help and developer pages, opened 11 November 2026. No step in this guide was run inside a live Analytics property or a live Tag Manager container, because both need a Google sign-in and this site does not sign in as anyone. What was run: the container fragment was validated structurally in Python 3.12.3 — export format version 2, unique IDs, the tag's firing trigger resolves to the Custom Event trigger in the file, and all four data layer variable references exist as variables — and the worked example was recomputed: 40 + 20 = 60 starts; 32 + 13 = 45 submits; 32 / 40 = 80.00%, 13 / 20 = 65.00%, 45 / 60 = 75.00% submit rates. Google moves menu items without warning; if a path on this page no longer matches, the linked help page is the current map.