splitforms.com

JAMstack form backend

JAMstack form backend for static sites.

Point a native form action or a fetch() call at one endpoint. Every submission is stored, emailed, and spam-filtered — no serverless function of your own to run.

  • 500 free / mo
  • No serverless fn
  • Any static host
A static JAMstack site posting form submissions to the splitforms endpoint

No serverless function

The browser POSTs straight to one endpoint — no serverless function or API route of your own to deploy or maintain.

Spam filtered, no CAPTCHA

A honeypot and a time-trap field catch bots on your static site form without a CAPTCHA or any JavaScript.

Stored, emailed, free

Every submission is saved to your dashboard and emailed to you — 500 a month free, no credit card.

Copy-paste ready

Your JAMstack form backend, one HTML paste.

Drop this into any static template — Astro, Next.js, Hugo, Eleventy, or Webflow — point the action at the endpoint, and add your access key. That's the whole integration: no build step, no serverless function.

Get your access key
index.html
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <input type="hidden" name="form_loaded_at" value="TIMESTAMP_ON_LOAD">
  <input type="hidden" name="redirect" value="https://yoursite.com/thanks">
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">

  <input name="name" placeholder="Name" required>
  <input type="email" name="email" placeholder="Email" required>
  <textarea name="message" placeholder="Message" required></textarea>
  <button type="submit">Send</button>
</form>

How to connect it

How to connect a JAMstack form backend to your static site.

Five steps, no server code of your own. The same path works whether your framework outputs pure static HTML or hydrates islands with JavaScript.

Create a free splitforms form

Sign up and add a form in the dashboard. Free covers 500 submissions a month on unlimited forms, with email notifications and spam filtering included and no credit card required.

Point your form or fetch call at the endpoint

Set a native <form action="https://splitforms.com/api/submit" method="POST">, or POST with fetch and FormData from a React, Vue, or island component — add access_key as a hidden field either way.

Add the honeypot and time-trap fields

Include a hidden botcheck input that must stay empty and a form_loaded_at hidden field set to a timestamp when the page loads. splitforms uses both to catch bots without a CAPTCHA.

Set a redirect for the post-submit page

Add a redirect field with your thank-you page URL. A static site has no server to issue a redirect after submit, so splitforms sends the visitor there directly.

Test the submission, then connect webhooks or integrations

Submit a test entry, confirm it lands in your inbox and dashboard, then wire up Slack, Google Sheets, Notion, Airtable, or a signed webhook to Zapier, Make, or n8n.

What it does

What does a JAMstack form backend do?

A JAMstack form backend is a hosted API that processes your static site's form submissions, since there's no server of your own to run the logic. splitforms receives each POST, stores the lead, emails your team, filters spam, and forwards signed webhooks — all without a serverless function in the middle.

  • Receive native HTML posts, fetch + FormData, or JSON — same endpoint, same access_key
  • Filter spam with a honeypot, a time-trap, heuristics, and optional reCAPTCHA v2
  • Store every submission in a searchable dashboard with CSV, XML, and PDF exports
  • Route to email on every plan, plus signed webhooks and Slack, Sheets, Notion, Airtable
A static site form submission received, filtered, stored, and routed to inbox, dashboard, and webhooks

Submit with fetch

Do you need a serverless function for a static form?

No. Your static site form posts standard FormData straight to one form endpoint — splitforms validates the access key, runs the spam classifier, and forwards the submission, so there's no serverless function, API route, or database for you to build. Want an inline success state without a reload? POST with fetch and FormData from a React, Vue, Svelte, or Astro island — the same endpoint a native form uses.

  • Native HTML form or fetch + FormData — both POST to /api/submit
  • Read the JSON response and render your own inline success UI
  • Same endpoint across Astro, Next.js, Svelte, and Vue islands
Posting a static site form to the splitforms endpoint with fetch and FormData

Spam protection

How do you stop spam on a static site form?

