splitforms.com
All articles/ GUIDES10 MIN READPublished May 10, 2026

Best Contact Form for Shopify Stores in 2026 (Top 7)

The best contact form tools for Shopify stores in 2026 — product inquiry forms, customer service intake, Klaviyo integration, and no-app embed options.

✶ Written by
splitforms.com / blog

Founder of splitforms — the form backend API for developers. Writes about form UX, anti-spam, and shipping web apps without backend code.

What a Shopify store actually needs from a form

Most Shopify form roundups list features in the abstract. Let's be concrete. If you run a real store — not a hobby project — your contact form has to do five things the built-in template can't:

  1. Auto-inject product context. When a shopper emails from a PDP (product detail page), the notification should say exactly which product they're asking about, with a clickable URL. Shopify's default form doesn't do this — you get a generic message with no product reference.
  2. Order-aware customer service intake. A support form should ask for the order number, issue type (defective / wrong item / shipping delay / refund / other), and an optional photo upload. Routing this to your help desk beats a wall of free-text messages.
  3. Wholesale / B2B inquiry separation. Wholesale leads should go to sales@, not support@. That means two forms with two destinations — easy with separate access keys, hard with the native template.
  4. Newsletter sync to Klaviyo or Mailchimp. If your email tool is Klaviyo (it usually is), every form submission with an opt-in needs to land in a Klaviyo list within seconds — not via a nightly CSV.
  5. No app subscription bloat. Most stores already pay for 4–6 apps. Adding another $10/month form app for what is fundamentally a `<form>` POST is silly. The right answer is paste-in HTML that posts to a hosted endpoint.

Score the 7 tools below against those five needs. splitforms is the only one that hits all five on the free tier.

The 7 best contact form tools for Shopify (at a glance)

ToolShopify app needed?Free tierWebhooks (Klaviyo)Product contextCheapest paid
splitformsNo (paste in Liquid)1,000/moFreeVia Liquid hidden inputs$5/mo
Shopify Forms (native)Built-inUnlimitedNo (Shopify Flow only)ManualFree with Shopify plan
POWR Form BuilderYes25/moPaid only ($14.99)Plugin field$5.49/mo
Globo Form BuilderYes1 form, 50 subsPaid onlyPlugin field$9.90/mo
Formidable FormsYesLimitedPaidPlugin field$9.99/mo
Hulk Form BuilderYesGenerousPaid tier onlyPlugin field$9.90/mo
JotForm (Shopify integ.)Embed code5 forms, 100 subs$34/mo+ tierManual$34/mo

splitforms is the only one that doesn't require either a Shopify app or a paywall to do the basics. Get a free access key and skip ahead to the template at the bottom of this post.

1. splitforms — best for Shopify stores in 2026

splitforms is a form-to-email service that gives you a single endpoint to POST to. You paste a normal HTML form into a Liquid section, add a hidden access_key input, and submissions land in your inbox and your splitforms dashboard. No Shopify app install — which means no extra JS on every page and no monthly app subscription.

Pricing: 1,000 submissions/month free, $5/month Pro for 5,000, $59 for 4 years if you want to lock in the cheapest possible rate.

What's good for Shopify: Webhooks are free on every tier — so you can fire a Klaviyo Track event on every newsletter signup without paying for an app. AI spam classification ships on the free tier (most form tools paywall this or use keyword filters). File uploads are included free, so wholesale inquiries with attached resale certificates work out of the box. Custom SMTP means deliverability is your own Gmail/SES — not a shared sender that can land in spam.

What's missing: No drag-and-drop visual builder. You write HTML. If you don't know basic HTML, the other tools have an easier first 5 minutes — but you'll pay for it forever in app subscriptions. See the no-app Shopify tutorial for the step-by-step.

Verdict: Best choice for any Shopify store that already pays for a stack of apps and doesn't need another one. Especially good if you use Klaviyo or care about page speed.

2. Shopify Forms (native) — fine for hobby stores only

Shopify Forms is the built-in contact form template that ships with every Shopify theme. The route is /pages/contact and the Liquid tag is {% form 'contact' %}. It posts to Shopify's own form handler and sends an email to the address in your store's general settings.

Pricing: Included with every Shopify plan, unlimited submissions.

What's good: Zero setup, no third-party service to trust, unlimited volume. Works out of the box on every theme.

What's missing: No webhooks (you can rig something via Shopify Flow on Shopify+ but it's clunky), no file uploads, no AI spam filter, no per-submission routing, no product context auto-injection, no built-in Klaviyo sync. The notification email is plain and ugly. If you customize fields beyond the defaults, you have to hand-edit Liquid and the form handler silently drops fields it doesn't recognize.

