Shopify contact forms
without a custom app.
Add a storefront form in Liquid and let Form Plume handle the backend: email notifications, stored messages, spam filtering, file uploads, integrations, and signed webhooks without touching checkout or customer accounts.
<form
action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE"
method="post"
enctype="multipart/form-data"
>
<input type="hidden" name="shop" value="{{ shop.permanent_domain }}">
<input type="hidden" name="page" value="{{ request.path }}">
<label for="ContactName">Name</label>
<input id="ContactName" name="name" autocomplete="name" required>
<label for="ContactEmail">Email</label>
<input id="ContactEmail" name="email" type="email" autocomplete="email" required>
<textarea name="message" rows="5" required></textarea>
<button type="submit">Send message</button>
</form>The full guide
A storefront-safe backend for Shopify forms.
Use Custom Liquid or theme templates to collect support, product, and wholesale inquiries while keeping private customer data out of unnecessary workflows.
- 1Create your Form Plume accountStart free and give your Shopify form a hosted endpoint for email, submissions, spam filtering, uploads, integrations, and webhooks.Start free
- 2Create the form and copy the endpointCopy the endpoint URL from Form Plume. It looks like
https://api.formplume.com/f/your-slug - 3Connect it inside ShopifyAdd the endpoint to a Custom Liquid section, a page template, or a contact template that you control in the Online Store theme. Preview the theme, submit from the storefront, and confirm customer data and uploads arrive where expected.
You can use this AI prompt to hand the platform-specific wiring to an assistant without accidentally creating a backend.
Keep storefront contact separate from customer accounts
Shopify already has customer accounts, checkout, and order workflows. A marketing or support contact form usually should not mutate any of those records just to send a message.
Use Form Plume when you want a storefront form that sends email, stores submissions, filters spam, accepts files, and triggers integrations or webhooks without building a Shopify app or backend proxy.
Add the form in Online Store theme code
For a controlled implementation, add a Custom Liquid section or a page/contact template in the Online Store theme.
<form
action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE"
method="post"
>
<input type="hidden" name="shop" value="{{ shop.permanent_domain }}">
<input type="hidden" name="page" value="{{ request.path }}">
<label for="ContactName">Name</label>
<input id="ContactName" name="name" autocomplete="name" required>
<label for="ContactEmail">Email</label>
<input id="ContactEmail" name="email" type="email" autocomplete="email" required>
<label for="ContactMessage">Message</label>
<textarea id="ContactMessage" name="message" rows="5" required></textarea>
<button type="submit">Send message</button>
</form>The Liquid variables are optional context fields. They make it easier to see which storefront and page generated the message when the same endpoint is reused across environments.
Be careful with page and contact templates
Shopify themes may already include a native contact template that posts through Shopify's contact flow. If you replace that form, make sure the new markup is the one visitors actually see.
If you add a Custom Liquid section, keep it on a page where theme editors can find it. If the form belongs in a product inquiry flow, include hidden fields for product, variant, or collection only when that context helps the team respond.
Test in a theme preview before publishing, then test again on the live storefront. Theme previews are good for layout, but email, redirects, and third-party scripts deserve a real storefront check.
Respect customer privacy
Ask only for what the support or sales team needs. For most stores, name, email, order_number, subject, and message are enough.
Do not send payment details, full addresses, account passwords, or unnecessary customer metadata through a contact form. Form Plume can store the submission and route it to integrations, but the best privacy posture is still fewer fields.
Handle file uploads with a plain form
Shopify's built-in contact blocks may not support the file workflow you need. A plain multipart form does.
<form
action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE"
method="post"
enctype="multipart/form-data"
>
<label for="Photo">Photo or receipt</label>
<input id="Photo" type="file" name="attachment" accept=".jpg,.png,.pdf">
<button type="submit">Send</button>
</form>Form Plume stores files separately from notification email delivery, so support can review attachments without depending on email attachment limits.
Route accepted messages into the right tools
A Shopify contact form often needs more than an inbox. Send product questions to Slack, warranty requests to Google Sheets, newsletter requests to Mailchimp or ActiveCampaign, and operational workflows to signed webhooks.
The storefront still submits once. Form Plume handles the fan-out after spam filtering so your team does not maintain Shopify app infrastructure for a basic contact flow.
Primary sources
FAQ
Shopify form questions
before theme publish.
One line. Zero backend.