Add the botcheck honeypot field and the form_loaded_at time-trap field — two hidden inputs splitforms reads automatically. Server-side content heuristics run on top, and you can switch on optional reCAPTCHA v2 for an extra layer. None of it requires JavaScript or a CAPTCHA on the happy path.

  • Hidden honeypot field that must stay empty
  • form_loaded_at time-trap that catches instant bot posts
  • Server-side heuristics, plus optional reCAPTCHA v2
Honeypot and time-trap fields filtering spam from a static site contact form

How SplitForms works

From form to workflow in 3 simple steps.

Connect your form, collect every submission, and send data where it needs to go — without building backend infrastructure.

A SplitForms contact form submission launching straight to your inbox

Add your endpoint

Point your form to your unique SplitForms endpoint. That's it.

HTML form pointing at a SplitForms submit endpoint

Receive submissions

We instantly capture and organize every submission in your inbox.

Submissions inbox with searchable leads and status pills

Route anywhere

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

Generic integration tiles for email, sheets, chat, CRM, automate, and webhook

No credit card required. Set up in under 60 seconds.

Connect & automate

Connect your favorite tools and automate everything

SplitForms works with the destinations you route to and the platforms you build on — from Slack and Sheets to WordPress, Shopify, and Next.js. And with Stripe connected, your forms can take payments too.

Connect your SplitForms form to Slack, Google Sheets, Mailchimp, Zapier and more
NewTake payments on your formsDeposits, bookings, order forms — submitters check out through Stripe and the money goes straight to your Stripe account. Included on every paid plan.See plans →

Trusted by indie teams and agencies shipping forms worldwide

PETAL/COKRAFT.DELINEAR-XBUILD.DEVSTUDIO 71MERIDIANFRAME&CO

Testimonials

Loved by developers shipping at every scale.

40 quotes on record — from indie hacks to agency migrations.

Questions

JAMstack form backend questions.

View all FAQs
What is a JAMstack form backend?

A JAMstack form backend is a hosted endpoint that receives form submissions from static sites or frontend apps, then handles storage, email delivery, spam filtering, and webhooks without requiring your own server.

Does splitforms replace Netlify Forms?

Yes for most portable form-backend use cases. Netlify Forms is convenient if you stay on Netlify, but splitforms works on any host and includes dashboard storage, email, signed webhooks, file uploads, and spam filtering.

Can I use it with Next.js, Astro, Hugo, or Eleventy?

Yes. Use a native HTML form action for static pages or submit with fetch from a frontend component. The same endpoint works across all JAMstack frameworks.

Do I need a serverless function?

No. You can POST directly from the form to splitforms. Use a serverless function only if you need custom business logic before accepting the submission.

How do I stop spam on a static site contact form?

Add the botcheck honeypot field and the form_loaded_at time-trap field, both hidden inputs splitforms reads automatically. Server-side content heuristics run on top, and you can turn on optional reCAPTCHA v2 if you want an extra layer — none of it requires JavaScript.

How do I redirect visitors after they submit a static form?

Add a hidden redirect field with your thank-you page URL. Since a static site has no server to send a redirect response, splitforms sends the visitor's browser there directly after it accepts the submission.

Does the free plan work for JAMstack sites, or do I need to pay?

Free covers 500 submissions a month on unlimited forms, with email notifications, spam filtering, and dashboard storage included. Webhooks, integrations, and exports need Pro ($5/mo); auto-responder is paid plans.

Simple pricing

Start free. Scale when you need more.

Choose a plan that fits your workflow — from a free form endpoint to full automations, exports, Stripe payments, and higher submission limits.

Free

$0
 

Free forever

Best for testing

For side projects and indie devs.

  • 500 submissions / mo
  • Unlimited forms
  • Email notifications included
  • Honeypot spam filtering
  • Submissions dashboard
  • MCP setup stays free
  • No credit card required

3-Year

$59/ first 3 years
was $99 · save 40% · new-user price

Pay $59. 3 years sorted.

  • 15,000 submissions / mo
  • Unlimited forms
  • Everything in Pro
  • $59 for 3 years, then $59/year
  • Long-term discount
  • Priority support included
  • Vote on the roadmap

No credit card required on Free • Cancel anytime