Verdict: Fine for a brand-new store doing < 5 inquiries/week with no integration needs. The moment you need anything beyond "email me when someone submits", you've outgrown it.

3. POWR Form Builder

POWR is one of the older Shopify form apps, in the app store since the early Shopify days. Drag-and-drop builder, a library of templates, integrates with Mailchimp and Zapier on paid tiers.

Pricing: Free tier limited to 25 submissions/month (very low for a real store). Paid plans start at $5.49/month and go up to $89.99/month for advanced features.

What's good: Easy visual builder, lots of templates, well-known brand in the Shopify ecosystem.

What's missing: 25/month free cap is restrictive — splitforms gives you 1,000 free. The app injects POWR's JS on every page it's used, which adds to your bundle. Webhooks and Zapier are paid only. Branded with a "Powered by POWR" label unless you upgrade.

Verdict: Works if you want a visual builder and have a small store. Cost adds up if you also use POWR for popups or galleries — they bill per feature.

4. Globo Form Builder

Globo is a Shopify-specific form app with strong product-form features (it can auto-inject the current product into a form submission, which is its main selling point).

Pricing: Free tier covers 1 form and 50 submissions. Premium is $9.90/month for unlimited.

What's good: Native product field — drop the form on a PDP and it auto-fills the product. File uploads on free tier. Good Shopify-specific UX.

What's missing: Single-form limit on free tier means you can't separate wholesale from support without paying. No AI spam (uses captcha which slows mobile). Webhooks require the paid plan.

Verdict: Reasonable choice if you want a Shopify-native app and don't mind the $9.90/month. splitforms beats it on free-tier headroom (1,000 vs 50 submissions) and on webhooks.

5. Formidable Forms

Formidable Forms is a Shopify app that focuses on conditional logic and multi-step forms. Good for stores doing custom-order quotes or product configurators.

Pricing: Free tier is functional but limited. Paid plans from $9.99/month.

What's good: Conditional logic on the free tier (most apps paywall this). Multi-step forms are clean. Decent template library.

What's missing: Webhook integrations on paid only. Email notification is branded unless you upgrade. The conditional-logic feature is overkill for a basic contact form — you're paying for power you don't need.

Verdict: Pick this if you genuinely need a multi-step configurator. For a regular contact / support / wholesale form it's overspec'd.

6. Hulk Form Builder

Hulk is a generous-free-tier form builder with a wide template library. It's a common "safe pick" in Shopify communities.

Pricing: Free tier with unlimited forms and a reasonable submission cap. Paid plans from $9.90/month.

What's good: Unlimited forms on free tier, large template library, conditional logic.

What's missing: Notification UX is dated. Webhook integrations are paid. The app injects scripts on every theme page, which on a Dawn theme can shave 50–100ms off LCP. Email styling is template-locked.

Verdict: Functional and free, but adds JS overhead. If you care about page speed, paste-in HTML via splitforms is faster.

7. JotForm Shopify integration

JotForm is a general-purpose form builder that has a Shopify integration via embed code. Not a true Shopify app — you embed a JotForm-hosted form on your store.

Pricing: Free tier capped at 5 forms and 100 submissions/month. Bronze plan is $34/month for 1,000 submissions — same volume splitforms gives free.

What's good: Mature visual builder, lots of integrations, HIPAA option on enterprise.

What's missing: Forms are iframe-embedded which feels off-brand on a polished Shopify store. JotForm branding on free tier. Pricing is the highest of the seven — $34/month is steep for what splitforms gives at $5. See splitforms vs JotForm for the full breakdown.

Verdict: Pick it if you already use JotForm elsewhere in your business. Otherwise the pricing is hard to justify for a Shopify store.

Copy-paste: Shopify product inquiry form template

Drop this into a new Liquid section (Online Store → Themes → Edit code → Sections → Add a new section). Reference the section from your product template with {% section 'product-inquiry-form' %}. Replace YOUR_ACCESS_KEY with the key from your splitforms dashboard.

