splitforms.com

Contact form · HTML

Contact form for any HTML website

The simplest possible setup. Drop one <form> tag into your HTML and submissions land in your dashboard. Free includes inbox delivery. No JavaScript, no backend, no server to maintain. Works on GitHub Pages, S3, Cloudflare Pages, plain Apache — anywhere static HTML can be served.

  • 500 free / mo
  • 14ms latency
  • No backend code
HTML contact form — copy-paste code for splitforms

No backend code

No server, API route, or SDK. Your HTML form posts straight to one endpoint.

Straight to your inbox

Every submission is emailed to you and saved to a searchable dashboard — spam filtered before it reaches you.

Design without limits

It's your own HTML markup and styles. Splitforms is only the backend, so nothing constrains how the form looks.

Copy-paste ready

Your HTML contact form, ready to paste.

Replace YOUR_ACCESS_KEY with the key from your dashboard — that's the whole integration. No SDK to install, no build step, just the html you already write.

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="text"  name="name"  placeholder="Your name"  required />
  <input type="email" name="email" placeholder="you@example.com" required />
  <textarea           name="message" placeholder="What's up?"   required></textarea>

  <!-- Honeypot for spam — hidden from humans -->
  <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 HTML website.

To add a contact form to a HTML website you need three things: a free splitforms access key, the html snippet above, and your key pasted into it. No backend, server, or SDK — the form posts to one URL and every submission lands in your inbox and dashboard.

Get your free splitforms access key

Sign up at splitforms.com, verify your email, and copy your access key from the dashboard. No credit card required.

Drop the HTML snippet into your project

Copy the HTML code example into your project and replace YOUR_ACCESS_KEY with the key from step 1.

Receive submissions in your dashboard

Submissions arrive in the splitforms dashboard within seconds. Free includes inbox delivery; Pro adds Slack, Discord, Sheets, or any signed webhook URL.

Where submissions go

Where do your HTML form submissions go?

Every submission is emailed to you and saved to a searchable dashboard — spam filtered before it ever reaches you. Search, export to CSV, or forward it to a webhook or Slack on Pro.

  • 500 submissions per month, free forever
  • Honeypot + AI spam classifier on every plan
  • Signed webhooks to Slack, Discord, your server
HTML contact form submissions in the splitforms dashboard

No backend needed

Do you need a backend for a HTML form? No.

Your HTML form posts standard FormData to one URL. Splitforms validates the access key, runs the spam classifier, and forwards it to your email — so there's no server, API route, or database for you to build or maintain.

  • Zero JavaScript required — pure HTML form
  • Built-in honeypot spam protection
  • Dashboard-configured redirect to a thank-you page
How splitforms processes a HTML form submission

Best practices

What a production-ready HTML form needs.

The difference between a form that works in the demo and one that survives launch traffic — the production-tested defaults, in priority order.

  • Always set method="POST" explicitly. The HTML default is GET, which won't work with splitforms.
  • Configure a /thanks.html redirect in Dashboard → Form settings so users without JavaScript still get a branded confirmation page.
  • Lock the access key to your domain in the splitforms dashboard. The key lives in your HTML source — anyone can copy it, but domain locking makes it inert elsewhere.
Production-ready HTML contact form best practices

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.

Connect your SplitForms form to Slack, Google Sheets, Mailchimp, Zapier and more

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

HTML contact form questions.

View all FAQs
How do I add a contact form to a plain HTML website?

Paste the snippet above into your HTML file. Replace YOUR_ACCESS_KEY with the key from your splitforms dashboard. Submissions go to your inbox immediately. No JavaScript, no build step, no install.

Does splitforms work with GitHub Pages, S3, Cloudflare Pages, and other static hosts?

Yes — every static host. The form posts to splitforms.com from the browser, so the host only serves the HTML. Lock the access key to your custom domain (or *.github.io / *.pages.dev) in the splitforms dashboard.

How do I handle form errors with pure HTML (no JavaScript)?

Splitforms returns a default error page on failures (invalid key, spam, rate-limit). You can customize that page in the splitforms dashboard → Settings → Error Page. For inline error handling, you'd need a small JS snippet — see the AJAX page.

