The inquiry that never arrived: why a contact form can fail without warning
A form can say thank you and save nothing. How we discovered that a website had been losing inquiries without a trace, and the simple rule that keeps it from happening again: save before you send.
Most forms are built backwards: they send an email and save nothing. If that send fails, the visitor sees the thank-you anyway and the inquiry vanishes without a trace. The rule that prevents it is just one: save first, send after.
Someone visited a client's website, filled out the contact form and hit send. Instead of a thank-you, a server error message appeared on the screen.
That's what tipped us off. A visitor seeing an error.
What was happening underneath was worse than the ugly message: the form tried to write a counter file before doing anything else, couldn't, and crashed right there. The inquiry wasn't saved anywhere. And on top of that, the error displayed the server's internal path on screen.
The problem wasn't the error. It was not knowing how long it had been going on
We looked back and found no way to know how long it had been like that.
There's no record of an inquiry that wasn't saved. An error you can see warns you; an inquiry that got lost warns you of nothing. It doesn't show up as an error in any report, it doesn't show up as zero, it doesn't show up.
If the email notification was also failing —and we had no way of checking— there were people who wrote in asking for a quote and nobody ever found out.
That client didn't have a form problem. They had a sales problem they didn't know existed.
Almost every form is built backwards
This isn't a rare case. It's how most of the forms we come across work.
The usual order is: someone fills it out, the site puts together an email, sends it, and that's it. The inquiry exists only as that email. If the send fails —because the account bounced, because the provider flagged it as spam, because a credential expired— the inquiry isn't left anywhere.
It's a single point of failure, and a silent one at that. Nobody finds out that inquiries stopped coming in. They find out when a slow month goes by and they blame the market.
Save before you send
The rule we apply is a single line, and it changes everything:
First the inquiry is saved. Then the email is attempted.
If the email fails, the inquiry is already saved and the failure is logged so it can be retried. You can lose the notification; you can't lose the customer.
On the form we rebuilt, we didn't take that order for granted: we measured it. We sent a test inquiry and checked against the records that it was saved before the email went out. An order that's written in the code but that nobody verified is an intention, not a guarantee.
How to check yours in five minutes
You don't have to take our word for anything. Do this:
- Go to your own website and fill out the form as if you were a customer.
- Check that the email arrives. If it doesn't, you've already found something.
- And now the question that matters: where was that inquiry saved, besides the email?
If the only answer is "in my inbox," you have the same problem this client had. It just hasn't shown up yet.
A fourth step, if you want to go deeper: ask whoever built your website to show you the inquiries from the last three months. Not the emails: the inquiries. If that place doesn't exist, neither do they.
What we learned
That a form that works and one that fails look exactly the same from the outside. Both show the same button.
That's why, ever since, on every website we deliver, we test the form end to end before calling anything finished: it gets filled out the way a visitor would, we check that the inquiry was recorded, and only then do we look at whether the email arrived. In that order, which is the same order the system works in.
Looking at the code isn't enough. You have to send the inquiry and go find it.
Want us to check yours?
If you're unsure whether your website is losing inquiries, we'll take a look. It's a quick check, and we'll tell you what we find, straight up.
The diagnosis is free. We'll be in touch soon.
We solve this in Websites →
