Quote requests that arrive with everything you need to answer them
When every enquiry comes through the contact form, the first reply is always a list of questions. A form built for the request saves that round trip.
A message arrives through the contact form: "Hi, can you do a price for the blue ones for our office? Thanks, Sam." Which blue ones? How many? Is Sam buying for a company that needs a VAT invoice, and by when do they need them? Your first reply is a list of questions, Sam answers two of them a day later, and the quote goes out on day three. Some people never answer at all.
The fix is not a cleverer inbox. It is asking the right questions on the way in, so the first message already holds what you need to reply with a price.
What Magento's contact form does
Magento's built-in contact form has four fields: name, e-mail, telephone and a comment box. When someone sends it, Magento e-mails the message to the address set under Contacts in the configuration, and that is all1. The message is not stored in the database, there is no list of enquiries in the admin, and there is no status to show that someone has replied.
For a general "get in touch" link that is fine, and plenty of stores never need more. It stops being fine when a type of enquiry keeps coming back with the same missing details, or when several people share the inbox and nobody knows which messages have been answered.
Before building any form, write down what you need to send a useful quote. For a typical trade enquiry that might be: business or private customer, VAT number for businesses, which product range, approximate quantity, a date, and room for anything else. Each of those becomes a field, and anything you do not need stays off the form. Every extra required field costs you some enquiries.
Then think about who sees which questions. A private customer should not be asked for a VAT number. A form that shows the VAT field only when the visitor chooses "A business" is shorter for everyone and still gets you the number when it matters.
Building it with Custom Form Builder
Custom Form Builder is our module for this. You build forms in the admin under CommerceGears > Custom Forms > Forms, either from a blank form or from one of the templates: contact form, product enquiry, a three-step quote request and a feedback survey. Field types are dragged onto the form or added with a click: text, text area, e-mail, phone, number, date, dropdown, radio buttons, checkboxes, multi-select, country, star rating, file upload, consent checkbox, hidden value and a text block for explanations.

The quote example above uses the features that matter most for enquiries:
- Conditional logic: the VAT number field is shown only when "You are buying as" is "A business". Rules can use is, is not, contains, is empty, greater than and less than. A hidden field is not required, and its value is not stored even if someone posts one.
- Pages: longer forms can be split into steps with a progress bar, and the answers are kept when the visitor goes back.
- Rules per field: required, minimum and maximum length, number and date limits, or your own pattern with its own error message. The server repeats every check, so a form cannot be sent around them.
- Default values with placeholders: a hidden field set to
{product.sku}records which product page the enquiry came from, and{customer.email}pre-fills the address for signed-in customers.
A form can have its own page at /forms/<url-key>, sit inside a CMS page or block as a widget, or open in a popup from a button such as "Request a quote" on a product page.
What happens after someone presses Send
This is where a form builder earns its keep over the contact form. Every submission is stored and listed under CommerceGears > Custom Forms > Submissions, with filters by form, status and date. You open a submission, read the answers with the labels as they were when it was sent, and download any uploaded files. You can set it to Answered, keep an internal note, and send a reply by e-mail from the submission itself. The reply is kept with the submission, and signed-in customers see their submissions and your replies under My Form Submissions in their account.
Each form can e-mail its own staff recipients, so quote requests can go to sales and returns questions to the warehouse. The notification's Reply-To is the customer, so answering from your mail program works too. The CSV export has one column per field, which helps if quotes are prepared in a spreadsheet.
There is also an automatic "we have received your message" reply. We left it off by default and kept the default template free of the visitor's answers, because a public form that sends copies of whatever was typed into it can be abused to send spam from your store's address. If you switch it on, we recommend Google reCAPTCHA as well.
Spam, files and personal data
Any public form attracts bots. The module uses a hidden honeypot field, a minimum time before the form can be sent, and a limit of submissions per IP address per hour (the IP address is stored only as a keyed hash). When Magento's Google reCAPTCHA modules are installed and configured, forms can use reCAPTCHA v2 or v3. The time check runs in the browser, so treat reCAPTCHA as the real defence on a busy form.
Uploads are limited to a list of document and image types per field, the file content must match its extension, and files are stored outside the public web folder under random names. Only admin users with the download permission can open them.
Enquiries contain personal data, so the module has a consent checkbox field that stores the exact consent text with the answer, and a retention period per form or for all forms, after which a daily job deletes old submissions with their files. Customers can delete their own submissions if you allow it. What your consent text says and how long you keep enquiries is your decision; the module only carries it out.
When it is not the right tool
Forms need JavaScript in the browser, because the time check and the conditional logic run there. They cannot be placed in the checkout, and on Hyvä they work on normal pages but not in Hyvä Checkout. There is no PDF export, analytics dashboard or connection to mailing list services in this version; there is a browser event after a successful submission that you can hook into for analytics.
If all you need is one contact form with name, e-mail and message, Magento's own form is enough. If the same follow-up questions keep going out, a form that asks them first is usually the cheaper fix.
The Custom Form Builder page lists every field type and setting, with screenshots of the builder and the forms on Luma and Hyvä.
Sources
- Magento Open Source 2.4.9 source code,
app/code/Magento/Contact/view/frontend/templates/form.phtml(fields name, email, telephone, comment) andController/Index/Post.php(sends the e-mail; no storage), checked 12 October 2026. ↩
From our shop