Add a custom contact form to your Shopify store beyond the default contact page. Use Liquid templates with FormsList for full control over form fields and submissions.
TL;DR
To add a custom contact form to Shopify beyond the default contact page, add an HTML form to a Liquid template with action set to `https://formslist.com/f/your-form-id`. FormsList handles submissions outside Shopify's built-in form system.
Sign up for a free FormsList account and create a new form. Copy the endpoint URL. Using FormsList instead of Shopify's built-in contact form gives you custom fields, a submissions dashboard, integrations, and spam filtering.
Edit your Shopify theme to add a custom contact form. You can add it to a page template, a section, or create a new template. Go to Online Store > Themes > Edit Code in your Shopify admin.
{% comment %} sections/custom-contact-form.liquid {% endcomment %}
<div class="custom-contact-form" style="max-width: 600px; margin: 2rem auto; padding: 0 1rem;">
<h2>{{ section.settings.heading | default: 'Get in Touch' }}</h2>
<form action="https://formslist.com/f/YOUR_FORM_HASH" method="POST">
<div style="margin-bottom: 1rem;">
<label for="name" style="display: block; font-weight: 600; margin-bottom: 0.25rem;">Name</label>
<input type="text" id="name" name="name" required
style="width: 100%; padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px;" />
</div>
<div style="margin-bottom: 1rem;">
<label for="email" style="display: block; font-weight: 600; margin-bottom: 0.25rem;">Email</label>
<input type="email" id="email" name="email" required
style="width: 100%; padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px;" />
</div>
<div style="margin-bottom: 1rem;">
<label for="subject" style="display: block; font-weight: 600; margin-bottom: 0.25rem;">Subject</label>
<select id="subject" name="subject"
style="width: 100%; padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px;">
<option value="General Inquiry">General Inquiry</option>
<option value="Order Issue">Order Issue</option>
<option value="Product Question">Product Question</option>
<option value="Returns">Returns & Exchanges</option>
</select>
</div>
<div style="margin-bottom: 1rem;">
<label for="message" style="display: block; font-weight: 600; margin-bottom: 0.25rem;">Message</label>
<textarea id="message" name="message" rows="5" required
style="width: 100%; padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px;"></textarea>
</div>
<!-- Pass shop info as hidden fields -->
<input type="hidden" name="_source" value="shopify" />
<!-- Redirect back to a thank-you page -->
<input type="hidden" name="_redirect" value="{{ shop.url }}/pages/thank-you" />
<button type="submit"
style="padding: 0.75rem 2rem; background: #000; color: #fff; border: none; border-radius: 4px; cursor: pointer; font-size: 1rem;">
Send Message
</button>
</form>
</div>
{% schema %}
{
"name": "Custom Contact Form",
"settings": [
{
"type": "text",
"id": "heading",
"label": "Heading",
"default": "Get in Touch"
}
],
"presets": [
{
"name": "Custom Contact Form"
}
]
}
{% endschema %}In the Shopify theme editor (Customize), navigate to the page where you want the form and add the 'Custom Contact Form' section. Alternatively, reference it directly in a page template using {% section 'custom-contact-form' %}.
Submit a test message from your Shopify store and verify it appears in your FormsList dashboard. Enable email notifications to receive submissions at your support email. Connect Slack or Google Sheets for team visibility.
Add a fully functional contact form to any HTML website in under 5 minutes. No JavaScript frameworks, no server setup — just plain HTML that works everywhere.
Learn moreLearn how to process form submissions on any website without writing server-side code. Use a form backend service to receive, store, and forward submissions by email.
Learn moreSet up email notifications for every form submission on your website. Receive form data directly in your inbox without running a mail server.
Learn moreSet up your form backend in under a minute. No server required, no complex configuration — just a simple endpoint for your forms.