Create a free splitforms form
Sign up and add a form in the dashboard — no credit card required. Free covers 500 submissions total on unlimited forms, with email notifications and spam filtering included.
Serverless form handling
Updated · plan facts checked against /pricing
Post any HTML form or client-side fetch() call to one hosted endpoint — no API route, no serverless function, no SMTP. splitforms stores the submission, filters spam, and emails you.

No app/api route or serverless function to write and deploy — your form posts to one endpoint.
A honeypot and form_loaded_at time-trap screen bots server-side — no CAPTCHA to add.
Accepted submissions are saved to a searchable dashboard before owner notification email is attempted; delivery time and inbox placement depend on provider and recipient settings.
Quick start
Point the form action at the endpoint, add your access key, and ship — there's no API route or serverless function of your own to write or deploy.
<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 name="email" type="email" required />
<textarea name="message" required></textarea>
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
<button type="submit">Send</button>
</form>Setup
Five steps, no server code of your own to write or deploy. Point a form at the endpoint, add the honeypot and time-trap fields, and ship to any host.
Sign up and add a form in the dashboard — no credit card required. Free covers 500 submissions total on unlimited forms, with email notifications and spam filtering included.
Set a native <form action="https://splitforms.com/api/submit" method="POST">, or POST with fetch and FormData from a client component. Either way, add access_key as a hidden field.
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 or a validation function of your own.
Ship to Vercel, Netlify, Cloudflare Pages, GitHub Pages, or any static host — there is no app/api route or serverless function to write and deploy alongside the form.
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 — webhooks and native integrations are on paid plans (Pro at $5/mo and Annual).
No API route
There's no app/api/contact/route.ts to write. A client component posts FormData straight to splitforms with fetch() — the same honeypot and time-trap fields apply whether you submit with a native form action or JavaScript. It's the same one-endpoint pattern in a Next.js form, React, or plain HTML.

The shared layer
Most form handlers repeat the same work: validate fields, block spam, store the payload, email the owner, and forward a webhook. splitforms handles that shared layer — no route, SMTP, database, CAPTCHA, or hosting lock-in of your own. Need custom logic first? Put a serverless function in front of the form endpoint and forward the request; most contact, lead, and signup forms don't need one.

Any host
The POST goes to splitforms, not your hosting provider, so there's nothing platform-specific to configure. The same form keeps working when you move from Netlify to Vercel, Cloudflare Pages, GitHub Pages, or S3 — it's true static site form handling with no build-pipeline lock-in.

How SplitForms works
splitforms receives the submission, filters spam, saves it to your dashboard and emails you — then, on paid plans, sends it on to your webhooks and integrations. No backend infrastructure to build.

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

We instantly capture and organize every submission in your inbox.

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

No credit card required. Set up in under 60 seconds.
Connect & automate
On paid plans, submissions can also go to Slack, Discord, Google Sheets, Notion, Airtable, Zapier or any signed webhook — and splitforms works on the platforms you build on, from WordPress and Shopify to Next.js. With Stripe connected, your forms can take payments too.

Common questions
Serverless form handling means your site does not run its own always-on form server. The browser posts to a hosted endpoint — https://splitforms.com/api/submit — that validates, filters, stores, and routes the submission.
No — a plain contact, lead, waitlist, or signup form posts straight to splitforms. Add your own function only when something must run server-side first, such as looking up a coupon code or generating an invoice number before the submission is accepted.
Yes. It works anywhere that can serve HTML or JavaScript because the POST goes to splitforms, not your hosting provider — there is nothing platform-specific to configure.
Netlify Forms is tied to Netlify's build and hosting pipeline. splitforms is host-agnostic: the same form keeps working if you move from Netlify to Vercel, Cloudflare Pages, GitHub Pages, or S3.
splitforms is free for 500 submissions total on unlimited forms, with email notifications and spam filtering included. Pro is $5/month for 5,000 submissions a month plus webhooks, integrations, CSV/XML/PDF exports, CC/BCC and priority support; Annual is $49/year for 15,000 a month. Unlimited Business plans are available by emailing [email protected].
splitforms includes a hidden honeypot field (botcheck) and a time-trap field (form_loaded_at) that catch most bots automatically, plus server-side content heuristics. You can layer on optional reCAPTCHA v2 with your own secret for an extra check — none of it requires a validation function of your own.
Yes, with the Storage integration (a paid add-on): up to 5 files per submission at 5 MB each, with no upload handler of your own to write.
Yes — the shared endpoint allows 6 submissions per minute and 20 within a rolling 15 minutes, per IP per form, returning HTTP 429 past that, since there is no server of yours in front of it to add custom throttling.
splitforms covers the shared work — storage, spam filtering, email, webhooks — but it does not run your business logic. If you need to check a value against your own database, call another API, or transform the payload before it's accepted, put a serverless function or API route in front of splitforms and forward the request from there. Most contact, lead, waitlist, and signup forms have no such logic, which is why the direct POST works without one.
Simple pricing
Free gives you 500 submissions for $0 — no card, no time limit. Pro is $5/month for 5,000 submissions a month, and Annual is $49/year for 15,000 a month with every Pro feature.
For side projects and indie devs.
Every paid feature, for agencies and growing products.
Every Pro feature with triple the volume — $0.27 per 1,000 at full use.
No credit card required on Free • Cancel anytime • Full pricing and FAQ