Paste your form markup
Copy a complete <form> element or a full HTML page that contains a form. The converter reads the first form it finds.
HTML form to JSON
Updated · plan facts checked against /pricing
Paste your <form> markup and get a JSON schema plus a realistic sample payload instantly — the data contract you need before a backend exists. Everything parses in your browser, no signup.

input
detected fields
{
"type": "object",
"required": [
"name",
"email",
"message"
],
"properties": {
"access_key": {
"type": "string",
"title": "Access Key",
"writeOnly": true
},
"name": {
"type": "string",
"title": "Name"
},
"email": {
"type": "string",
"title": "Email",
"format": "email"
},
"budget": {
"type": "string",
"title": "Budget",
"enum": [
"under-5k",
"5k-20k",
"20k-plus"
]
},
"message": {
"type": "string",
"title": "Message"
},
"botcheck": {
"type": "boolean",
"title": "Botcheck"
}
}
}{
"access_key": "YOUR_ACCESS_KEY",
"name": "Name",
"email": "[email protected]",
"budget": "under-5k",
"message": "Hi, I would like to talk about a project.",
"botcheck": false
}<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<label>
Name
<input name="name" required />
</label>
<label>
Email
<input name="email" type="email" required />
</label>
<label>
Budget
<select name="budget">
<option value="under-5k">under-5k</option>
<option value="5k-20k">5k-20k</option>
<option value="20k-plus">20k-plus</option>
</select>
</label>
<label>
Message
<textarea name="message" required></textarea>
</label>
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
<button type="submit">Send</button>
</form>type, properties, required, enum, and writeOnly keywords, so validators and code generators read the schema directly.
A realistic submission object for webhook tests, API examples, and integration specs.
Clean markup that POSTs to a real backend — paste your access key and the form is live.
HTML form to JSON schema
The converter reads every field — inputs, textareas, selects, radio and checkbox groups, hidden fields, labels, and options — and returns a JSON Schema-style object like this, plus a matching sample payload and splitforms-ready HTML.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "Contact form",
"properties": {
"name": { "type": "string" },
"email": { "type": "string", "format": "email" },
"message": { "type": "string" },
"topic": { "type": "string", "enum": ["Sales", "Support"] },
"access_key": { "type": "string", "writeOnly": true }
},
"required": ["name", "email", "message"]
}Setup
Four steps from raw markup to a working, deploy-ready form — all in the browser, no signup.
Copy a complete <form> element or a full HTML page that contains a form. The converter reads the first form it finds.
Confirm field names, labels, types, required status, hidden fields, and option values before copying the JSON output.
Use the JSON schema for documentation and validation. Use the sample payload for webhook tests, API examples, and integration specs.
Copy the regenerated HTML, paste your access key, and deploy a working form with email delivery, spam filtering, dashboard storage, and webhooks.
Why JSON
Developers need to document a form before the backend is finished. A JSON schema gives the API team a contract, gives QA a payload to test, and gives automation tools a predictable shape. Copy the regenerated HTML, paste your access key, and the same fields become webhook payloads and dashboard rows. To POST that JSON from the page with fetch, see how to send form data to an API.

What you get
Three usable outputs from one paste — a schema to document and validate against, a payload to test with, and clean HTML that submits to a real backend.

API + MCP
Need the JSON without a live form? The REST API returns stored submissions in this same shape, and the MCP server lets AI agents create forms and read submissions using the field names shown in the schema.

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.

FAQ
It parses the first form in your pasted HTML and generates three outputs: a JSON schema for the named fields, a sample submission payload, and clean splitforms-ready HTML that posts to a real backend. It detects inputs, textareas, selects, radio groups, checkbox groups, hidden fields, required fields, labels, placeholders, and option values.
No. The converter runs entirely in your browser using DOMParser. The HTML you paste is never sent to splitforms or any third party. You can load the page, disconnect from the internet, and keep converting forms locally.
Paste rendered HTML, not JSX. React, Next.js, Vue, Svelte, and Astro all render normal HTML in the browser. Open DevTools, copy the outerHTML for the form element, then paste that markup into the converter.
Yes. The schema is a JSON Schema-style object with type, properties, required, enum, and writeOnly keywords, so validators and code generators can read it directly. Text inputs map to string, number and range inputs to number, checkboxes to boolean, and multi-selects and choice groups to array, with any detected option values listed under enum.
Copy the splitforms-ready HTML output, replace YOUR_ACCESS_KEY with your free splitforms key, and paste the form into your site. The form posts to splitforms, which handles dashboard storage and spam filtering on Free; Free includes owner email delivery; paid plans add webhooks.
Yes. Hidden fields are detected and marked as write-only in the schema. If the form does not include a splitforms access_key or botcheck honeypot, the generated HTML adds both so the copied form can submit and resist basic spam.
Yes. GET https://splitforms.com/api/submissions with an Authorization: Bearer token returns { submissions, has_more } as JSON, filterable by form, limit, before, or since (60 requests/min). Your token lives at Dashboard → MCP, and the JSON shape it returns matches what this converter generates.
Yes. splitforms ships a free MCP server (all plans) with tools like create_form, generate_form, and list_submissions, so an agent can create a form and read its submissions using the same field names this converter outputs. A chatbot that collects a lead in conversation can POST the gathered fields as JSON to https://splitforms.com/api/submit with the form's access_key, exactly like the splitforms-ready HTML this page generates.
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