TapCub is live — analytics, insights and live chat, free on one platform
Analytics

Form Analytics: Measure Where Forms Lose People, Without Recording What They Type

Form analytics shows how many people see a form, start it, submit it and get through. The metrics for each step, how to track starts and validation errors without capturing field values, and what to fix first.

Lin Zhou Published Nov 3, 2026 5 min read Analytics
Illustrative numbers. 780 people started and gave up.Sample data

Try it on your own data

Every report in this article is in the free plan. One snippet for web and apps, up to 10 sites.

Start free

Form analytics shows how many people see a form, start it, submit it and get through. This guide defines the metrics for each step, shows how to track starts and validation errors without capturing field values, and lists what to fix first.

What you will learn

  • Measure forms as a funnel: viewed, started, submitted, accepted
  • Track field names and errors, never field values
  • Report the server-accepted count as the conversion

A form is a four-step funnel

Counting submissions tells you how many forms arrived, not how many were lost. Form analytics treats each form as a small funnel:

  1. Viewed: the page with the form was seen.
  2. Started: the visitor focused a field.
  3. Submitted: the visitor pressed submit.
  4. Accepted: your server accepted it (valid, not spam, not a duplicate).

Each gap has a different cause. A low start rate is about the offer or the page; a low completion rate is about the form itself; a gap between submitted and accepted is about validation, errors or spam.

Metrics

The table defines the metrics for each step. The two that matter most are start rate (starts ÷ views) and completion rate (submits ÷ starts). Field-level drop-off (which field people leave on) needs per-field events and is worth it only for long or high-value forms.

MetricFormulaPoints at
Form viewsVisitors who saw the form pageTraffic and placement
Start rateStarts ÷ viewsOffer, copy, position
Completion rateSubmits ÷ startsForm length and clarity
Abandonment rate1 − submits ÷ startsSame, from the other side
Error rateSubmits blocked by validation ÷ submit attemptsField formats, messages
Acceptance rateAccepted ÷ submitsServer errors, spam, duplicates
Time to completeStart to submit (median)Effort required

Field-level drop-off needs per-field events.

A sample funnel

In the example, 5,000 visitors saw a demo request form and 1,400 started it, a 28% start rate. Of those, 620 submitted, a completion rate of 44%, and the server accepted 560: 60 submissions failed validation or were spam. The largest absolute loss is between starting and submitting: 780 people began and gave up. That points at the form: too many fields, a confusing field, or an error that was hard to see.

app.tapcub.com/analytics/behavior/funnels

Start rate

28%

starts ÷ views

Completion rate

44%

submits ÷ starts

Rejected after submit

60

validation or spam

Demo request form · 30 days

Sample
Viewed form page5,000
Started form1,400
Submitted620
Accepted by server560
Sample data
Illustrative numbers. 780 people started and gave up.

Track starts and errors

Automatic form tracking usually records only that a form was submitted. Starts and validation errors take a few lines of code. The example below sends one event when a visitor first focuses a field, and one event listing the names of invalid fields when the browser blocks a submit. It sends field names only, never what the visitor typed: values in analytics are a privacy risk and rarely needed.

Send the accepted step from your server when the form is stored, with the same form ID. That is also where spam and duplicates are filtered, so it is the number to report as conversions (see lead tracking).

form-events.jsJavaScript
const form = document.querySelector('#demo-form');

// Send one event when the visitor first focuses a field
form.addEventListener('focusin', () => {
  if (form.dataset.started) return;
  form.dataset.started = '1';
  tapcub.track('form_start', { form_id: 'demo' });
});

// When the browser blocks a submit, send the invalid field names (never values)
let bad = [];
form.addEventListener('invalid', (e) => {
  bad.push(e.target.name);
  if (bad.length > 1) return;
  setTimeout(() => {
    tapcub.track('form_error', { form_id: 'demo', fields: bad.join(',') });
    bad = [];
  }, 0);
}, true);

What to fix first

  • Low start rate: the offer, the copy around the form, or the form is below the fold.
  • Low completion rate: remove optional fields, merge name fields, drop fields you can ask later.
  • Many validation errors on one field: make the format clear or accept more formats (phone numbers, dates).
  • Rage clicks on submit: the button looks clickable while disabled, or errors are not shown. See how to read a heatmap.
  • Submitted but not accepted: check server errors and spam filtering before blaming visitors.

Treat form starts and completions as micro conversions and test changes by comparing periods.

Form analytics in TapCub

Form submit tracking is off by default. Add data-forms="true" to the script and each submit is recorded with the form's id, name and action, but not field values. Starts and errors are custom events: tapcub.track(name, props) keeps up to 20 properties, and an identical event from the same visitor on the same path within one second is dropped, so a single event per error burst is the right pattern (custom events). A funnel of form view, form_start, submit and the server's accepted event shows each step's rate and time to complete (funnels). Heatmaps (Pro plan and above, with autocapture) show clicks and rage clicks on the form, where a rage click is a third click within 300 ms and 50 px. More in conversion rate and tracking plan.

FAQ

What is form analytics?

Measuring how visitors interact with a form: how many see it, start it, submit it and get through, and where they give up.

How do I track form submissions?

Use your analytics tool's form tracking or send an event on submit, and confirm accepted submissions from the server.

How do I measure form abandonment?

Track form starts as well as submits. Abandonment rate = 1 − submits ÷ starts.

Is it safe to record what people type into forms?

It is rarely needed and creates privacy risk. Record field names and errors, not values.

What is a good form completion rate?

It depends on length and purpose. Compare your own forms over time and test removing fields.

Was this article helpful?

We use your answers to fix and expand this page.

Lin Zhou

Product Experience Specialist

Writes about product experience, practical workflows, and growth, turning complex processes into clear steps for everyday decisions.

See where your forms lose people

Opt-in form tracking that stores no field values, custom start and error events, funnels and rage clicks on the form.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics