splitforms.com
8 SHOPIFY FORMS · NO APP REQUIRED · FREE FOREVER

A contact form for Shopify, ready to paste. No app. No monthly fee.

A contact form for Shopify is just an HTML form that posts straight to a hosted backend — no app, no theme editor plugin, no monthly fee. Paste one of the 8 templates below into a Liquid section or Custom HTML block with the action pointed at https://splitforms.com/api/submit, and every submission lands in your inbox and dashboard for free.

Eight production-grade templates are ready below — contact, product inquiry, wholesale, customer service, newsletter, order, refund, and contest — including Liquid sections that auto-inject product and shop context. Replace one access key, paste, ship.

No credit card. 500 submissions/month free with spam filtering and the dashboard included. Works on every Shopify plan, including Basic.

500/mo
Free submissions
8
Form templates
60s
To go live
$0
Monthly cost
contact-form.html

This is the form your Shopify customers will see

Clean, fast, no CAPTCHA. Try it — this is a real working demo.

What happens next ⚡

  • 📥Submission received — stored in your searchable dashboard
  • 📧Email notification — delivered to your inbox instantly
  • 🛡️Spam filtered — AI classifier + honeypot, no CAPTCHA
  • 🔗Webhook fired — optional: forward to Slack, Discord, Sheets
  • ↩️User redirected — to your thank-you page
Response time
14ms
median edge latency across 14 regions
Get Free Access Key →

500 submissions/month free · No credit card

On this page
  1. 01Contact form
  2. 02Product inquiry form
  3. 03Wholesale inquiry form
  4. 04Customer service intake form
  5. 05Newsletter signup
  6. 06Simple order form
  7. 07Refund request form
  8. 08Contest / giveaway entry
01 / 08

Contact form

For: Every Shopify store — the /pages/contact default

The classic three-field contact form. Paste into a Custom HTML block on any page (Online Store → Pages → HTML editor) or a Liquid section. Works on every Shopify plan, including Basic.

contact-form.liquid
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="hidden" name="subject" value="New contact from Shopify store" />
  <input type="hidden" name="redirect" value="https://your-store.myshopify.com/pages/thank-you" />

  <label for="sf-name">Name</label>
  <input id="sf-name" type="text" name="name" required />

  <label for="sf-email">Email</label>
  <input id="sf-email" type="email" name="email" required />

  <label for="sf-order">Order number (optional)</label>
  <input id="sf-order" type="text" name="order_number" placeholder="#1234" />

  <label for="sf-message">How can we help?</label>
  <textarea id="sf-message" name="message" rows="4" required></textarea>

  <!-- Honeypot spam protection -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />

  <button type="submit">Send message</button>
</form>
02 / 08

Product inquiry form

For: Product pages — shoppers asking about a specific item

A Liquid section that auto-injects the product title, product URL, variant ID, and price into every submission — so you always know which product a shopper is asking about. Drop it into a new section and add {% section 'product-inquiry-form' %} to your product template.

sections/product-inquiry-form.liquid
{% comment %} sections/product-inquiry-form.liquid — add to product template {% endcomment %}
<div class="product-inquiry">
  <h3>Ask a question about this product</h3>

  <form action="https://splitforms.com/api/submit" method="POST">
    <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />

    {% comment %} Auto-injected product context {% endcomment %}
    <input type="hidden" name="product"     value="{{ product.title }}" />
    <input type="hidden" name="product_url" value="{{ shop.url }}{{ product.url }}" />
    <input type="hidden" name="variant_id"  value="{{ product.selected_or_first_available_variant.id }}" />
    <input type="hidden" name="price"       value="{{ product.price | money }}" />
    <input type="hidden" name="subject"     value="Inquiry: {{ product.title }}" />

    <label>Your name <input type="text" name="name" required /></label>
    <label>Email <input type="email" name="email" required /></label>
    <label>Question <textarea name="message" rows="4" required></textarea></label>

    {% comment %} Optional newsletter opt-in (fire a webhook to Klaviyo) {% endcomment %}
    <label>
      <input type="checkbox" name="newsletter_optin" value="yes" />
      Email me when this product is back in stock or on sale
    </label>

    <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
    <button type="submit">Send question</button>
  </form>
</div>

{% schema %}
{
  "name": "Product inquiry form",
  "presets": [{ "name": "Product inquiry form" }]
}
{% endschema %}
03 / 08

Wholesale inquiry form

For: B2B / trade — separate sales pipeline from retail support

Capture qualified wholesale leads with business name, resale certificate, product interest, and monthly volume. Use a separate access key so wholesale submissions route to your sales inbox, not your support queue.

wholesale-inquiry.liquid
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_WHOLESALE_ACCESS_KEY" />
  <input type="hidden" name="subject" value="New wholesale inquiry" />

  <label>Business name <input type="text" name="business_name" required /></label>
  <label>Your name <input type="text" name="name" required /></label>
  <label>Work email <input type="email" name="email" required /></label>
  <label>Phone <input type="tel" name="phone" /></label>

  <label>Website / store URL <input type="url" name="website" placeholder="https://" /></label>

  <label>Resale / tax ID (optional)
    <input type="text" name="tax_id" placeholder="EIN or VAT number" />
  </label>

  <label>Products of interest
    <textarea name="products" rows="3" placeholder="Which lines or SKUs?"></textarea>
  </label>

  <label>Estimated monthly volume
    <select name="monthly_volume">
      <option value="">Select one</option>
      <option>Under 50 units</option>
      <option>50–250 units</option>
      <option>250–1,000 units</option>
      <option>1,000+ units</option>
    </select>
  </label>

  <label>Notes <textarea name="message" rows="3"></textarea></label>

  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Apply for wholesale</button>
</form>
04 / 08

Customer service intake form

For: Support — route to a help desk via webhook

A structured support intake with order number, issue type, description, and an optional photo attachment. Connect Storage to accept file uploads (5 files, 5 MB each), then point a webhook at Front, Help Scout, or Zendesk to auto-create tickets.

customer-service.liquid
<form action="https://splitforms.com/api/submit" method="POST" enctype="multipart/form-data">
  <input type="hidden" name="access_key" value="YOUR_SUPPORT_ACCESS_KEY" />
  <input type="hidden" name="subject" value="Support request" />

  <label>Name <input type="text" name="name" required /></label>
  <label>Email <input type="email" name="email" required /></label>

  <label>Order number (optional)
    <input type="text" name="order_number" placeholder="#1234" />
  </label>

  <label>Issue type
    <select name="issue_type" required>
      <option value="">Select one</option>
      <option>Defective product</option>
      <option>Wrong item shipped</option>
      <option>Shipping delay</option>
      <option>Refund request</option>
      <option>Sizing / fit</option>
      <option>Other</option>
    </select>
  </label>

  <label>Describe the issue
    <textarea name="message" rows="5" required></textarea>
  </label>

  <label>Photo (optional, helps us resolve faster)
    <input type="file" name="attachment" accept="image/*" />
  </label>

  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Submit request</button>
</form>
05 / 08

Newsletter signup

For: Footer / popups — push to Klaviyo or Mailchimp via webhook

Email-only signup for your store's mailing list. Pair with a webhook to push new addresses into Klaviyo, Mailchimp, or ConvertKit automatically — no separate signup app required.

newsletter-signup.liquid
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="hidden" name="list" value="newsletter" />
  <input type="hidden" name="subject" value="New newsletter signup" />

  <label for="ns-email">Get product drops & deals</label>
  <input id="ns-email" type="email" name="email" placeholder="you@domain.com" required />

  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Subscribe</button>
</form>
06 / 08

Simple order form

For: Pre-checkout orders, custom products, made-to-order

A lightweight order form for products that don't fit the standard cart — custom goods, made-to-order items, or wholesale line items. Collect the product, quantity, and customer details, then follow up with a draft order or invoice.

order-form.liquid
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="hidden" name="subject" value="New order request" />

  <label>Your name <input type="text" name="name" required /></label>
  <label>Email <input type="email" name="email" required /></label>
  <label>Phone <input type="tel" name="phone" /></label>

  <label>Product / item
    <input type="text" name="product" placeholder="What would you like to order?" required />
  </label>

  <label>Quantity
    <input type="number" name="quantity" min="1" value="1" required />
  </label>

  <label>Size / variant / options
    <input type="text" name="variant" placeholder="Color, size, material…" />
  </label>

  <label>Delivery date (optional)
    <input type="date" name="delivery_date" />
  </label>

  <label>Order notes <textarea name="message" rows="3"></textarea></label>

  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Request order</button>
</form>
07 / 08

Refund request form

For: Returns / RMA — structured intake for faster resolution

Capture everything support needs to action a refund in one pass: order number, refund type, reason, and the customer's preferred resolution. Cuts back-and-forth emails and speeds up resolution.

refund-request.liquid
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="hidden" name="subject" value="Refund request" />

  <label>Name <input type="text" name="name" required /></label>
  <label>Email <input type="email" name="email" required /></label>
  <label>Order number <input type="text" name="order_number" placeholder="#1234" required /></label>

  <label>Refund type
    <select name="refund_type" required>
      <option value="">Select one</option>
      <option>Full refund</option>
      <option>Partial refund</option>
      <option>Store credit</option>
      <option>Exchange</option>
    </select>
  </label>

  <label>Reason
    <select name="reason" required>
      <option value="">Select one</option>
      <option>Item arrived damaged</option>
      <option>Wrong item received</option>
      <option>Item not as described</option>
      <option>Changed my mind</option>
      <option>Arrived too late</option>
      <option>Other</option>
    </select>
  </label>

  <label>Tell us more <textarea name="message" rows="4" required></textarea></label>

  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Request refund</button>
