Clycyo
How-to4 min read

How to Track Form Submissions Without a Tag Manager

Contact forms, signups, and surveys tracked with one event listener — including failed submissions, the metric everyone forgets.

Forms are where visitors become leads, subscribers, and customers — and where most analytics setups track only the happy ending. The complete picture has three events: the attempt, the success, and the failure. The third one is where the money hides.

The three-event pattern

const form = document.querySelector('#contact-form');

form?.addEventListener('submit', () => {
  window.webanalytics?.track('form_submitted', {
    form: 'contact', page: location.pathname,
  });
});

// In your success handler (after the response):
window.webanalytics?.track('form_succeeded', { form: 'contact' });

// In your error handler:
window.webanalytics?.track('form_failed', {
  form: 'contact',
  reason: 'validation', // or 'server', 'network'
});

For plain HTML forms that navigate away, the submit event alone suffices (fire-and-forget posts survive navigation); fire the success event on the thank-you page instead.

Why failures are the headline metric

submitted minus succeeded = people who tried to give you money or attention and could not. A 15% failure rate on a demo-request form is silent revenue loss that no pageview report will ever surface. Segment failures by reason: validation failures point at form design (that phone-format regex), server failures at engineering, network failures at performance. Because Clycyo also captures JavaScript errors on the same record, the form that throws in Safari shows up with the error and the abandoned visitor side by side.

The funnel around the form

  • Reach rate: of page visitors, how many ever focus a field? (Fire a one-time form_started event on first focus.) Low reach = page problem, not form problem.
  • Completion rate: started → succeeded. Under 50% on a short form usually means a field is doing damage — length, format demands, or the dreaded address block.
  • Source quality: completion rate per utm_source separates channels that send form-fillers from channels that send wanderers.

Privacy note

Track that the form was submitted, never what was typed — no field values in event properties. If the submission includes signup, that is the moment for identify(email) with consent, which upgrades the lead into an attributable journey. Form analytics needs counts and reasons, not content — the PII guide covers the line in detail.