Pick a starting form
Start from the contact, newsletter, booking or feedback preset, then add or remove fields: text, email, phone, URL, number, date, textarea, dropdown, checkbox, radio, hidden or file.
Free tool · no signup
Last updated · plan facts checked against /pricing
Build a form visually, copy clean HTML (or React) and paste it into any site; the generated form submits to a free splitforms endpoint, so it works without a backend.
Don't have one? Get a free splitforms key: 500 submissions total, no credit card.
Click a type to add a field, then use ↑ ↓ to reorder.
A hidden botcheck checkbox people never see. If a bot ticks it, splitforms silently drops the submission; rule-based spam filtering runs on every submission either way.
contact-form.html
<style>
form { max-width: 480px; font-family: system-ui, sans-serif; }
label { display: block; font-size: 13px; font-weight: 600; margin: 14px 0 6px; }
input:not([type=checkbox]):not([type=radio]), textarea, select { width: 100%; padding: 10px 12px; border: 1px solid #d6d6d1; border-radius: 6px; font: inherit; box-sizing: border-box; }
textarea { min-height: 100px; resize: vertical; }
fieldset { border: 0; margin: 14px 0 0; padding: 0; min-width: 0; }
legend { font-size: 13px; font-weight: 600; margin: 0 0 4px; padding: 0; }
label.sf-choice { display: flex; align-items: center; gap: 8px; margin: 8px 0 0; font-size: 14px; font-weight: 400; }
label.sf-choice input { margin: 0; accent-color: #ff4f00; }
button { margin-top: 18px; padding: 12px 20px; background: #ff4f00; color: #fff; border: none; border-radius: 6px; font-size: 14px; font-weight: 600; cursor: pointer; }
button:hover { background: #c93d00; }
</style>
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<input type="hidden" name="subject" value="New contact form submission">
<!-- 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="[email protected]" 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>
<p class="splitforms-attribution" style="margin-top:12px;font-size:11px;color:#888;text-align:right">
Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="sponsored noopener">splitforms</a>
</p>Paste into any HTML page, a WordPress Custom HTML block, a Webflow or Carrd embed, or a static site. Replace YOUR_ACCESS_KEY with your key (get one free) and submissions start arriving in your inbox and dashboard.
One builder, three outputs: semantic HTML, a hook-free React component, or HTML with Tailwind classes. No iframe, no embed script.
The HTML output uses native HTML5 validation, so the form works with JavaScript disabled and adds 0 KB of script to your page.
Every form ships with a hidden botcheck field. When it posts to splitforms, bots that tick it are dropped before they reach you.
Key facts
An HTML form generator turns a list of fields into ready-to-paste form markup. This one runs entirely in your browser and outputs HTML, a React component or Tailwind-styled HTML whose action points at splitforms, so submissions are stored and emailed to you without a server. Start from a ready-made HTML form template instead, or describe the form in plain English with the AI form generator.
| Price | Free. No signup to build and copy a form. |
|---|---|
| Outputs | HTML (with an optional CSS preset), a React JSX component, or HTML with Tailwind classes |
| Field types | 12: text, email, phone, URL, number, date, textarea, dropdown, checkbox, radio, hidden, file |
| Spam protection | Hidden honeypot field, on by default, plus smart spam filtering (server-side rules) on splitforms |
| Default action URL | https://splitforms.com/api/submit, or any URL that accepts a POST |
| Free plan | 500 submissions total (one-time), no credit card |
| Paid plans | Pro $5/month (5,000 submissions a month) or Annual $49/year (15,000 a month) |
| File uploads | Paid plans only: up to 5 files of 5 MB each per submission |
| JavaScript added | None for the HTML and Tailwind outputs (native HTML5 validation) |
Plan facts from /pricing. New to form markup? Read the HTML <form> element reference or the complete HTML form guide.
How to
Pick a starting form, adjust the fields, choose a style and an output, then paste the code into your site and swap in your access key. It takes about two minutes, and the result is standard HTML that renders the same in React, Vue, Astro, WordPress, Webflow or a plain .html file.
Start from the contact, newsletter, booking or feedback preset, then add or remove fields: text, email, phone, URL, number, date, textarea, dropdown, checkbox, radio, hidden or file.
Each field's name is the key its value arrives under. Tick Required for fields that must be filled; the browser enforces it with native HTML5 validation, no JavaScript.
Pick a CSS preset (or none), keep the honeypot spam trap on, then switch between HTML, a React JSX component, or HTML with Tailwind classes.
Copy the code into your site and replace YOUR_ACCESS_KEY with a free splitforms key. Each submission is then stored in your dashboard and emailed to you.
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 code: 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 total, 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 its rule-based spam filter, and forwards it to your email and a searchable dashboard. Or point the action at Formspree or your own route.

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.

Questions
Yes. Building and copying a form is free, with no signup and no usage limit, and the code is yours to use in any project. If the form posts to splitforms, the free plan covers 500 submissions total (one-time) with no credit card; Pro is $5/month for 5,000 submissions a month.
Yes, when it posts to splitforms. Each accepted submission is saved to your splitforms dashboard and emailed to you, on every plan including Free, with reply-to set to the visitor's email so you can answer from your inbox. Plain HTML can't send email by itself: a form needs a backend to receive the POST, and the generated action URL is that backend.
Yes. A hidden honeypot field (botcheck) is on by default: people never see it, and when a bot ticks it splitforms silently drops the submission. splitforms also runs smart spam filtering, a set of server-side rules, on every submission with no CAPTCHA. If you point the form at another backend, you have to check the honeypot value yourself.
12: text, email, phone, URL, number, date, textarea, dropdown, checkbox, radio, hidden, file. All are standard HTML inputs with no custom widgets. Radio buttons and checkbox groups are wrapped in a fieldset with a legend, and hidden fields send a fixed value (for example which page the lead came from).
Yes, on a paid splitforms plan. Add a File field and the generator switches the form to multipart encoding. Pro ($5/month) and Annual ($49/year) accept up to 5 files of 5 MB each per submission; on the free plan the file is dropped and the other fields still arrive.
To whatever URL is in the form's action attribute. The generator defaults to splitforms, but the output is a standard HTML POST, so it works with any endpoint that accepts form-encoded data, such as Formspree or your own server route. Change the destination by editing the action attribute. (Netlify Forms works differently: it needs a data-netlify attribute on a site hosted on Netlify, not an action URL.)
Those tools host the form for you and hand back a link or an embed on their domain, with their branding. This generator gives you the form's source instead: plain markup you own and restyle, no iframe and no embed script, and an action URL you can point at any backend.
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