Custom Shopify contact forms without an app
Shopify's contact form emails each message to your store and keeps nothing. Add a custom form in a Custom Liquid section for file uploads, product inquiries and a searchable inbox, without installing an app.
Free for 100 submissions a month, no credit card. Updated
Shopify themes come with a contact form built on {% form 'contact' %}. Shopify emails each message to your store's contact address, with hCaptcha checking for bots by default. The admin has no list of submissions, so a missed or deleted email is a lost message, and the form can't take a photo of a damaged order or a sketch for a custom piece.
If you only need more fields
You may not need anything else. Shopify's own form accepts extra inputs named contact[...], and each label shows up in the email:
{% form 'contact' %}
<label for="contact-email">Email</label>
<input id="contact-email" type="email" name="contact[email]" required>
<label for="contact-order">Order number</label>
<input id="contact-order" type="text" name="contact[Order number]">
<label for="contact-body">Message</label>
<textarea id="contact-body" name="contact[body]" required></textarea>
<button type="submit">Send</button>
{% endform %}contact[email] is the only field Shopify requires. Every other name has to be unique within the form.
When you need a custom form
A Nisuform form in a Custom Liquid section helps when you need the things Shopify's form doesn't do. Customers can attach up to 5 photos or PDFs on Pro. Every submission stays in an inbox you can search and export, so a deleted email doesn't lose a customer's message. You can run separate forms for wholesale, returns and custom orders, each with its own inbox. On Pro, each form can also post to Slack, Discord, Google Sheets or a webhook.
You don't install an app, and nothing runs in your store's admin.
Design the form
Create a form in Nisuform. Add your fields in the form builder, pick a theme and accent color to match your store, and save.
Copy the embed code
On the form's Setup tab, choose Site builder, pick any builder in the list and choose Copy the embed code. The code is the same for all of them.
Add a Custom Liquid section
In your Shopify admin, go to Online Store, Themes, Customize. Open the page template where the form goes, add a Custom Liquid section, paste the code and save.
Send a test
Open the page on your storefront, wait two seconds and send. The submission should be in your Nisuform inbox and your email within seconds.
A product inquiry form
A Custom Liquid section on a product template can read the product it's shown on. This form sends the product's name and link with every question, and fills in the email of a signed-in customer:
<form action="https://api.nisuform.com/s/YOUR_FORM_KEY" method="POST">
<input type="hidden" name="product" value="{{ product.title | escape }}">
<input type="hidden" name="product_url" value="{{ shop.url }}{{ product.url }}">
<label for="inquiry-email">Email</label>
<input id="inquiry-email" type="email" name="email" value="{{ customer.email }}" required>
<label for="inquiry-message">Question about {{ product.title | escape }}</label>
<textarea id="inquiry-message" name="message" rows="4" required></textarea>
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off" style="display:none">
<button type="submit">Ask a question</button>
</form>Each question lands in your inbox with the product attached, so you can answer without asking which item they meant. The form posts without JavaScript, and customers see the Nisuform thank-you page afterwards. On Pro, a redirect can send them back to your store instead. For file uploads, add enctype="multipart/form-data" to the form and a file input with a name.
Lock it to your store
Add your myshopify.com address and your custom domain, with and without www, to the form's allowed websites. Other sites then can't post to your endpoint. Shopify's hCaptcha doesn't cover a form that posts elsewhere, so spam is filtered on the Nisuform side with a honeypot, a fill-time check, rate limits, and link and duplicate checks. If spam still gets through, turn on Cloudflare Turnstile.
What you get with Nisuform
Free covers 100 submissions a month across 3 forms. Pro is $10 a month for 5,000 submissions and adds the features marked Pro.
Spam filtering on every plan
A honeypot, a fill-time check, rate limits and duplicate checks run on every submission, with optional Cloudflare Turnstile or Google reCAPTCHA. Spam never counts toward your limit.
An email for every submission
You get an email within seconds of each submission. Reply-to is set to the visitor, so you can answer from your mail app.
Every submission kept
Search, star and export to CSV. Submissions stay until you delete them, so a missed email never loses a message.
File uploadsPro
Up to 5 images or PDFs per submission, stored privately and shared through links that expire.
Slack, Discord, Sheets and webhooksPro
Send each submission to Slack, Discord, Telegram or Google Sheets, or anywhere else with signed webhooks, Zapier or Make.
Auto-repliesPro
Send each visitor a confirmation in your own words, from your own sender name.
Shopify guides
Frequently asked questions
Where do Shopify contact form submissions go?
Shopify emails each one to your store's contact address. The admin has no list of contact form submissions, so if an email is missed or deleted, the message is gone. A Nisuform form keeps every submission in an inbox you can search and export.
How do I add custom fields to the Shopify contact form?
In your theme's contact form, add inputs named contact[Your label], like contact[Order number]. Each label shows up in the notification email and has to be unique within the form. The email field, contact[email], is the only one Shopify requires.
Can customers upload files through the Shopify contact form?
Not through the theme's contact form, which doesn't handle file uploads. A Nisuform form on Pro accepts up to 5 JPEG, PNG, WebP, GIF or PDF files per submission.
Do I need a Shopify app for a custom contact form?
No. Any Online Store 2.0 theme with a Custom Liquid section can hold a custom HTML form. Nothing is installed in your store, and the form posts to the Nisuform endpoint.
Will Shopify's hCaptcha protect a custom form?
No. Shopify adds hCaptcha to its own storefront forms, and a form that posts to another endpoint isn't one of them. Nisuform filters spam on its side with a honeypot, a fill-time check, rate limits and duplicate checks. If spam still gets through, you can turn on Cloudflare Turnstile.