Can I use splitforms with HTML forms that have file uploads?

Yes. Add enctype="multipart/form-data" to the form and use a normal <input type="file">. File uploads work after the account connects the Storage integration; the current limit is 5 files per submission at 5 MB each.

How do I customize the success / redirect behavior?

Set the URL in Dashboard → Form settings → Redirect. After a successful native form submission, splitforms sends the browser there. A redirect field submitted with the form is ignored to prevent open redirects. The /thanks.html page is yours — build it however you like.

Is the form really spam-protected without a CAPTCHA?

Yes. The hidden honeypot field catches naive bots; a tuned classifier scores everything else and quarantines anything that looks automated. CAPTCHA hurts conversion (5-15% drop, depending on study) so we don't use one. If you ever need stricter protection, the Pro plan adds custom rules.

method="GET" turns your form into a URL query string

If you forget method="POST" (or omit it — GET is the HTML default), the browser appends form fields to the URL: ?name=Maya&email=…. Splitforms's endpoint returns 405 Method Not Allowed because it only accepts POST. Always specify the method explicitly.

Multiple inputs with the same `name` only send the last value

If you accidentally name two fields email, FormData posts both — but the splitforms dashboard shows the last one. For checkbox groups, use name="interests[]" or unique names per checkbox.

File inputs require enctype="multipart/form-data"

Standard forms submit as application/x-www-form-urlencoded, which can't carry binary file data. If you add <input type="file">, also add enctype="multipart/form-data" to the form tag — otherwise the file silently doesn't upload.

Hidden honeypot field needs to be invisible to bots' DOM parsers

style="display:none" is what splitforms uses, but some sophisticated bots ignore display:none. Stack defenses: display:none + tabindex="-1" + aria-hidden="true" + an off-screen label. Splitforms's classifier catches the rest.

GitHub Pages can't post to https without HTTPS on your domain

Mixed-content errors: if your GitHub Pages site is served over HTTP (rare but possible on custom domains without HTTPS toggled), the browser blocks the POST to https://splitforms.com. Enforce HTTPS in your custom domain settings.

<button> outside the <form> tag does nothing on submit

Browsers only treat a button as a submit trigger when it's a descendant of the form element. If your CSS layout requires the submit button to live outside the <form> (e.g. a sticky bar at the page bottom), the form will never submit on click — Enter inside an input still works. Fix it by adding form="contact-form" on the button, matching an id="contact-form" on the form. The HTML5 form-attribute association is widely supported but easy to forget.

How does HTML handle forms without splitforms?

Plain HTML has no built-in way to deliver a form submission anywhere — the spec only covers serializing fields and either GETting or POSTing them to whatever URL you put in action. Without a backend, the historical fallback is mailto: links (broken on Gmail, Outlook web, and most mobile devices) or PHP on shared hosts (extinct on S3, GitHub Pages, Cloudflare Pages, Netlify-static). That's the gap splitforms fills: you keep using the same <form action method=POST> HTML you already wrote, and the action points at our endpoint instead of a server you'd otherwise have to operate.

Any deployment notes for shipping HTML to production?

Plain HTML deploys to anywhere that serves files: GitHub Pages, S3 + CloudFront, Cloudflare Pages, Netlify, Vercel, plain Apache/nginx, even Dropbox public folders (RIP). The form posts cross-origin from the browser to splitforms.com, so the host is irrelevant to delivery — but enforce HTTPS on your domain, otherwise the browser blocks the mixed-content POST. On GitHub Pages, toggle 'Enforce HTTPS' under Settings → Pages. On S3, terminate TLS at CloudFront. Lock the splitforms access key to your custom domain in the dashboard so a leaked key from View Source is inert elsewhere.

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, 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/ 36 months
was $99 · save 40% · new-user price

Pay $59. 3 years sorted.

  • 15,000 submissions / mo
  • Unlimited forms
  • Everything in Pro
  • Renews every 3 years
  • Long-term discount
  • Priority support included
  • Vote on the roadmap

No credit card required on Free • Cancel anytime