01The three options
| Option | How it works | Best for | Watch out for |
|---|---|---|---|
| Host forms (Netlify) | Host detects the form at deploy and stores submissions | Sites already on Netlify | Tied to that host |
| Form service (Formspree and similar) | Form posts to the service, which emails or stores it | Any host, no code | Free tiers are small |
| Serverless function | Your function receives the post and sends an email | Developers wanting control | You maintain it and handle spam |
02Option 1: Netlify Forms
If your site is on Netlify, add the netlify attribute (or data-netlify="true") and a name to your form tag. According to Netlify's documentation, its build system detects the form at deploy time, injects a hidden form-name field, and stores submissions you can view and forward by email. Forms rendered only by JavaScript need a hidden static copy so the scanner can find them.
Netlify's April 2026 pricing update made form submissions free on its credit-based plans; older accounts may still be on legacy limits.
03Option 2: A form backend service
Services like Formspree give you an endpoint URL; set it as your form's action and submissions arrive by email or in a dashboard. It works on any host, including GitHub Pages and Cloudflare Pages. Formspree's plans page lists a free plan of 50 submissions a month, described as for testing and development, with paid plans for more.
- 1Create a form in the serviceYou get a unique endpoint URL.
- 2Point your form at itSet the form's action to the endpoint and method to POST.
- 3Name your fieldsname, email and message attributes become the labels in your email.
- 4Add a thank-you pageRedirect to a simple confirmation so people know it worked.
- 5Test from a phoneSubmit once from a real device before launch.
04Option 3: A serverless function
Most static hosts can run small functions on request. A function can receive the form, validate it, and send an email through a transactional email service. This gives full control over fields, validation and where data goes, with a little code and an email provider account. It suits developers who want no third-party form service in the middle.
05Stopping spam
Public forms attract bots within days. Add a honeypot (a hidden field real people leave empty), use your service's built-in spam filtering, and consider a lightweight challenge if spam persists. Avoid publishing your email address in plain text on the page; the form exists partly to protect it.
- Honeypot field: hidden from people, filled in by bots.
- Built-in filtering: most services and Netlify include it.
- Challenges: add one only if simpler methods fail, since they add friction.
06Making the form itself work well
Ask only for what you need (name, email, message is usually enough), label every field visibly rather than relying on placeholder text, show clear errors and confirm success. If the form collects personal data, link a privacy policy nearby; does a website need a privacy policy? explains when that is required. For the bigger picture of static sites, see static vs dynamic website and how to host a website for free.
What people who tried it say
Developers on Hacker News who build static sites typically recommend a hosted form service or the host's own form handling for simple contact forms, and a small serverless function when they want to avoid third parties.
- Ask HN: What's the simplest static website generator?Hacker News
Commenters building simple static sites point to free static hosts and third-party services for anything dynamic, such as forms.
Looking for more first-hand opinions? Search Reddit for “how to add a contact form to a static website”. We link the live threads rather than summarizing them, so you read them in full.
Our take
use your host's built-in forms if it has them, a form service if it does not, and write a function only when you have a reason. A contact form is not where to spend engineering time.
Where this falls short
Free-tier limits and pricing for form services and hosts change often; Netlify changed its form pricing in April 2026. Check current terms, and remember that any service receiving submissions also handles your visitors' data.
Sites built with Orlume can include a contact form from the prompt, and are published in one click, so you do not wire up a form service by hand.
Free to start · No card required · Live in one click
Sources
- 1.Forms setup · Netlify Docs
- 2.Pricing updates, April 2026 · Netlify
- 3.Formspree plans · Formspree
Researched and written by the Orlume team · Updated October 2026

