Formstork

GUIDE

How to Handle an HTML Form Without a Backend

A plain HTML form is just markup. The moment a visitor hits submit, the data has to go somewhere, and by default that somewhere is a server you write and host. This guide explains why forms need a backend, the approaches that actually work when you do not want to run one, and how a hosted form backend like Formstork fills the gap.

What "no backend" actually means

An HTML form only describes fields and a submit button. When the browser sends that data, the form's action attribute points at a URL, and something on the other end has to receive, validate, and store it. Removing your own backend does not remove that step, it just means another service handles it for you.

Why mailto: and client-side tricks fall short

A mailto: action just opens the visitor's own mail app, which many people do not have configured, and nothing gets stored. Pure client-side JavaScript cannot send email or persist data on its own, and any API key you put in the browser is public. To collect submissions reliably you still need a server-side endpoint, even if you did not build it.

The pattern that works: point action at a hosted endpoint

Instead of writing a server, you set the form's action to a hosted form backend and add a hidden field that identifies your form. The visitor submits with a normal form-encoded or multipart POST, and the service does the receiving, validation, email, and storage. Your site stays fully static, so it can live on GitHub Pages, Netlify, or any CDN.

What to check before you pick one

Look for reliable email delivery with the visitor's address set as reply-to, so you can answer straight from your inbox. Confirm submissions are stored and exportable, not just forwarded once, and that spam protection is built in. If you collect files or want data pushed into tools like Slack or a spreadsheet, check that uploads and integrations are supported.

How Formstork handles it

With Formstork you point your form at https://api.formstork.com/submit and add a hidden access_key field, or use the short /f/ACCESS_KEY URL. Every submission emails you with the visitor's address as reply-to and lands in a searchable, taggable dashboard, with spam filtering, CSV and JSON export, and integrations like Slack, Notion, Google Sheets, and signed webhooks. The free plan covers 250 submissions per month with a 90-day retention window and no credit card, while paid plans add forever retention, autoresponders, and file uploads.

html
<form action="https://api.formstork.com/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <input type="email" name="email" placeholder="Your email" required>
  <textarea name="message" placeholder="Your message" required></textarea>
  <button type="submit">Send</button>
</form>

Frequently asked questions

Can an HTML form work without any backend code?

Yes, as long as the form posts to a hosted endpoint that receives the data. Your pages stay static HTML, and the form backend handles email, storage, and spam. You never write or deploy server code yourself.

Is it safe to put the access key in client-side HTML?

Yes. The access_key identifies which form a submission belongs to, not a secret that grants account access. It is designed to sit in public HTML, and you protect the endpoint with spam filtering, honeypots, and optional CAPTCHA instead.

Where can I host a static form like this?

Anywhere that serves static files, including GitHub Pages, Netlify, Vercel, Cloudflare Pages, or plain S3. Because the form posts to Formstork over HTTPS, no server runtime is required on your side. You can also skip hosting entirely and use a hosted Formstork form page.

Try Formstork free

250 submissions a month with a full dashboard. No credit card required.

Get your access keyRead the docs