In this guide
Before your product has a database, it still needs to collect things: email addresses for the waitlist, messages from people with questions, feedback from early users. Building a backend for three forms is a week you don't need to spend. On most static hosts, you don't have to.
The three forms you need first
| Form | Fields | What it's for |
|---|---|---|
| Waitlist | Email (and optionally one question) | Your launch list; see the one-page test |
| Contact | Name, email, topic, message | Questions, corrections, partnership requests |
| Feedback | Useful yes/no, optional comment, page | What's missing, from the people using it |
Keep each one as short as possible. Every extra field costs you submissions. The waitlist's single optional question ("What do you use for this today?") is often worth it: it tells you who signed up.
How static-site forms work
On Netlify, you add data-netlify="true" (or netlify) and a unique name to an ordinary HTML form. When your site deploys, Netlify finds the form, and submissions appear in your dashboard under that name[1]. You need to enable form detection once in the dashboard first[1].
<form name="waitlist" method="POST" data-netlify="true">
<input type="email" name="email" required>
<button type="submit">Tell me when it's ready</button>
</form>
If your forms are built with JavaScript
The build only reads pre-built HTML, so forms rendered in the browser by a framework aren't detected automatically. Netlify's fix is either a hidden HTML copy of the form with matching field names, or a hidden form-name field in your JavaScript form[1].
Submitting without a page reload
To show a "thanks" message in place, send a URL-encoded POST to your site from JavaScript. Netlify's documentation notes the body must be URL-encoded; JSON isn't supported[1].
fetch("/", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams(new FormData(form)).toString()
})
What it costs
Netlify's April 2026 pricing update made form submissions free across all credit-based plans; previously each submission cost a credit[3]. Its billing documentation describes forms on credit-based plans as free and unlimited[2]. Legacy plans are metered per site instead[2].
File uploads through forms have their own limits: one file per field, requests up to 8 MB, and a 30-second upload timeout[1]. For anything bigger (photo uploads, documents), use a proper storage service.
Keeping spam out
Any public form gets spam within days. Two cheap defences cover most of it:
- A honeypot field: a hidden input real people never see or fill in. Bots fill every field; submissions with the honeypot filled are discarded.
- A challenge such as reCAPTCHA for forms that keep getting hit; Netlify supports reCAPTCHA 2 on detected forms[1].
Start with the honeypot. Add a challenge only if spam gets through, because challenges also cost you real submissions.
Getting notified, and getting the data out
Submissions sitting in a dashboard you never open are useless. Netlify can send each submission by email or as an HTTP POST to another service[1].
A setup that works for one person
- Email notifications for the contact form, to the inbox you read daily.
- A weekly export of the waitlist into your email tool or a spreadsheet.
- Feedback forwarded to wherever you plan your work, tagged with the page it came from.
Handling people's details sensibly
- Say in one line next to the form what you'll do with the email address.
- Only collect what you'll use. A waitlist needs an email, not a phone number.
- For forms collecting sensitive personal information, Netlify recommends extra security measures[1]; better still, don't collect it in a simple form at all.
When you've outgrown form handling
Host form handling is enough when
- You're collecting emails, messages and simple feedback
- A person reads each submission
- Volume is in the hundreds a month
Move to your own backend when
- Submissions need to create accounts or records in your product
- You need validation against your own data
- Uploads are large or frequent
The middle step is a serverless function that receives the form and writes to your database; see functions or a server.
Three forms, written out
Hypothetical examples
Waitlist
Headline: "Get one email when it's ready." One email field, one optional question: "How do you handle this today?" Button: "Tell me when it's ready." A line underneath: "One email at launch. No spam, unsubscribe any time."
Contact
Fields: name (optional), email, a topic dropdown ("A price has changed", "Something didn't work", "Suggestion", "Other"), message. The topic lets you sort replies in seconds and spot patterns: if half your messages are "something didn't work", that's your next week's priority.
Feedback at the end of a page
"Was this useful?" with yes and no, plus an optional box: "What was missing?" Include the page name in a hidden field, so you know which page each answer is about. Short forms like this get far more responses than a survey link.
What to do with what you collect
| Form | How often to look | What to do |
|---|---|---|
| Contact | Daily | Reply within two working days; tag by topic |
| Feedback | Weekly | Group by page; fix the most-mentioned gap first |
| Waitlist | Weekly | Export to your email tool; write once a month so it doesn't go cold |
Form setups that lose messages
- Forgetting to enable form detection, then wondering why nothing arrives.
- Duplicate form names across pages, mixing two forms' data into one list.
- Not testing on the live domain: forms that work locally may not be detected until deployed.
- Collecting emails and never writing to them. A waitlist goes cold within weeks.
Questions
Can I use these forms for my product's sign-up?
No. Sign-up needs authentication and your own database. These forms are for collecting messages and interest, not creating accounts.
What if I move hosts later?
Export your submissions first. Then either use the new host's form handling or a small function of your own; the HTML forms themselves barely change.
Add a waitlist form with a honeypot to your landing page today, turn on email notifications, and submit it once yourself from your phone on the live domain.
Sources
Checked 14 November 2026. Numbers in brackets in the text point to these sources.



