Price your idea
← All guides

Updated November 2026 in Build

Waitlists, contact forms and feedback without building a backend

The forms every small product needs before it has a server: a waitlist, a contact form, a feedback box. How to collect them on a static site, handle spam, get notified and keep the data useful.

BThe Builder Handbook team11 min read. Every price checked on the provider's own page.
A paper form going into an inbox tray
In this guide
  1. The three forms you need first
  2. How static-site forms work
  3. What it costs
  4. Keeping spam out
  5. Getting notified, and getting the data out
  6. Handling people's details sensibly
  7. When you've outgrown form handling
  8. Three forms, written out
  9. What to do with what you collect
  10. Form setups that lose messages
  11. Questions

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

FormFieldsWhat it's for
WaitlistEmail (and optionally one question)Your launch list; see the one-page test
ContactName, email, topic, messageQuestions, corrections, partnership requests
FeedbackUseful yes/no, optional comment, pageWhat'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

  1. Email notifications for the contact form, to the inbox you read daily.
  2. A weekly export of the waitlist into your email tool or a spreadsheet.
  3. 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

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

FormHow often to lookWhat to do
ContactDailyReply within two working days; tag by topic
FeedbackWeeklyGroup by page; fix the most-mentioned gap first
WaitlistWeeklyExport 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.

B
The Builder Handbook teamWe write guides for people building small software alone or in pairs. Every price is checked against the provider's own page. More about us

Sources

Checked 14 November 2026. Numbers in brackets in the text point to these sources.

  1. Netlify docs: Forms setup
  2. Netlify docs: Forms usage and billing
  3. Netlify changelog: pricing updates, April 2026
The weekly bill

One product's real costs, every week

What it pays for, what it earns, and the cost that surprised its makers. Plus new guides when they're out.

Free. One email a week. Unsubscribe any time.