Add your fields
Start from the snippet above and keep the fields you need — text, email, phone, URL, number, date, textarea, or dropdown. Rename each label and name attribute to match your data.
Free HTML form tool
Copy clean, semantic contact form HTML you actually own — no login, no rate limit, no watermark, and no framework lock-in.

The generator outputs semantic markup — no iframe, no script embed, no vendor badge to style around.
Native HTML5 validation, so the form works even with JavaScript disabled — 0 KB added to your page.
Every generated form ships with a hidden anti-bot field, screened automatically when it posts to splitforms.
Quick start
This is the markup the generator produces — semantic, honeypot-armed, and ready to POST to any backend. Copy it, swap in your access key, and ship.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<!-- Honeypot — bots fill every field, humans don't see this -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
<label for="field-name">Your name <span style="color:#ff4f00">*</span></label>
<input id="field-name" name="name" type="text" placeholder="Jane Builder" required>
<label for="field-email">Email <span style="color:#ff4f00">*</span></label>
<input id="field-email" name="email" type="email" placeholder="you@example.com" required>
<label for="field-message">Message <span style="color:#ff4f00">*</span></label>
<textarea id="field-message" name="message" placeholder="What's on your mind?" required></textarea>
<button type="submit">Send message</button>
</form>How to
Add the fields you need — text, email, phone, URL, number, date, textarea, dropdown — mark which ones are required, style it with your own CSS, then copy the generated form code. It is standard, semantic HTML with no JavaScript and no framework lock-in, so it renders the same in React, Vue, Astro, WordPress, Webflow, or a plain .html file.
Start from the snippet above and keep the fields you need — text, email, phone, URL, number, date, textarea, or dropdown. Rename each label and name attribute to match your data.
Add the required attribute to the fields that must be filled, and a placeholder to guide input — native HTML5 validation is built in, with zero JavaScript.
Style the form with your own CSS — Tailwind, vanilla CSS, or CSS modules — or ship the bare, semantic HTML exactly as-is.
Paste it into your site and point the action at any backend that accepts a POST.
You own the code
Most "form builders" hand you an iframe or a hosted page you don't control. This generator hands you the actual HTML — you own it, style it, and drop it into Next.js, React, Astro, WordPress, Webflow, or a plain .html file. By default it posts to splitforms.com/api/submit — 500 free submissions a month, no card — but the action can point anywhere.

Where submissions go
The generated form posts to whatever URL you set in its action attribute. By default that's splitforms, which validates the request, runs the spam classifier, and forwards it to your email and a searchable dashboard — or point the action at Formspree, Netlify Forms, or your own route.

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

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
SplitForms works with the destinations you route to and the platforms you build on — from Slack and Sheets to WordPress, Shopify, and Next.js.

Trusted by indie teams and agencies shipping forms worldwide
Testimonials
40 quotes on record — from indie hacks to agency migrations.
“I replaced a Lambda + DynamoDB + SES contact form with six lines of HTML. It took eleven minutes, and the dashboard is better than what I was going to build.”
“We migrated 14 client sites off Formspree in a single weekend. The price is a third of what we paid, the API is more honest, and the spam filter actually works.”
“The webhook payload is signed, idempotent, and well-shaped. It reads like code from a competent team, not a CRUD app held together with duct tape.”
“I stopped reaching for Typeform on small marketing sites. splitforms covers 90% of the use case at none of the bloat.”
“I onboarded our whole agency in an afternoon. The MCP integration meant Cursor literally dropped the form straight into our client repos for us.”
“The free plan gave me 500 submissions before I paid a cent, and Starter is a dollar a month. I've spent more on coffee deciding which backend to use.”
“Spam went from forty junk entries a day to zero, with no reCAPTCHA puzzle ruining the form. The honeypot and time-trap just quietly do their job.”
“Point the form action at one endpoint and you're done. No SDK, no client library, no build step. This is how a form backend should feel.”
“Leads land in Slack the second someone submits, and a copy goes to Google Sheets for the sales team. I wired both up in under ten minutes.”
“I run a static Hugo site on a five-dollar VPS. splitforms gave it a real contact form without me standing up a single server.”
Questions
Yes. There's no signup, no usage limit, and no watermark on the output. Use the generated HTML in any project — commercial or personal — and ship as many forms as you want.
To whatever URL you set in the form's action attribute. The generated form does a standard HTML POST, so it works with any endpoint that accepts form-encoded data — splitforms, Formspree, Netlify Forms, or your own server route. Change the destination anytime by editing the action attribute.
Yes — every form includes a hidden honeypot input (the standard anti-bot technique). When the form posts to splitforms, the honeypot is processed automatically. With other backends you'll need to handle the honeypot value yourself.
Yes. The generated HTML is unstyled, semantic markup by default. Style it with your own CSS — Tailwind, vanilla CSS, or CSS modules — and it works everywhere, so nothing constrains how the form looks.
Text, email, phone (tel), URL, number, date, textarea, and dropdown (select with options). All types are standard HTML — no custom widgets. Works on every modern browser without JavaScript.
Yes. The output is plain HTML — drop it into any framework that renders HTML, including Next.js, React, Vue, Astro, Webflow, Carrd, WordPress, or static HTML files. No build-time integration required.
Those tools host the form for you and hand back an embed or a link on their domain, complete with their branding and their limits. This generator gives you the raw HTML instead: plain markup you own and restyle (not a Google-hosted page or a locked iframe), 0 KB of added JavaScript instead of a ~250–500 KB embed, any POST backend instead of vendor lock-in, and no third-party account or watermark to keep alive.
Simple pricing
Choose a plan that fits your workflow — from a free form endpoint to full automations, exports, and higher submission limits.
Free forever
For side projects and indie devs.
For builders who want every paid feature for $1/month.
For agencies and growing products.
Pay $59. 3 years sorted.
No credit card required on Free • Cancel anytime