The short answer
For a plain HTML website, the genuinely free options are: FormSubmit, which forwards submissions to your inbox with no account; the free tiers of hosted services like Formspree, which include a monthly submission allowance; your host's built-in forms if you're on Netlify; Google Forms if an embedded form is acceptable; and RG Forms, which is free without a tier because it provisions a Google Sheet and an Apps Script endpoint inside your own Google account rather than hosting anything itself. The distinction that matters is between free-as-a-tier, which has a ceiling and a paid plan above it, and free-because-there-is-no-infrastructure.
Two kinds of free
Free as a tier. A company hosts your submissions and gives away a slice of capacity — some number per month — hoping you’ll grow into a paid plan. Perfectly honest, and often the right choice: you get a real product with support, and the ceiling might be well above what you’ll ever use. But there is a ceiling, and there’s a bill on the other side of it.
Free because nothing is being hosted for you. The endpoint runs on infrastructure you already have. Nobody is paying to store your data, so nobody needs to charge you. This is how RG Forms works — the Apps Script and the Sheet sit in your own Google account, on Google’s free quotas.
Neither is better in the abstract. But when you’re choosing something for a site you’ll still be maintaining in three years, it’s worth knowing which one you picked.
The free options, and where each ceiling sits
| Option | What free means | The ceiling |
|---|---|---|
| FormSubmit | Free, no account needed | You get emails, not a stored record |
| Formspree free tier | Free monthly submission allowance on a paid platform | The monthly allowance; paid plans above it |
| Netlify Forms | Included with your Netlify site, with a plan allowance | Tied to Netlify; stops if you move hosts |
| Google Forms | Free, unlimited | It’s an embed — the form won’t match your design |
| RG Forms | Free with no tier — the endpoint is in your own Google account | ~100 notification emails/day on free Gmail (rows still save) |
| Your own function | Free-ish on generous hosting tiers | You maintain code, storage and email delivery |
For a plain HTML site specifically
If your site is literally files — no framework, no build step, no npm — you want an option whose integration is markup plus a small script, with no SDK and no bundler. FormSubmit and RG Forms both qualify; hosted services generally do too, since a form endpoint is a form endpoint.
The one to think twice about is a solution requiring a build step or a package, because on a site that has neither, you’ve just introduced a toolchain to collect an email address.
The whole thing, on a plain HTML page
No dependencies, no build, works when you open the file locally:
<form id="contact-form">
<label>Name <input name="name" required /></label>
<label>Email <input type="email" name="email" required /></label>
<label>Message <textarea name="message" required></textarea></label>
<!-- Honeypot: humans never see it, bots fill it in -->
<input type="text" name="_hp" tabindex="-1" autocomplete="off"
style="position:absolute;left:-9999px" aria-hidden="true" />
<button type="submit">Send</button>
<p id="form-status" role="status"></p>
</form>
<script>
const ENDPOINT = "https://script.google.com/macros/s/AKfycb.../exec";
const form = document.getElementById("contact-form");
const status = document.getElementById("form-status");
form.addEventListener("submit", async (event) => {
event.preventDefault();
status.textContent = "Sending…";
const res = await fetch(ENDPOINT, {
method: "POST",
// text/plain avoids the CORS preflight Apps Script can't answer
headers: { "Content-Type": "text/plain" },
body: JSON.stringify({
tab: "contact",
fields: Object.fromEntries(new FormData(form)),
}),
});
const data = await res.json();
status.textContent =
data.result === "success" ? "Thanks — we'll be in touch." : "Something went wrong.";
if (data.result === "success") form.reset();
});
</script>Common questions
Is a free form backend reliable enough for a business site?
Yes, with one condition: make sure submissions are stored somewhere durable, not just emailed. An email can be filtered or deleted; a spreadsheet row stays put.
What happens to RG Forms if it gets popular and costs money to run?
It doesn’t, structurally. The site is static and the endpoints live in users’ own Google accounts, so more users don’t create more cost for us. That’s why there’s no paid tier to introduce later.
Do free options put ads or branding on my form?
Not RG Forms — the markup is entirely yours. Some free tiers add a small “powered by” to their hosted thank-you page or notification emails; check before you launch if that matters.
What’s the catch with RG Forms?
Three real ones: it needs JavaScript, it doesn’t do file uploads, and notification email is capped by Google at roughly 100 recipients/day on a free Gmail account. Rows keep saving past that cap — only the email is skipped.
More answers in the full FAQ.