What breaks

Form validation error: find the rule at fault

Your form says an entry is wrong when you know it is right. Mimiq sends simulated visitors through the same fields, so you can see which rule rejects them and what the message says.

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

Why does my form show a validation error for valid input?

A validation error on valid input usually comes from a rule that is stricter than the data people type: a phone pattern that allows digits only, an email check that rejects a plus sign, or a name rule that needs a space. The message can also come from the browser, from a trailing space the rule never trims, or from the server, which runs its own check after the page sends the form. Send the same entries through the form and read the message and the network response to see which layer rejected them. A simulated visitor types each entry on a phone and shows the message it reached.

What this looks like in a report

Who
Yusuf, a homeowner asking for a quote on a house extension
How they arrived
Opened the second result for house extension architects on his phone
Where they stopped
Inquiry form, after typing the phone number with a country code

“I typed my number the way I do on my phone, with the country code and a space. The form said Invalid and didn't say which box. I deleted the space, it failed again, and I gave up.”

The fix. Accept spaces, dashes and a leading plus in the phone field, strip them before the digit check, and show the rule in words beside the field. Trim whitespace from every text field before validation, and make the server accept what the page accepts.

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

The rule rejects input people really type

A rule written for one example rejects everyone who types something else. An email check that forbids a plus sign turns away someone who uses a plus address to sort their mail. A phone field that accepts digits only rejects a number with a space after the country code, which is a common way to write it on a phone. A name field that needs two words rejects a single name, and a surname with an apostrophe fails a rule that allows letters only. The owner tests with a clean address and a clean number, so the form looks correct from the inside.

  • Type a plus address, a number with spaces, and a single name, and note which entry the form rejects.
  • Look at the field in the Elements panel for a pattern attribute or a validation function.
  • Add a trailing space to a value that passes, then submit it. A failure means the value is not trimmed.
  • On submit, open the Network tab and read the response body for a field name and a rule.
  • Compare the message in Chrome and in Safari, since the browser's own wording differs by browser.

Where the rule goes wrong, field by field

The four entries on this list are common, and each one breaks a different kind of rule. A plus sign in an email address is valid under the email standard, but some forms still treat it as an error because a rule copied from an old example never allowed one. A phone field that allows digits only fails on spaces, on a leading plus and on dashes. A name field that requires a space fails a single name, and a letter-only rule fails an apostrophe. A form that passes the owner's clean sample usually has rules written for that sample alone.

Browser, page script, trailing space or server

Start by finding where the message comes from. A message that appears while you type, or as soon as you leave a field, came from the page's own script, so look for a pattern attribute or a validation function on that input in the Elements panel. A pattern attribute is checked by the browser before the form is sent, and the wording belongs to the browser, so the same entry can get different text in Chrome and in Safari.

A message that appears only after Send can come from the browser's check on submit or from the server. Open the Network tab, press Send, and read the response. A 400 or 422 status whose body names a field means the server rejected what the page sent, so fixing the page alone changes nothing. A trailing space is a separate cause. Phone keyboards can add a space after an autocomplete suggestion, and a rule that does not trim the value fails on it. Add a space to a value you know is valid, submit it, and watch whether the message changes.

Run the same entries the way a stranger types them

Make a short list before you test: a plus address, a phone number with spaces and a country code, a name with an apostrophe, a single name, and a value with a trailing space. Send each one through the form and note which message appears and beside which field. A simulated visitor types these entries on a phone-width browser, reads the message the form shows, and reports the step where it stopped, with a screenshot of the message beside its field. That gives you the exact text a stranger has to act on, which is the part a fix has to change.

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 country code or email rule can reject the next visitor

A new country on the phone list, a stricter email check or a field added later can reject entries that passed last month. Rerun the same short list after each change to a rule, and let the GitHub Action run it on each preview deploy. With paid credits, visitors can reach a protected preview through a site password or a preview bypass, so the check does not wait until the page is public.

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

Should a form accept anything and check later?

Accept what people commonly type, and reject only what cannot work. For a phone field, allow a leading plus, spaces and dashes, then count the digits. For email, use the browser's email type and let the mail server make the final call, since a stricter pattern that rejects a real address costs you the lead.

Why does my form pass in Chrome and fail on my phone?

Phone keyboards can add a trailing space through autocomplete, and mobile browsers word their own messages differently. Type the same entry on the phone itself, then copy what the field holds and test that value on a laptop. A simulated visitor on a phone-width browser does the same and records the message it reached.

Can a test tell me which rule rejected the entry?

It shows the step, the message text and a screenshot, and it records failed app requests on that step. It cannot read your code, so the pattern or validation function is still a look in the Elements panel. It does not predict how many visitors would hit the rule, only that the form stopped there.

Should the error say what is wrong or just that it is wrong?

Say what is wrong, in words, next to the field. Use digits only, with an optional plus at the start is an answer a visitor can act on. Invalid phone is not. Show the rule before the visitor types, so the first error is not their first sight of it.

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 .