Contact forms on sites with no backend
Everything we know about taking form submissions on a static site — the architectures, the copy-paste integrations for each host and framework, and straight comparisons of the tools worth considering, including the ones that aren't ours.
Start here
The core question — how do you take submissions on a site with no server behind it?
How to add a contact form to a static website
The four real architectures for taking submissions on a site with no server — and how to pick.
Read Plain HTMLHTML contact form with no backend
One HTML file, one fetch call, zero build tooling. For sites that are just files.
Read ArchitectureContact form without a backend
The five jobs a backend was doing — and how each gets covered with no server of your own.
Read Google SheetsSend contact form submissions to a Google Sheet
Form → spreadsheet, in your own Drive. The DIY script route vs. the two-minute one.
Read Category guideWhat a form backend is, and how to choose one
What a form backend actually does, and the eight questions worth asking before you pick.
Read AI-built sitesAdding a contact form to an AI-generated website
The form your AI builder generated looks perfect and goes nowhere. Here’s the missing half.
ReadBy host
Where your static site is deployed changes the options you have. Pick yours.
Adding a contact form to a GitHub Pages site
GitHub Pages runs no server-side code at all. An external endpoint is the only route — here it is.
Read NetlifyContact forms on Netlify: the built-in option and the portable one
Netlify Forms is excellent. Here’s when to use it, and when you want the data in your own Drive.
Read Cloudflare PagesAdding a contact form to a Cloudflare Pages site
Write a Pages Function, or skip it entirely — plus the free Turnstile pairing.
Read VercelA contact form on Vercel without an API route
An API route is one file — and then it’s yours forever. Here’s the static alternative.
ReadBy framework
Copy-paste integrations that match how your generator actually builds pages.
Adding a contact form to an Astro site
A drop-in `.astro` component that keeps your output static — no adapter, no island required.
Read HugoAdding a contact form to a Hugo site
A partial plus a shortcode, endpoint in `hugo.toml`, usable from any page or theme.
Read JekyllAdding a contact form to a Jekyll site
An `_includes` partial with the endpoint in `_config.yml` — plugin-free, GitHub Pages safe.
Read ReactA React contact form with no backend
Component, states, honeypot and a reusable hook — no API route, no server.
ReadCompare your options
Honest side-by-sides. There are several good tools here — these pages help you pick.
RG Forms vs Formspree
A mature, full-featured platform vs. an endpoint inside your own Google account.
Read ComparisonRG Forms vs FormSubmit
No-account email forwarding vs. a two-minute setup that keeps a permanent record.
Read ComparisonRG Forms vs Formspark
Two developer-first tools. The split is pricing model and where submissions live.
Read ComparisonRG Forms vs Google Forms
Both end in a spreadsheet. One hosts the form for you; the other takes the form you built.
Read Round-upThe best contact form backends for static sites
Six good options, what each is best at, and the four questions that actually decide it.
Read Round-upThe best free contact form options for HTML websites
What “free” actually means in each option, and exactly where each one’s ceiling is.
Read TutorialHow to add a working contact form to a static website
Start to finish — endpoint, markup, states, spam, and the verification step people skip.
ReadSkip the reading?
Sign in with Google and your endpoint is live in about ninety seconds.