What breaks

Form submission error: find the rule it breaks

The visitor fills in the form, presses Send, and sees the same error box again. Mimiq shows which field and which rule sent it back there, from a simulated visitor run.

5 visitors try to .
First test free with an accountRun it from your coding agent

What causes a form submission error every time?

A form shows a submission error on every press when the server rejects the same values each time, or when the server fails on every request. Check the response in the Network tab: a 400 or 422 with a list of fields means a rule rejected specific input, a 403 means the request was refused as a whole, and a 500 means the server failed. A simulated visitor types the inputs real people use and reports the error box, the step where it appeared and a screenshot.

What this looks like in a report

Who
Ines, booking a grooming slot for a rescue puppy
How they arrived
Clicked a Facebook ad for a dog grooming salon
Where they stopped
Booking form, after typing a phone number and pressing Send

“I typed my number with spaces and a plus sign for abroad, the way I always do. Send says something went wrong. It does not say which box is the problem, so I gave up and booked somewhere else.”

The fix. Accept phone numbers with spaces, dashes and a leading plus sign, and strip them on the server before the rule runs. Replace the generic error with the field name and the rule it broke, shown beside that field.

An illustration. Run a test to see your own.See a real sample report

The same value fails on every press, and the message hides why

The form checks what it can see. The server checks more: a phone format, a length limit, a file size, a security token that has expired. When the server rejects a value, most forms return one generic message, so the visitor gets the same box for every rejection. The visitor changes what they think is wrong, presses Send, and gets the box again, because the value they changed was not the one that failed. Inputs that look normal to you can still break a rule, such as a leading plus sign, an accent in a name, or a long pasted address.

  • Open the Network tab, press Send, and read the status code on the request to the form's address.
  • Does the response body name a field? A list of field names points to a rule that rejected those values.
  • Try a phone number with spaces, a plus sign and a country code. Does the error change?
  • Leave the form open a long time, then submit. A stale security token can be rejected even when the values are correct.
  • Is the same error text used for every failure? If yes, the visitor cannot tell what to change.

What the visitor sees each time they press Send

The error box appears on every press, and it looks the same whatever went wrong. The visitor corrects something they think is wrong, presses Send again, and gets the same box. After a few tries they stop. The owner sees a run of attempts in the server log with no matching lead. Because the message is generic, the visitor cannot tell whether the problem was the phone number, a missing field, a file that was too large or the server itself. The form is doing what it was built to do, and the way it reports failure hides the reason.

Status codes separate a rule from a crash

Open the Network tab, press Send once, and click the request to the form's address. The status code and the response body tell you which kind of failure you have. A 400 or 422 with a list of field names means the server rejected specific values, so the fix is a rule or a message. A 413 means the request was too large, usually because of a file attachment. A 403 means the server refused the whole request, which often points to a security token that was not accepted. A 500 means the server failed while handling the request, so changing the values will not help.

Wrong and right error text

The wrong message is 'Something went wrong. Please try again.' It repeats after every press and names nothing. The right message is 'Phone number: remove the letters. Spaces, dashes and a leading plus are fine.' It sits beside the phone field, so the visitor knows which box and which rule. Do the same for a file box: 'This file is too large to send. Choose a smaller PDF' beside the upload, not one general line under the button. A message that names the field also tells you which rule to check first in the code.

Forms left open too long and the expired token

A form loaded in one tab and submitted much later can carry a security token that the server has since replaced or expired. The visitor sees the same generic error each time, because the token in the page never changes. Reloading the page fixes it, but a visitor who does not know to reload stays stuck. Fix it in the form: issue a fresh token when the page is loaded or when the form is focused, and when the server reports a stale token, show a message that asks the visitor to refresh the page and keeps the values they typed.

What you get with Mimiq

  1. 01

    Run it by hand, or on every pull request

    Paste a link and a task in the app and watch the visitors work. Or run them on every preview deploy: the GitHub Action comments on the pull request, any other CI can call the MCP endpoint, and your coding agent can run it too.

  2. 02

    Bugs and usability problems in one report

    The browser records errors and failed or slow requests on the step they happened. The visitors say where the wording or the steps confused them, and where they left.

  3. 03

    Visitors that behave like your audience

    Each visitor is a different profile with a reason to be there, matched to who the page is for, described by you, or built from your own customers.

  4. 04

    A prompt to fix each problem

    Every problem comes with a fix to paste into Cursor, Claude Code, Lovable or any coding agent, and one prompt hands over the top problems at once. Then send the same visitors through again.

  5. 05

    Follow every visitor

    See each visitor's whole path, step by step with screenshots, and what it was thinking at every step. Ask any visitor a question.

The browser records relevant JavaScript errors and failed or slow app requests encountered during the run, attached to the step where they occurred. The visitors are simulated: they find problems, they do not predict how many real people will convert.

A new validation rule can reject values the old form accepted

A rule added in one release, such as a stricter phone format or a shorter field limit, can reject values that passed last month. Rerun the same simulated visitors after each change, including visitors who type the awkward inputs: a leading plus, a space, an accent in the name. If the form sits behind a login, test it with a test account, and check each preview deploy before it goes live.

Starter

Try it on one launch

$9 once
120 credits, never expire

About 4 tests of 5 visitors

  • Visitors on your landing page, signup and checkout
  • Where they left and why, with a fix to copy for each problem
  • Run it in the app or on every pull request
  • Ask any visitor a question, included
  • Test accounts and protected previews
Buy 120 credits

Builder

Test every build

$19 a month
500 credits every month

About 20 tests of 5 visitors

  • Everything in Starter
  • Credits refill each month, and what is left rolls over once
  • Cancel anytime
Choose Builder

Pro

Test every release, as a team

$49 a month
1,500 credits every month

About 60 tests of 5 visitors

  • Everything in Starter
  • Credits refill each month, and what is left rolls over once
  • Cancel anytime
Choose Pro

Scale

Test at scale, every day

$149 a month
6,000 credits every month

About 240 tests of 5 visitors

  • Everything in Starter
  • Credits refill each month, and what is left rolls over once
  • Priority support
  • Cancel anytime
Choose Scale
$0for your first test, with a free account (Google sign-in, no card). It includes 50 credits, enough for 10 visitors. After that a visitor uses 5 credits, and packs start at $9 for 120 credits.
See a sample report

Questions

Is the error coming from my page or my server?

Look at the request. If no request to the form's address appears, the message came from the page's script. If the server answered, its status code and response body show that the server made the call. A simulated visitor's report lists each failed request with its step and a screenshot, so you can see which of the two it was without reading the code.

Why does my own test pass when visitors still see the error?

A clean run only proves the values it typed. If your test uses a plain phone number and a short name, the rule that rejects a leading plus never runs. Give the visitor the inputs real people type, such as spaces, accents and a country code, and the report will show the rule that fires.

Does this test show how many visitors hit the error?

No. It shows that the error appeared for the visitor who ran, at the step it ran, with the response it got. It does not predict how many real visitors would send the same values. For the share of people who hit the error, use your server logs and your form analytics, and count the failed submits.

Should the error appear near the field or at the top of the form?

Near the field that broke, and say which rule it broke. An error at the top of a long form is easy to miss on a phone, where the visitor is looking at the button. Keep one general line for failures you cannot name, such as a server crash, and tell the visitor what to do next.

Keep reading

Send visitors and see what breaks first.

Your first test is free: sign in with Google and it starts right away. Last checked 2026-11-02.

5 visitors try to .