GitHub Pages, Netlify, Neocities, or a plain folder of HTML — point your form at a FormLM endpoint and every submission is stored. Free to start.
A static site is a folder of files served as-is. That's what makes it fast, cheap, and endlessly hostable — GitHub Pages, Netlify, Cloudflare Pages, Vercel, Neocities, an S3 bucket. But there's no process running to receive a POST, so the moment a visitor hits Submit, the submission has nowhere to go. The classic workarounds each cost something:
mailto: links depend on the visitor's mail client and leak the address to scrapers. Host-native form handling (like Netlify Forms) locks you to that host — move to GitHub Pages and the form dies. Building a real backend means a server, a database, deployment, and maintenance, to collect what is often just contact messages.
The category that solves this cleanly is a form backend: your page stays static, and the form's action attribute points at a hosted endpoint that stores submissions. FormLM's Data API is a form backend that also speaks JSON, documents itself for AI agents at ?help, and lets you query the stored data back over HTTP.
<!-- Before: a form that goes nowhere --> <form action="#" method="POST"> ... </form> <!-- After: a form that stores its submissions --> <form action="https://formlm.me/api/v3/share/YOUR_TOKEN/form" method="POST"> <input name="name" required> <input name="email" type="email" required> <textarea name="message"></textarea> <button type="submit">Send</button> </form>
No JavaScript — a native form POST works even with JS blocked.
Host-agnostic — the same endpoint works on any static host or a local file.
CORS enabled — if you do add JS, fetch calls succeed from any origin.
Fields auto-create — new input names become new columns automatically.
Getting the token: create a form in FormLM (describe it in one sentence and AI generates it), open the Publish tab, enable the Data API, and copy the endpoint. Submissions appear in your FormLM dashboard and stay queryable.
A native form POST navigates to the endpoint's JSON response. If you'd rather show your own thank-you state, a few lines of JavaScript intercept the submit and send it via fetch — the same endpoint, same storage, better UX:
const form = document.querySelector('form'); form.addEventListener('submit', async (e) => { e.preventDefault(); await fetch(form.action, { method: "POST", body: new FormData(form) }); form.reset(); // show your own "thank you" message here });
Both paths store identical records — pick per page, not per project. A documentation site might keep the no-JS version; a landing page with a design system might use the fetch version. If you want visitors to receive a personalized report instead of a plain thank-you, that's where FormLM's assessment engine picks up: the same submission can trigger scoring and a branded PDF.
Yes. The page itself stays static — the form's action attribute points at an external form endpoint that stores the submission. No server-side code runs on your host, so it works on GitHub Pages, Netlify, Vercel, Cloudflare Pages, Neocities, or any static file host.
Create a form endpoint, then set your HTML form's action attribute to that endpoint URL with method POST. GitHub Pages serves the page exactly as before; submissions are stored by the endpoint service. The same steps apply to any static host.
Yes. FormLM's form endpoint accepts a native application/x-www-form-urlencoded POST, so a plain form element with an action attribute works with JavaScript disabled or blocked. JavaScript is only needed if you want to handle the response without a page navigation.
Netlify Forms only works when your site is built and deployed on Netlify. A form endpoint works everywhere — GitHub Pages, any host, even a local file. FormLM also stores structured records you can query back over an API instead of only forwarding submissions to email.
Into your FormLM form's submission records. You can browse them in FormLM, export CSV, and — if you enable the query API — read them back over HTTP for dashboards or automation.
Free endpoint, native HTML support, submissions you can actually query.
Create your free endpoint →