splitforms.com

Static site contact form

Static site contact form, no backend.

Point a plain HTML form at one hosted endpoint and every submission lands in your inbox and dashboard — no serverless function, PHP, or SMTP.

  • 500 free / mo
  • No serverless fn
  • 5 generators
A static HTML contact form submitting to the splitforms hosted backend

No backend code

No serverless function, Worker, PHP, or SMTP — the endpoint is the backend.

Spam filtered

Honeypot, time-trap, and rate limits screen bots before your inbox.

Inbox + dashboard

Every submission is stored and emailed to you within seconds.

Copy-paste ready

Static site contact form code, ready to paste.

Drop this into any static template, point the action at the endpoint, and add your access key. That's the whole integration — no build step, serverless function, or SMTP.

Generate access key
contact.html
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="hidden" name="redirect" value="https://yoursite.com/thanks" />

  <input name="name" placeholder="Name" required />
  <input name="email" type="email" placeholder="Email" required />
  <textarea name="message" placeholder="Message" required></textarea>
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Send message</button>
</form>

How to add it

How to add a contact form to a static site.

Five steps, no server code of your own — the same path works whether your site is pure HTML or a generator like Hugo or Astro.

Create a free splitforms account and access key

Sign up and create 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. Copy the form's access_key.

Paste the HTML form into your static template

Add a plain <form action="https://splitforms.com/api/submit" method="POST"> to your GitHub Pages, Astro, Hugo, Eleventy, or Jekyll template — no build step, API route, or serverless function required.

Add the access_key, redirect, and honeypot fields

Set access_key as a hidden field so splitforms knows which form is submitting, add a redirect field with your thank-you page URL, and include a hidden botcheck input that must stay empty to catch bots.

Rebuild and deploy your static site

Push to GitHub Pages, Netlify, Cloudflare Pages, S3, or your host of choice. The form posts directly to splitforms, so there is nothing server-side to configure on the host itself.

Send a test submission and check the dashboard

Submit the live form once. Confirm the lead lands in your inbox and the splitforms dashboard, then turn on allowed-domains or strict origin mode in the form's settings to block spoofed submissions from other sites.

How it works

Do you need a backend for a static site form? No.

Static hosts can't process POST requests themselves — they only serve files. splitforms sends the browser's POST straight to a hosted form endpoint built for that job, so nothing runs on your host: every submission is filtered, stored, and delivered to your inbox.

  • Plain HTML form POSTs straight to the endpoint — no serverless function
  • Every lead emailed to you and saved to a searchable dashboard
  • Same access_key + redirect fields wire into GitHub Pages, Astro, Hugo, Eleventy, and Jekyll
A static site form submission received, filtered, stored, and routed to your inbox

Spam protection

How do you stop spam on a static contact form? No CAPTCHA.

splitforms layers three defenses that all work on a purely static page — no CAPTCHA required. If your site can run one line of JavaScript, add a form_loaded_at hidden field as a time-trap, and optional reCAPTCHA v2 is available as an extra layer. Per-form allowed-domains or strict origin mode blocks other sites from reusing your access_key.

  • Hidden botcheck honeypot field that must stay empty
  • Server-side content heuristics on every submission automatically
  • Rate limiting: 6 submissions a minute, 20 per 15 minutes per IP
Spam defenses screening a static site contact form without a CAPTCHA

Optional fetch

Can a static contact form return JSON instead of a redirect?

Yes. An Astro island, an Eleventy page with a small script, or a plain <script> tag can POST the same form with fetch() and an Accept: application/json header to show an inline success message instead of redirecting. The HTML action and the fetch call hit the same endpoint, so you can start with the plain form above and upgrade later without renaming a field — see the API reference for the response shape.

  • Same https://splitforms.com/api/submit endpoint for HTML and fetch
  • JSON response returns success once splitforms accepts the submission
  • No field renames when you upgrade from a redirect to inline success
A static site form posting with fetch and receiving a JSON response from splitforms

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

Static site contact form questions.

View all FAQs
How do I add a contact form to a static site?

Add a normal HTML form that POSTs to https://splitforms.com/api/submit, with a hidden access_key field identifying which splitforms form receives it. No serverless function, PHP, or SMTP setup is needed — submissions land in your inbox and the splitforms dashboard.

Does this work on GitHub Pages?

Yes. GitHub Pages only serves static files and can't run a form handler, but it can still POST to an external endpoint. Point the form's action at splitforms and it works the same way on Jekyll, Hugo, Eleventy, or any other static host.

Do I need JavaScript?

No. A native HTML form submit works with zero JavaScript, and the botcheck honeypot field filters spam without any script running. Add a line of JavaScript only if you want the optional form_loaded_at time-trap field or a fetch-based inline success message — neither is required.

How do I prevent spam on a static contact form?

splitforms layers static-friendly defenses: a hidden botcheck honeypot field that must stay empty, server-side content heuristics on every submission, and rate limiting of 6 submissions a minute and 20 per 15 minutes per IP. Add the form_loaded_at time-trap field or optional reCAPTCHA v2 for extra coverage — none of it requires a JavaScript framework.

Can I submit with fetch and get a JSON response instead of a redirect?

Yes. POST a FormData body to https://splitforms.com/api/submit with an Accept: application/json header from a fetch() call, and splitforms returns a JSON response you can use to show an inline success message instead of redirecting the page.

Is there a free plan for a static site contact form?

Yes. Free covers 500 submissions a month across unlimited forms, with email notifications, spam filtering, and dashboard storage included — no credit card required. Pro ($5/mo) adds CSV/XML/PDF exports, webhooks, integrations, and auto-responder at 1,000 submissions a month.

Can I customize the email subject or redirect visitors after submit?

Yes. Add hidden subject, redirect, and replyto fields to the form. subject sets the notification email's subject line, redirect sends visitors to your thank-you page after submit, and replyto sets the reply-to address so you can respond directly from your inbox.

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