What happens on your contact form

Last updated October 27, 2026

For most small businesses the contact form is the point of the website. The service pages, the photos and the reviews are all there to get one person to press Send.

Ask an owner how the form is doing and you'll usually get two numbers: how many people visited the contact page, and how many messages came in. What happened in between is a blank. Somebody opened the page, started typing, and maybe got stuck on the phone number. You'll never hear about it. Nobody writes to tell you they couldn't write to you.

Here's how to see inside that blank without reading anything your visitors type.

A form can fail and say it worked

When someone presses Send, does the message reach you?

The form itself often can't tell you. When we tested WPForms Lite with its email switched off, it still showed the visitor its thank-you message. The email that was supposed to reach the owner never went. As far as the visitor knew, they'd been in touch. As far as the owner knew, nobody had.

That isn't a WordPress problem in particular. Between Send and your inbox there's spam protection, the form's own checks, your site sending an email, and your email provider deciding whether to trust it. Any of them can drop a message quietly. Send yourself a message from a phone, as a stranger would, and see where it ends up. We've written up the full test.

A test shows the form worked once, for you. It says nothing about the next hundred people.

Five ways a form loses people

There are five ways a form loses people, and each one has its own fix. A single conversion rate shows you're losing people, but not where.

They see it and never start. The form is on the screen and nobody touches it. The fields are rarely the problem here. The ask is. Maybe the page hasn't earned it yet, or the form looks like more work than the visitor wants to do right now.

They start and stop at one field. People type a name and an email, reach "Phone", and leave. That's a question they don't want to answer, or one they don't see why you need. If one field loses more people than any other, ask whether you need it, or whether it could be optional.

They get an error on one field. This is different from stopping, and so is the fix. A phone field that only accepts ten digits with no spaces turns away someone who types "(555) 123-4567". An email check that's too strict rejects real addresses. The visitor was willing; the form said no.

They press Send and it doesn't go. Spam protection decides they're a robot, or a required field they didn't notice is empty, or the server fails. From the visitor's side, the button did nothing.

Phones do worse than computers. If people on phones finish your form far less often than people on computers, fill it in on your own phone before you touch the questions. Small fields, a keyboard that covers the button, or a date picker that fights your thumb can all do it.

You can only tell these apart field by field. Knowing that, say, 40 people started and 12 sent doesn't tell you which of the five you've got.

What we read, and what we never read

Field by field sounds like session replay, the tools that record every keystroke and mouse movement and play your visitors back to you. Nodium isn't that, and the difference is specific.

From a form, Nodium's script learns:

  • the form's name and the page it's on;
  • each field's label and type, read once when the field is first found, from its label, or failing that its placeholder or name, never from what's inside the field;
  • whether someone went into a field;
  • whether a field was empty when they pressed Send;
  • whether a field showed an error;
  • whether the form was seen, started, sent or failed, and how we could tell.

That's the whole list. It doesn't read the text of an error message, because an error message can repeat back what someone typed. It skips password fields, hidden fields, payment fields and file uploads entirely. It leaves alone the trap fields that form plugins hide from people to catch spam bots. When a form lives in another company's frame, such as HubSpot or Typeform, the script notes what kind of message the frame sent ("started", "sent") and never keeps what was inside it.

We check this with a test that types marked text into a form's fields and searches everything the script sends for it. A test only finds what it looks for, so the rule that matters is in the code: a field is asked one question, "are you empty?", and nothing else.

None of this is stored on the visitor's device. No cookies, nothing in the browser's storage. The script keeps its notes in memory and sends them when the page closes or is hidden, or straight after a send.

How we know a form was sent

There's no standard way for a form to say it worked, so we listen for each platform's own way of saying it:

  • Contact Form 7, WPForms, Gravity Forms and HubSpot each fire their own event when a send succeeds or fails.
  • Typeform sends a message from its frame.
  • Webflow shows its "done" message, or its "failed" one.
  • Shopify adds contact_posted=true to the address after a contact form goes through.
  • A form that disappears, or empties itself, counts as sent if no error is showing. That's what Wix does.
  • The next page opening within 10 seconds of pressing Send counts as sent, if no error came first. This one can be fooled. Someone who presses Send, sees nothing happen and clicks away quickly looks the same, so we only use it when nothing better is there.

If none of these happens, the form is counted as seen and started, never as sent. We'd rather undercount your messages than claim one that didn't happen.

How sure are we of each? We've proven Contact Form 7 and WPForms end to end, sending real forms. Gravity Forms and HubSpot we've watched live without sending. For Wix, Squarespace, Webflow, Shopify and Typeform, we follow their own documentation. That's why Nodium doesn't ask you to trust the list. When you install it, it asks you to send your own form to yourself. Then it says plainly whether it counted the send, and how ("Contact Form 7 told us it was sent"). If it couldn't confirm the send, it says "We couldn't confirm your form was sent," says what to try, and keeps counting everything else about the form.

When the numbers are allowed to talk

Small numbers lie. If three people started your form this week and one quit at Phone, that's a third of them "stopping at Phone", and it means nothing.

So everything Nodium says about a form has a minimum, and below it, it says nothing:

What Nodium says about a form, and the minimum before it says it
It saysOnly once
Finish rate (sent out of started)30 people have started the form
More people quit at this field than at any other20 started, at least 3 stopped at that field, and more stopped there than anywhere else
People got an error on this field20 reached the field and 5 saw an error
Many saw the form, few started100 saw it, and fewer than 1 in 10 started
Phones finish less often30 started on phones and 30 on computers, and phones finish half as often or less

Every sentence shows its working. With made-up numbers, as an example:

More people quit your contact form at "Phone" than at any other field.

7 of the 19 who started it and didn't send it stopped at "Phone". 41 started it.

You can check that sentence yourself.

What it can't tell you

Field by field shows where people stop. It can't say why. It can show that people quit at Phone. It can't tell whether they don't want calls, or were filling it in on a lunch break and got interrupted. You still have to think about your own customers.

Some forms keep their fields out of reach. Jotform and Google Forms run inside frames that tell the page nothing about their fields, so for those we can say less. For forms split into steps, we see which fields people reached, not which step they were on.

And it only counts visitors the script reaches. Some ad blockers stop analytics scripts, Nodium's included. A browser that asks not to be tracked, with Do Not Track or Global Privacy Control, isn't counted at all. There's a way to reach the first group without ignoring the second: incomplete numbers are wrong numbers.

Where to start

Two things you can do this week, with no tool at all:

  1. Send yourself a message from your phone, on mobile data, as a stranger would. Check it arrives, and check your spam folder.
  2. Read your form as if you'd never seen it. For each field, ask whether you'd answer it for a business you hadn't hired yet. Cut what you don't need.

If you want to know what happens on your form when you're not the one filling it in, that's what Nodium does: every form on your site, found on its own, with nothing to set up. The 30-day trial is the full product, and it doesn't ask for a card.