splitforms.com
JAMSTACK FORM BACKEND

JAMstack form backend for static sites.

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 is that backend: point a native form action, or a fetch() call, at https://splitforms.com/api/submit with your access_key, and it stores the lead, emails your team, filters spam, and forwards signed webhooks — all without a serverless function in the middle.

Get your free access key Netlify Forms alternative
JAMstack form submissions flowing from a static site to inbox, dashboard, and webhooks
§ 01Frontend submit

Use HTML or fetch. Same JAMstack form endpoint.

Native form posts are the simplest path for a static page. Use fetch when you want inline success messages in React, Vue, Svelte, or an island component — both hit the same https://splitforms.com/api/submit endpoint.

const res = await fetch("https://splitforms.com/api/submit", {
  method: "POST",
  headers: { Accept: "application/json" },
  body: new FormData(form),
});
§ 02Zero JavaScript

Post from plain HTML — no serverless function.

Fully static output — Hugo, Eleventy, or an Astro page built with output: 'static' — has nowhere to run a form handler. splitforms doesn't need one: the browser POSTs straight to the endpoint, the honeypot and time-trap fields filter bots, and the redirect field sends visitors to your thank-you page without any server-side code in between.

<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>
§ 04How-to

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.

Step 1

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.

Step 2

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.

Step 3

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.

Step 4

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.

Step 5

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.

§ 05FAQ

Frequently asked questions about JAMstack forms

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 Starter ($1/mo); auto-responder is Starter and above.

Ship forms without a server.

500 submissions per month, no credit card required.

Get started free →