{% comment %} sections/product-inquiry-form.liquid {% 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 (fires 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>

    {% comment %} Honeypot — hidden from real users, catches bots {% endcomment %}
    <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 %}

When a shopper hits send, the notification email shows: the product title, a clickable product URL, the variant ID, the current price, their name/email, their question, and whether they opted into newsletter. That last field — newsletter_optin — is what your Klaviyo webhook reads to decide whether to add them to your list. Framework users wanting the same shape on a headless storefront can use the Next.js form backend integration.

Copy-paste: Shopify customer service intake form

For your /pages/contact template. Uses a different access key so submissions route to your support inbox separately from product inquiries.

<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>

The enctype="multipart/form-data" is required for file uploads to work. After Storage is connected, splitforms accepts up to 5 files per submission at 10 MB each. If you use a help desk, point a webhook at its inbound API and tickets get created automatically.

Common Shopify form mistakes to avoid

  • Using one app for forms, popups, chat, and reviews. "Bundle" apps charge per feature and the JS bundle gets huge. Use a paste-in form (splitforms) and pick best-in-class for the other features.
  • Letting Shopify handle high-volume support intake. Shopify's notification email goes to your store's contact email — usually a personal Gmail. Once volume picks up, it's a mess. Route via webhook to a real help desk from day one.
  • Skipping the honeypot. Even with AI spam classification, a hidden botcheck input catches another 5–10% of automated submissions for free. Add it to every form.
  • Adding reCAPTCHA on mobile. Google's reCAPTCHA on a Shopify store loads 60–120KB of JS and hurts Lighthouse. AI spam plus honeypot is enough — see honeypot vs reCAPTCHA.
  • Not separating wholesale from support. Wholesale inquiries need different fields (resale certificate upload, monthly volume) and a different reply path (sales, not support). Two forms, two access keys.
  • Forgetting the subject field. Without a subject, every submission email has the same generic title. Set <input type="hidden" name="subject" value="Inquiry: {{ product.title }}" /> and your inbox stays sortable.

Next steps

FAQ

Does Shopify have a built-in contact form?

Yes. Shopify ships a default Contact page template at /pages/contact that posts to Shopify's built-in form handler. It works, but it's limited: no file uploads, no webhooks, basic spam protection only, no auto-injection of product context, and the notification email is branded with Shopify headers. For a real store you'll outgrow it fast — especially the moment you need wholesale inquiries, order-specific intake, or Klaviyo sync.

Do I need a Shopify app to add a custom form?

No, and you usually shouldn't. Most form apps charge $5–$15/month per store and inject extra JavaScript on every page that hurts Core Web Vitals. With splitforms you paste a regular HTML form into a Liquid section — no app install, no extra JS bundle, no theme conflicts. The form posts directly to splitforms.com/api/submit and shows up in your dashboard plus your inbox.

How do I capture the product the customer is asking about?

Use a hidden input populated from Liquid: `<input type="hidden" name="product" value="{{ product.title }}" />` and another for the URL: `<input type="hidden" name="product_url" value="{{ shop.url }}{{ product.url }}" />`. When the customer hits send, the notification email lists exactly which product they're inquiring about, with a clickable link. This is the single biggest win over Shopify's built-in form.

Can I sync newsletter signups to Klaviyo or Mailchimp?

Yes. splitforms has free webhooks (most competitors paywall them) so you can fire a webhook on every submission. Point it at Klaviyo's Track API or Mailchimp's Lists API, map the email field, and you're done. We have a worked example in /docs. No Zapier required — but Zapier works too if you'd rather not write the receiver.

Will adding a custom form slow down my Shopify store?

Not if you embed properly. The splitforms approach adds zero JavaScript and one extra DNS lookup only when the form is submitted. App-based form builders inject 50–150KB of JS on every page including product, collection, and home — which Lighthouse penalizes. A plain HTML form in a Liquid section is the fastest possible implementation. We measured a 0.3s LCP improvement on a typical Dawn theme after removing an app form builder.

What about wholesale and B2B inquiry forms?

Add a separate /pages/wholesale template with a longer form: company name, monthly volume, business address, resale certificate upload, etc. With splitforms you can route wholesale submissions to a different email (sales@) than support submissions (support@) by using two separate access keys — one per form. File uploads are included on the free tier.

How do I protect the form from spam without breaking checkout flow?

splitforms ships AI spam classification on the free tier — it scores each submission and silently drops the obvious bots without touching your customers. Add a hidden honeypot field (`botcheck`) for the rest. Don't use reCAPTCHA on a Shopify store — it adds a Google bundle that fights with your theme's lazy-loading and annoys mobile shoppers. See our writeup on /blog/honeypot-vs-recaptcha for why.

Can splitforms handle high-volume support intake for a busy store?

Yes. The Pro plan at $5/month covers 5,000 submissions, and the $59 4-year plan is roughly $1.23/month averaged. Even a store doing 50 support tickets/day stays inside the Pro plan with headroom. If you need more, contact us — we've got customers running 50k+ submissions/month on custom plans.

About the author
✻ ✻ ✻

Get your free contact form API key in 60 seconds.

1,000 free form submissions per month. No credit card. No SDK, no PHP, no plugin. Drop one POST endpoint in your form and submissions land in your inbox.

Generate access key →Read the docs
v0.1 · founders pricing locked in · early access open