</form>
08 / 08

Contest / giveaway entry

For: Marketing campaigns — grow your list with a giveaway

Run a giveaway or contest and collect entries cleanly. Captures name, email, and the entry answer, with an optional opt-in for marketing emails. Export entries from the dashboard or pipe them to a spreadsheet via the Google Sheets integration.

contest-entry.liquid
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="hidden" name="subject" value="New contest entry" />

  <label>Your name <input type="text" name="name" required /></label>
  <label>Email <input type="email" name="email" required /></label>

  <label>Answer to win
    <textarea name="entry_answer" rows="2" placeholder="In one sentence, why do you want to win?" required></textarea>
  </label>

  <label>
    <input type="checkbox" name="marketing_optin" value="yes" />
    Yes, send me product news and future offers
  </label>

  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Enter the contest</button>
</form>

Why not use a Shopify app?

Shopify form apps work, but they add JavaScript that slows your store, lock your submissions inside the app, and charge $5–29 every month. A paste-in form posts directly from the browser to splitforms — no app weight, fully exportable data, free up to 500 submissions per month.

FactorShopify appsplitforms
Monthly cost$5–29/mo$0 (500/mo free)
Store weightApp JS slows the storefrontZero — just HTML
CustomizationLimited to app settingsFull HTML & Liquid control
Data ownershipLocked inside the appExport anytime, your data
SetupInstall + configure appPaste one section, done

How to add a contact form to Shopify (no app)

01

Get your free access key

Create a splitforms account and copy your access key from the dashboard. The free tier includes 500 submissions per month with spam filtering — no credit card.

02

Paste a template into Shopify

Pick a template above. In Shopify Admin: Online Store → Themes → Edit code → Sections → Add a new section (or a Custom HTML block on a page). Paste it, replace YOUR_ACCESS_KEY with your key, save.

03

Test it once, live on the store

Open the page and submit the form yourself. The botcheck honeypot stays empty for real visitors, so a genuine test submission should arrive within seconds — if it doesn't, double-check the access key.

04

Submissions land in your inbox

Every submission is emailed to you free on every plan and saved in the dashboard with spam filtering applied. Add a webhook or the Slack, Google Sheets, or Mailchimp integration to route it further.

Frequently asked questions

Can I add a contact form to Shopify without an app?

Yes. Create a custom Liquid section or a Custom HTML block on a page, paste an HTML form with the action pointing at splitforms, and submissions are collected without any Shopify app or plugin. It works on every Shopify plan, including the cheapest Basic tier — no Shopify Plus required.

Do these forms work on Shopify's Basic plan?

Yes. The forms are pure HTML and Liquid placed in your theme — they do not call Shopify's billing or app APIs, so they run on every plan. You do not need Shopify Plus or any premium tier.

Should I use a Liquid section or plain HTML?

Use a Liquid section (a .liquid file under Sections) when you want Shopify to inject context automatically — product title, variant ID, price, or shop URL. Use plain HTML in a Custom HTML block when you just want a simple form on a page and do not need dynamic Liquid values. Both post to the same splitforms endpoint.

How much does a Shopify form cost?

With splitforms it is free — 500 submissions per month, no Shopify app fees, no credit card. Most Shopify form apps charge $5–29 per month. A hosted form backend eliminates that recurring cost; if you outgrow the free tier, Pro is $5/month.

Can I accept file uploads (photos, screenshots) on Shopify forms?

Yes. Add enctype="multipart/form-data" to the form and a file input, then connect the Storage integration in your splitforms dashboard. You can accept up to 5 files per submission at 5 MB each. Storage is a paid feature; plain-text fields work on the free tier.

Can I send submissions to Klaviyo or Mailchimp?

Yes. Add a webhook on the form pointing at Klaviyo's Track API or Mailchimp's inbound endpoint. Every submission fires the webhook automatically — no separate signup app. The newsletter signup and product inquiry templates above are pre-wired for this with an opt-in checkbox.

Can I run multiple forms on the same Shopify store?

Yes. Create multiple forms in your splitforms dashboard, each with its own access key, and paste each snippet into a different page or section. Use separate access keys to route submissions to different inboxes — for example, wholesale to sales and support to a help desk.

Is this better than a Shopify form app?

For most stores, yes. Form apps add JavaScript that slows your store, lock your submissions inside the app, and charge $5–29/month. A paste-in form posts directly from the browser to splitforms, adds no app weight, keeps your data exportable, and is free up to 500 submissions per month.

Add a form to Shopify — free

No app, no plugin, no monthly fee. 500 submissions per month, spam filtering, and the dashboard included.

Get your free access key

Questions? Email hello@splitforms.com