Count three things, not one
Most form tools show you one number: submissions. That tells you how many people got through, but not how many tried. To see abandonment you need two more counts before it.
- Views. How many people actually saw the form on screen. A page view is not the same thing if the form sits below the fold.
- Starts. How many clicked or tapped into a field. This is the moment someone decided to fill it in.
- Submits. How many sent it and got through.
From those you get two rates. Conversion is submits divided by views: how well the form and the page around it persuade. Completion is submits divided by starts: how well the form itself works once someone has begun. Abandonment is what is left of completion. Say 400 people see your form in a month, 120 start it and 70 send it. Conversion is 17.5%, completion is 58%, and 50 people, 42% of those who started, left halfway.
The two rates point at different fixes. Low conversion with good completion means people are not starting: look at the offer and at where the form sits. Good conversion up to the first field and a big drop after it means the form is the problem, and that is what the rest of this article is about.
What counts as a start changes the number
Two tools can report very different abandonment on the same form because they define the steps differently. Before you compare yourself with anyone, check four things.
- Does a view mean the page loaded, or the form was on screen? Counting page loads makes conversion look worse on long pages.
- Does a start mean focus, or typing? A tap into the first field by accident counts as a start under the first rule and not under the second.
- Is switching tabs counted as leaving? People often go to another tab to copy an order number or an address, then come back and send. A tool that counts every hidden page as an exit will show some of them as abandoned and as submitted.
- Are submits counted from the same visits? If your backend counts every message, including ones sent by a script or from a page without the tracking code, submits can be higher than starts.
Static Forms makes the same point in its own guide: a start should mean "the first meaningful interaction, not just the pageview". Whatever rule you pick, keep it the same for every change you test.
What the studies actually show
| What was measured | Figure | Sample | Source |
|---|---|---|---|
| People who started a form and sent it, desktop | 55.5% | 93,022,997 form sessions (number of forms not stated), 2025 | Zuko industry benchmarks |
| The same, on mobile | 47.5% | same data set | Zuko industry benchmarks |
| Shoppers who would never give a store their phone number | 14% | 1,026 online shoppers, 2025 | Baymard Institute |
| Sign-ups after an optional phone field was added | 99.6% to 62.9% | 1,454 visitors, one A/B test, 2017 | NextAfter (Care Net) |
| Paid participants who quit a task with captchas in it | 174 of 574 (30%) | 574 starters, 2023 | Searles et al., USENIX Security |
| Success rate with errors shown after each field, against errors on submit | +22% | 22 participants, 2009 | Wroblewski and Etre, A List Apart |
The Zuko benchmark is the closest thing to a public baseline for "of those who started, how many finished". Its figures come from forms that run Zuko's analytics, and more than a quarter of the sessions (27,089,063) are on financial services forms. The page does not say how many contact forms are in it, so a short contact form may well do better. The gap between desktop and mobile, eight points, is the part most likely to apply to you.
Two numbers you will see everywhere did not survive a check. "81% of people abandon a form after starting it" goes back to a 2018 survey by The Manifest; the coverage we found (PR News, 502 respondents) describes it as people who abandoned an online survey, and we could not find the original report online. "A required phone field cuts submissions by 37%" is credited to HubSpot on some sites and to WPForms on others, and we found no study behind it. Static Forms quotes "overall web form abandonment at 67.9%" from "a widely cited 2025 to 2026 benchmark" without naming who published it. If a figure has no publisher, year and sample, treat it as a rumour.
Fields you do not need
Every field is a question the visitor has to answer before they get what they came for. HubSpot's Dan Zarrella looked at over 40,000 customer landing pages and found that conversion fell only slightly as one-line text fields were added. Several multi-line text boxes, or several drop-down menus, pulled it down more. Baymard's checkout research puts the average US checkout at 14.88 form fields and says most could lose 20 to 60% of their form elements.
For a contact form, that leaves a short list. You need a way to reply, which is an email address, and the message itself. A name is cheap and makes your reply friendlier. Company, budget, "how did you hear about us" and a subject line are questions for your first reply, not for the form. The message box is the one multi-line field worth keeping: on a contact form it is the point.
Required phone numbers
A phone field has the best evidence against it of any single field. In Baymard's 2025 survey of 1,026 online shoppers, 14% said they would never give a store their phone number. In a 2017 test NextAfter ran for the charity Care Net on 1,454 visitors, adding a phone field to a course sign-up form took conversion from 99.6% to 62.9%, and the field was not even required. That is one test on one form, but the direction matches everything else.
If you call people back, keep the field, make it optional, and say why you ask: "Only if you'd like a call back". If you never call, remove it.
Captcha puzzles
A 2023 study of real, unmodified captchas (Searles and colleagues, USENIX Security, 1,400 participants in the main study) ran a separate test on abandonment. Of 574 paid participants who started a task with captchas in it, 174 quit before the end. When the captchas came inside an account sign-up, the way you meet them on a real site, people were 120% more likely to give up than when they were simply asked to solve captchas. These were people being paid to finish, so a visitor with no reason to stay is unlikely to do better.
A captcha also costs page weight before anyone touches it. We measured that ourselves in Turnstile vs hCaptcha vs reCAPTCHA speed. Most contact form spam can be stopped without any puzzle; here is how.
Errors that show up after send
The classic case: someone fills in five fields, presses send, and the page reloads with "Please correct the errors below", sometimes with the fields emptied. In a 2009 study Luke Wroblewski ran with the usability firm Etre (22 participants), a form that checked each field when the person left it had a 22% higher success rate than the same form checked on submit, and people finished it in 42% less time. Checking while people were still typing did worse than checking after they left the field.
The cheapest fix is already in your browser. Put required on the fields you need and type="email" on the email field, and the browser stops the send and points at the field before anything leaves the page. Write error messages that say what to type, not that something is "invalid". If the server refuses a message anyway, keep what the person typed.
The wrong keyboard on a phone
On a phone, the keyboard is half the form. A plain text field for an email address opens the letters keyboard without the @ key in reach; a phone number in a text field opens letters too. Zuko's benchmark shows completion eight points lower on mobile than on desktop, and small frictions like these add up on a small screen.
- Use
type="email"andtype="tel", which bring up the right keyboard. - Add
autocomplete="name","email"and"tel", so the phone can fill them in one tap. - Put the label above the field, not inside it as placeholder text that disappears once the person starts typing.
- Make the send button full width and big enough to hit with a thumb.
A send that looks like nothing happened
We found no study with a published sample on slow form submission, so this one is from practice rather than data. If the button does nothing visible for two seconds, people press it again, or decide it is broken and leave. The first gives you duplicate submissions; the second is abandonment that your analytics may not even count, because the person did press send.
Change the button to "Sending…" and disable it the moment it is pressed, and show a clear thank-you message when it works. Keep heavy scripts off the form page, especially ones that load before the form can be used.
How Formgong measures it
Formgong's form analytics counts the three steps for each form, on every plan, once the page has the small fg.js script (the hosted form page has it already):
- A view is counted when at least 40% of the form is on screen, once per page.
- A start is the first time the visitor focuses a field they can fill in. Hidden fields and the honeypot do not count.
- Leaving is recorded when the page is closed or hidden after a start without a send, with the last field the visitor was in. That field list is where you see which question loses people. Switching to another tab also counts as leaving, so read it as "where people stopped", not as a final count.
- Submits are counted by the server for every message, so they include messages from pages without the script. Compare views and starts only on pages that have it.
The script sets no cookies and stores no IP address with these events. A few other things help with the causes above. Spam is filtered without a puzzle: a honeypot field and a check for forms filled faster than a person can type, and a Turnstile check only if you turn it on, or for file uploads and voice messages. Field checks in the form's settings refuse a message with a missing or badly formatted field and tell the visitor which field to fix. The default contact form asks only for a name, an email and a message, with autocomplete on each.
Our own numbers, and why we are not quoting a rate
We wanted to give you Formgong's own completion rate across customer forms. On 1 November 2026 we counted every form that had ever reported a view: there were three, and all their views came in the last three days of October. Most forms send us messages without the view script, which is optional. Three forms over three days is not a benchmark, so we are not publishing a percentage from it. We will add one here when the sample is large enough to mean something.
Tell us what you found
If you measure your own form before and after one of these changes, we would like to hear what moved and by how much, including when nothing did. Write to support@formgong.com. A result with its denominator ("31 of 90 starts, then 52 of 94") is worth more to other readers than any number in this article.
What Formgong's free plan includes
- Build the form or bring your own. The form builder takes the colours and fonts from your site's address, with no sign-up; ready form templates copy into your account; AI writes the fields from one sentence. Any hand-written HTML form works too.
- Websites with the form already connected. 28 free website templates post to Formgong out of the box.
- 250 submissions a month on unlimited forms. Spam does not count. Once a year, a busy month keeps delivering on credit until the 7th instead of stopping.
- Everywhere you work. Email to up to 3 people at once, Telegram with Reply and Handled buttons, Google Sheets, Notion, and 3 signed webhooks for Slack, Discord, Zapier, Make or n8n.
- Emails to your customers in your business's name. Formgong sends them under your business name and replies come back to you, with no email service of your own to set up: a review request to every lead, a reminder a visitor asked for, and review emails after an order with your logo and colours. People who agree can also go straight into your Mailchimp, Klaviyo, Brevo, MailerLite or Kit list. An automatic reply to each visitor is on Pro.
- No captcha needed. A server-side spam filter, a honeypot, allowed domains and a block list; add your own Turnstile key if you want one.
- Files and voice. Visitors can attach files, or record a voice message that arrives transcribed.
- Made for AI-built sites. A hosted form page and a contact button; step-by-step guides for sites built with Lovable, Bolt, v0, Replit and Base44; an MCP server lets Cursor or Claude wire the form for you.
- See what the form does. Analytics for views, starts, conversion and where each lead came from, and an alert when a form goes quiet.
- One account for the rest. Customer reviews and an AI help chat that answers visitors from your own pages, with every message in one inbox. Data is stored in the EU.
Frequently asked questions
How do you calculate form abandonment rate?
Count starts (people who clicked into a field) and submits (people who sent the form). Abandonment is starts minus submits, divided by starts. If 120 people started and 70 sent it, 50 left, which is 42%.
What is a normal contact form abandonment rate?
There is no public benchmark for contact forms alone. Zuko's 2025 data on 93 million form sessions, mostly longer forms, shows 55.5% of starters finishing on desktop and 47.5% on mobile, so abandonment of about 44 to 53%. A short contact form may do better.
Does a required phone number reduce form submissions?
Yes, in the studies we could check. In Baymard's 2025 survey of 1,026 shoppers, 14% said they would never give a store their phone number, and in one 2017 test with 1,454 visitors an optional phone field cut sign-ups from 99.6% to 62.9%. The often quoted 37% has no study we could find.
Is the 81% form abandonment statistic real?
It comes from a 2018 survey by The Manifest. The coverage we found says 502 people took part and describes it as people who had abandoned an online survey after starting. We could not find the original report.
Can I see where visitors leave my form in Formgong?
Yes. With fg.js on the page, form analytics shows views, starts and conversion, and the field each visitor was in when they left. It is on every plan.
Sources and documentation
Official references for this guide: Zuko: conversion rate statistics by industry, Baymard: cart abandonment rate statistics, Baymard: explain the phone number field, NextAfter: phone field on a sign-up form (Care Net), HubSpot: which form fields lower landing page conversions, Searles et al.: An Empirical Study & Evaluation of Modern CAPTCHAs, A List Apart: Inline validation in web forms, PR News: why most people abandon online forms, Static Forms: form abandonment rate. Formgong form analytics, where data is stored.
Related guides
- Lovable form submissions to email and Telegram
- HTML contact form without a backend: a working example
- How to send website form submissions to Telegram
- Contact form not sending email? Check where it stops
- Managing website leads in Telegram without a CRM
- Form backend for Lovable, Bolt, v0, Cursor
- Telegram bot for a contact form: build or skip?
- GDPR form backend: 7 checks before you choose
- Lovable form not sending email? 6 fixes
- Netlify Forms not working? React and Bolt fixes
- Stop contact form spam without a CAPTCHA
- GitHub Pages contact form: a working setup
- Mailto Form in HTML: Why It Fails and What to Use
- HTML form to Google Sheets: 2 free methods
- Webflow form submission limit: what to do at 50
- Turnstile vs reCAPTCHA vs hCaptcha for forms
- Contact Form 7 and Elementor forms to Telegram
- Squarespace contact form not sending email?
- Shopify contact form: where do messages go?
- Google Form to Telegram: free Apps Script way
- Wix contact form not sending email? Fixes
- EU / GDPR Formspree alternatives compared
- HTML form action attribute explained
- How do HTML forms work? The HTTP request
- Types of Injection Attacks on Web Forms (2026)
- Indirect Prompt Injection in MCP
- MCP Rug Pull Attack: Detect Tool Changes
- Form without a backend: 7 ways that work
- Thank-you page after form submission (HTML)
- Indirect Prompt Injection Examples (2023–2026)
- Indirect Prompt Injection via Email
- What Is Tool Poisoning in MCP?
- WordPress contact form without a plugin
- Send email from frontend JavaScript
- How to Prevent Indirect Prompt Injection
- Honeypot Form Field: How to Add One That Works
- Contact Form with File Upload (HTML, No PHP)
- Angular contact form without a backend
- Send form submissions to Slack or Discord without Zapier
- Verify a form webhook signature (HMAC-SHA256)
- Contact forms that send nothing: 793 AI-built sites tested
- v0 contact form that actually sends: 3 ways
- How we tested AI-built contact forms, and 12 bugs we hit
- Cloudflare vs Netlify free plan: hosting that never pauses
- EmailJS 412 “Gmail_API: Invalid grant”: reconnect Gmail
- Resend “You can only send testing emails”: verify a domain
- Supabase Edge Function blocked by CORS policy: 3 causes
- Formspree “Form not found” and other errors: fixes
- Web3Forms errors: “Invalid access key” and 403 explained
- How to add customer reviews to your website for free
- Getform not working? “This form has been deleted” and more
- Next.js contact form not working? 6 errors, reproduced
- Webflow form not sending email? What to check, tested
- FormSubmit not working? “This form needs Activation” fix
- Contact form “TypeError: Failed to fetch”: causes and fixes
- WooCommerce product enquiry form
- Contact Form 7 vs WPForms
- Gravity Forms alternative free
- WordPress contact form block
- 535-5.7.8 Username and Password not accepted (Gmail)
- 535 5.7.3 Authentication unsuccessful: Office 365 SMTP
- Nodemailer “Missing credentials for "PLAIN"”: the fix
- Nodemailer “Greeting never received”: port 465 fix
- Nodemailer SSL “wrong version number”: the port fix
- Nodemailer “self-signed certificate in certificate chain”
- Nodemailer ECONNREFUSED 127.0.0.1:587: missing SMTP host
- SendGrid “authorization grant is invalid”: 401 fix
- Mailgun 401 Forbidden: why the API rejects your key
- “Edge Function returned a non-2xx status code”: the fix
- Next.js “Body exceeded 1 MB limit”: Server Action fix
- Unexpected token '<', "<!DOCTYPE "... is not valid JSON
- “TypeError: Body is unusable”: body has already been read
- Turnstile “timeout-or-duplicate” and other siteverify errors
- Turnstile vs hCaptcha vs reCAPTCHA: speed and size tested
- Judge.me reviews not showing on Shopify: how to fix it
- Judge.me review carousel not showing: how to fix it
- Yotpo reviews not showing on Shopify? Check the app embed
- Loox reviews not showing on product page: how to fix
- Shopify reviews not showing: what to check first
- How to show reviews on Shopify
- GDPR for website forms: what each type of form needs
- WooCommerce reviews not showing: how to fix it
- Stamped.io reviews not showing on Shopify: how to fix it
- Etsy reviews not showing: why and what to do
- Trustpilot widget not loading: how to fix TrustBox
- Yotpo problems in 2026: what merchants report
- Contact Form 7 “error trying to send your message” fix
- Elementor form “Your submission failed because of an error”
- Framer form not sending email or not working: what to check
- Carrd contact form not working: plans, spam and errors
- Google review link not working: what customers see and why
- tawk.to widget not showing on your website: causes and fixes
- How to add questions and answers to your product page
- “Failed to send a request to the Edge Function”: fixes
- Next.js “Failed to find Server Action”: what it means
- Brevo “unauthorized: Key not found” 401: the fix
- Amazon SES “Email address is not verified”: the fix
- Shopify contact form not working: how to fix it
- Judge.me alternative for WooCommerce after the 2025 shutdown
- Free WooCommerce review plugins compared on the free version
- WooCommerce review reminder emails without a paid plugin
- Add Voice Recording to a Website Form
- Contact Form 7 spam: how to stop it
- WPForms not sending email: how to fix it
- Contact form emails going to spam: how to fix it
- HTML form not submitting: how to fix it
- Contact form not working: how to find the fault
- Webflow form spam: how to stop it
- Website form to Notion: how to set it up
- Website form to WhatsApp: what works and what does not
- What 1-star reviews say about AI support chatbots
- Which free form backend gives you the most submissions?
- Elfsight reviews widget not showing? Check the view limit
- Next.js contact form backend vs Server Actions
- Review stars not showing in Google search results
- How to stop duplicate form submissions
- How to see which form leads came from ChatGPT
- What happens when a form webhook fails
- When to send a review request email after an order
- How to collect video testimonials for free
- Add contact form sign-ups to Mailchimp or Klaviyo
- How to migrate from Formspree without losing submissions
- How to get a Google review link for your business
- What is a headless form backend?
- Is it safe to put a form access key in your HTML?
- AI chatbot that answers only from your website
- Minified React error #441 in Next.js
- Squarespace product reviews after Judge.me
- Accessible contact form checklist for WCAG 2.2
- How to ask a client for a testimonial by email
- How to respond to negative reviews, with examples
- 429 Too Many Requests on a contact form
- MCP server for forms in Cursor and Claude
- Can you offer a discount for a review?
- Do EU stores have to say if reviews are verified?
- Webflow form backend options compared
- How to add review schema JSON-LD to a product page
- How to turn a customer review into an Instagram post
- How to make a QR code for Google reviews
- Live chat or chatbot for a small business website
- Which form backend do AI assistants pick? 54 answers
- PHP mail() not sending email, even when it returns true
- What “Failed to fetch” means, tested in three browsers
- 405 Method Not Allowed when you submit a form
- Send a contact form to more than one email address
- What is review syndication, and who needs it?
- How to save HTML form data to a database
- NetworkError when attempting to fetch resource
- Send product reviews to Google Merchant Center
- PHPMailer not working on a live server
- AI review reply generator: does it help?
- React 19 contact form with useActionState
- Astro Actions or a form backend?
- Is no-reply@wixsiteautomations.com legit?
- Where to find the Judge.me review widget code
- AI review summaries: what shoppers actually see
- Photo reviews for WooCommerce, and the GPS inside them
- Review request email templates you can copy
- Reviews in AI search: what ChatGPT and Perplexity cite
- Lead capture form with UTM tracking, built and tested
- Form design best practices, with our own form data
- Client intake form template with file upload
- What is social proof? Meaning and examples
- What is user-generated content (UGC)?
- Benefits of negative reviews for your store
- How to get your first reviews as a new store
- How to use customer reviews in your marketing
- How to get more customer reviews
- React form validation without a library, tested
- jQuery submit form with validation
- reCAPTCHA v3 setup with the server score check
- Shopify social proof that shoppers can check
- HTML file input: accept, multiple, capture and size checks
- How to add hCaptcha to a form, with the server check
- How to add invisible reCAPTCHA to a form
- Bug report form template with browser details
- What the FTC fake reviews rule bans for online stores
- How to show reviews on your homepage
- Do reviews increase sales? What the studies show
- HTML input types and what each one sends
- HTML textarea, tested in a real form
- HTML dropdown menu in a form, tested
- Do reviews help SEO? What Google says and shows
- How to add a review carousel people can read
- Product review examples that help shoppers decide
- Which trust badges actually mean something
- Customer satisfaction survey with CSAT and NPS
- JavaScript FormData and what fetch actually sends
- JavaScript form validation without a library
- Server-side form validation and what it catches
- Email validation in JavaScript, tested on 33 addresses
- Zod form validation with FormData, tested
- Store reviews vs product reviews
- How to send review requests through Klaviyo
- How to tag customer reviews by topic and mood
- Custom review form questions worth asking
- Online reputation management for small businesses
- HTML radio button groups and what they send
- HTML label tag and what screen readers hear
- HTML autocomplete attribute, tested with Chrome autofill
- HTML fieldset and legend, and what disabled leaves out
- HTML button tag and what a form button sends
- Vite contact form that still works after the build
- How to test a contact form, end to end
- How to embed a Google Form, and what it loads
- Customer feedback questions that get real answers
- How to convert a file to base64 in JavaScript
- FilePond with a form backend, and when to skip it
- Bootstrap form validation and server errors
- Tailwind form validation, tested in three browsers
- Donation form in HTML, and where the payment goes
- How to ask for a review in person or by text
- Which review sites matter for your business
- What are customer reviews, and which kinds count
- Online review statistics, checked at the source
- Best review app for Shopify and WooCommerce
- Why Gmail sends your self-hosted mail to spam
- htmx contact form that sends to another domain
- AI form builders tested, from prompt to sent form
- Headless WordPress forms with Contact Form 7, tested
- React Hook Form watch vs useWatch, and what gets sent
- Elfsight widget not working? It vanishes when views run out
- Jotform not sending emails? Check Jotform's bounce list
- Typeform not working? A white box means a blocked script
- Positive review response examples that don't sound copied
- How to remove a Google review when you can't delete it
- Google reviews not showing up? 8 causes to check in order
- Is buying Google reviews illegal? Even a review swap counts
- Which reviews can you hide? A review moderation checklist
- Average star rating: what 4.8 from 5 reviews means
- Reviews on a product page: where and how many to show
- SaaS testimonials: 3 of 27 had a number in them
- Do reviews reduce returns? Not when they're too good
- Testimonial examples for business: what makes one believable
- Testimonial questions to ask clients, by type of business
- Testimonial page design: a page or a section?
- Testimonial advertising rules: what the FTC requires
- Form submission canceled because the form is not connected
- Input type date format dd/mm/yyyy: what you can change
- How to disable textarea resize, or allow only vertical
- How to prevent Enter from submitting a form
- form.submit() vs requestSubmit(): what submit() skips
- Custom HTML checkbox CSS that doesn't break required
- How to reset a form after submit, and what reset() keeps
- Input type number maxlength not working? What to use
- How to create an HTML form, step by step
- Best form builder: free plans and branding, checked
- Best WordPress contact form plugin: 10 free ones compared
- How to increase form conversion rate: start with the count
- Form backend vs form builder: which one do you need?
- WordPress contact form not sending email? 3 plugins tested
- Contact Form 7 webhook? Turning it on switched our email off
- Gravity Forms webhook: what it sends and the URLs it rejects