The form backend for static sites
you never have to maintain.
Paste one API key as your form's action. Submissions land in your dashboard and ping your phone instantly — and never leave the EU.
Free tier: 5 forms · 250 submissions/month · No credit card.
Built for the people who ship static sites for clients — freelancers and studios alike.
<form action="https://formhook.app/f/fh_…" method="POST">
<input name="email" type="email" required>
<textarea name="message" required></textarea>
<button type="submit">Send</button>
</form>That's the integration. There is no step two.
Try it right here.
Fill out the form. Watch it land in the dashboard — live.
Submissions appear here the moment they arrive.
Built for the way you actually ship.
Three things matter for a form backend behind a static site: notifications you actually notice, hosting you control, and an integration that takes thirty seconds.
Native push notifications
Get a system-level notification every time a form is submitted, even when your browser is closed. Works on macOS, Windows, Linux, Android, and iOS PWA.
Submissions kept forever
Every submission lives in your dashboard for as long as you want it. No 30-day archive that quietly drops your leads. Even on the Free tier.
Drop-in integration
Paste the API key as your form's action attribute. Works with raw HTML, fetch, React, anything that can POST. JSON, form-encoded, and multipart all supported.
Built to hand off to clients.
The form is the one piece of a static site that needs a backend — and the one piece you don't want to babysit after launch. Formhook is what you set up once and stop thinking about.
- Transfer the form to the client when the project wraps. They own it, they get the leads, you're off the hook. It's how we run our own client work.
- One form per client site, each with its own key and its own notifications. No shared inbox, no crossed wires.
- Maintenance-free after handoff. No server, no cron, no "the contact form stopped working" email six months later.
- Pass EU data residency straight into your client's privacy policy. No DPA gymnastics, no explaining Schrems to a small business.
EU hosting, no asterisks.
Your submissions are stored in the EU and never leave it — nothing to assess, nothing to renegotiate, nothing that ends up in court.
Most form backends process your submissions under US jurisdiction. There's a legal framework for that today — the EU–U.S. Data Privacy Framework — but it's the third attempt: Safe Harbor was struck down, Privacy Shield was struck down, and the DPF is already under appeal. Relying on it means betting your contact form on a framework that keeps ending up in court. Formhook's answer is structural: submissions are stored in the EU and never leave it — no transfer mechanism to monitor, no Transfer Impact Assessment to file, nothing to scramble over when the next ruling lands.
- Text submissions stored on a Hetzner VPS in Germany — backed up, off-box.
- File uploads kept in Cloudflare R2 (EU region) — never an AWS or GCP data lake.
- Cloudflare sits in front for TLS and DDoS; submission bodies are never logged or cached at the edge.
Quickstart
Five lines of HTML, or one fetch call.
Sign up, create a form, copy the API key. From there it's identical to a normal HTML form post — Formhook handles parsing, normalization, abuse protection, and delivery to your dashboard.
- Hidden honeypot field stops the lazy bots; Cloudflare Turnstile handles the rest.
- Optional
_redirectfield for native form posts — strictly validated against your origin allowlist, no open redirects. - Per-form CORS allowlist. Browser submissions from unknown origins are rejected at the edge.
// Or with fetch:
await fetch("https://formhook.app/f/fh_…", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
email: "user@example.com",
message: "Hello",
}),
});Production defaults, nothing to hand-roll.
Everything you'd otherwise build yourself, on by default — no add-on, no premium tier.
Spam handled
Hidden honeypot, per-IP and per-form rate limits, and optional Cloudflare Turnstile.
Your data, kept
Every submission stored in the EU for as long as you want it, with encrypted off-box backups.
Notifications that reach you
Native web push to every device, live dashboard updates, and per-form mute.
Secure by default
TLS and HSTS, hashed credentials, and email verified at sign-in.
Works with your stack.
One drop-in snippet per framework. Click yours for a copy-pasteable example.
Free for what fits. Studio for client work.
Three tiers, billed in EUR via Polar. Annual billing gets you two months free — VAT and invoicing handled for you.
Free
€0/ mo
For portfolios, landing pages, and the contact form that gets one submission a week.
5 forms · 250 submissions / month
- Web push and email notifications
- Honeypot, rate limiting, CORS, optional Turnstile
- Submissions kept forever
Pro
€12.50/ mo€15
billed €150/year
For your own work, at scale.
Unlimited forms · 5,000 submissions / month
- Everything in Free
- Reply from your own domain
- Webhooks and file uploads
- Priority email support
Studio
€40.83/ mo€49
billed €490/year
For freelancers and studios shipping sites for clients.
Unlimited forms · 25,000 submissions / month
- Everything in Pro
- Client transfer — hand any form to the client
- Provision a form per client; multi-client console
- Larger file-storage allowance
Your data, your exit
Can I export my submissions?
What happens if Formhook shuts down?
action URL is the only integration point, so switching providers is editing one line of HTML. Your forms keep working until the last day, and leaving takes one line.Ship the form, not the backend.
You shouldn't have to write a form receiver in 2026. Spend ten seconds connecting your HTML, then move on.