Insane Forms
Start a form

The form backendfor Sanity sites.

Put one URL in your form's action and stop writing form handlers. Submissions are stored in the EU or the US, spam is held back, and the people who need them get an email.

Fill it in. Watch it land.

The commission form from a ceramics studio's site. Change a field and see what the endpoint answers and what lands in the studio's inbox. Nothing leaves your browser.

Commission a piece
The endpoint answers, and the Submission is stored in the EU.
POST https://submit.insaneforms.com/f/frm_8Kq2xN
Accept: application/json
← 201 Created { "ok": true, "id": "sub_7f3k" }
And the studio gets this. Hitting reply writes to the visitor.
subject
New Submission on Commissions
to
studio@atelierondo.test
reply-to
ines@cafebica.test
name
Inês Carvalho
email
ines@cafebica.test
message
We open a café in Lisbon in March. Could you make 24 espresso cups in the tenmoku glaze? Happy to wait for the next firing.

No SDK. No schema.

Post plain HTML, send JSON with fetch, or call it from your server with a Submit Key. Whatever fields arrive get stored, so there's nothing to declare first.

<form action="https://submit.insaneforms.com/f/frm_8Kq2xN" method="POST">
<label>Name <input name="name" required></label>
<label>Email <input type="email" name="email" required></label>
<label>What should we make? <textarea name="message"></textarea></label>
<!-- Honeypot: hidden from people, filled in by bots -->
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off" style="display:none">
<button type="submit">Send</button>
</form>

The HTML quickstart

One request carries

urlencoded or JSON body
1 MB
multipart, files included
4.5 MB
Fields
100
Characters per value
65,536

The endpoint answers

A plain HTML post
303 to your page
A request for JSON
201 with the id
Too many requests
429 with Retry-After

Rate limits

One visitor IP
10 a minute
One Form
300 a minute

Read Submissions in Studio

Link a Project to your Sanity project. The Studio plugin, which we're building now, gives your editors a Submissions tool, and the role they already have in Sanity decides what they can do there.

Submissions stay with Insane Forms and never enter your dataset. Until the plugin ships, they're in the dashboard. What's ready today

Atelier OndoStructureVisionSubmissions2
  • Inês CarvalhoCommissions14:03
  • Kenji AraiWorkshops13:58
  • Amara NwosuStockists12:41
  • Tomasz WróbelCommissions11:20
  • Sofía RestrepoWorkshops09:47
Mark readSpamExport CSVDelete Admin
Access from Sanity roles
Actions allowed for each Sanity role
ActionViewerEditorDeveloperAdministrator
Read Submissions and open filesYesYesYesYes
Mark read, Spam or not SpamNoYesYesYes
Export CSV or JSONNoYesYesYes
DeleteNoNoNoYes

Custom and unknown roles can read, and nothing more.

Every Form does this

Spam goes to Spam

Every Form checks a honeypot field and rate limits each visitor and each Form. Turn on Allowed Origins or Cloudflare Turnstile where a Form draws targeted spam. Caught Submissions wait in Spam for 30 days, send no email and don't count towards your Plan. Spam protection

Files come with the post

A plain HTML form can send files with the Submission, up to 4.5 MB in all. Direct uploads take bigger files straight to storage, up to 25 MB each on the beta Plan. Every file is private and opens through a link that expires. File uploads

The right people get an email

Each Form has its own Recipients. They get every field and a link to each file. When the form asks for an email address, a reply goes straight to the visitor. Switch a Form to link-only and the email carries a link to the Submission instead. Notifications

Exports when someone asks

Download what you're looking at as CSV or JSON. Large exports run in the background and email you a link that works for 7 days. Submissions and exports

Being built now: the Sanity Studio plugin, a React library, a REST API, signed webhooks, a Zapier app, an n8n node and an MCP server. Each one gets its docs the day it ships.

EU or US. Pick once.

A Workspace picks its Region when it's created and keeps it. Choose one below and see what lives where.

Workspace Region

An EU Workspace keeps

Submissions and their fields
In the EU
Files
In the EU
Exports
In the EU
Webhook delivery logs
In the EU
Users, Workspaces, Forms and Recipients
In the EU
Visitor IP addresses
Never stored

A Notification travels by email, so no Region can hold it. Switch a Form to link-only emails to keep the values in the Region. Regions and your data

Send your first Submission.

Free during the beta, with 1,000 Submissions a month for each Workspace. Create a Form, copy its URL and paste it into your form's action. That's the whole integration.

What the beta Plan includes

Start a form
Rows of small espresso cups in a dark tenmoku glaze on a wooden ware board, one tipped on its side, lit by a low work lamp