Skip to content
StaticHero

Form backend

Contact forms for static sites, no backend required

Point any HTML form at StaticHero and every submission lands in your dashboard and inbox — with spam filtering, CSV export, webhooks and Airtable sync.

Setup
One attribute
Free plan
50 / month
Notifications
Email, webhook, Airtable
Export
CSV

In short

To add a working form to a static website, set the form’s action to /_forms/your-form-name and method to POST. StaticHero captures each submission, filters spam with a honeypot and rate limits, emails you a copy, and stores it in your dashboard. Netlify-style forms (data-netlify or a form-name field) also work without changes.

Updated

How to add a form to a static site

  1. 01

    Write a normal HTML form

    Use any fields you like — name, email, message, checkboxes, selects.

  2. 02

    Set the action

    Add action="/_forms/contact" and method="POST" to the <form> tag.

  3. 03

    Publish

    Upload your site. The form appears in the dashboard after its first submission.

  4. 04

    Get notified

    Each submission is emailed to you. Reply directly — we set the reply-to to the visitor’s email.

Works with plain HTML

No JavaScript, no SDK, no API keys in your page. Progressive enhancement friendly.

Spam protection

Hidden honeypot fields, per-visitor rate limits and content heuristics keep junk out of your inbox.

AJAX friendly

Send Accept: application/json and get a JSON response for fetch-based forms.

Custom redirects

Send people to your own thank-you page with a hidden _redirect field or a per-form setting.

Webhooks & Airtable

Forward every submission to Zapier, Make, Slack, your API or an Airtable base (Pro and Business).

Migrate from Netlify

Forms with data-netlify, netlify or a hidden form-name field work unchanged.

The complete example

Copy this into any page on your StaticHero site. The _gotcha field is invisible to people but bots fill it in, so those submissions are silently discarded.

contact.html
<form action="/_forms/contact" method="POST">
  <label>Name <input name="name" required></label>
  <label>Email <input name="email" type="email" required></label>
  <label>Message <textarea name="message" rows="5"></textarea></label>

  <!-- spam trap: keep it hidden -->
  <input name="_gotcha" tabindex="-1" autocomplete="off" style="display:none">
  <!-- optional: where to go afterwards -->
  <input type="hidden" name="_redirect" value="/thanks.html">

  <button type="submit">Send</button>
</form>

Submitting with JavaScript

For a single-page app or a smoother experience, post with fetch and ask for JSON back:

form.js
const res = await fetch("/_forms/newsletter", {
  method: "POST",
  headers: { "Content-Type": "application/json", Accept: "application/json" },
  body: JSON.stringify({ email: "maya@example.com" }),
});
const { ok, error } = await res.json();

Where submissions go

Every submission is stored in your dashboard, grouped by form, with read/unread state, a spam folder and one-click CSV export. Email notifications go to your account address or up to five addresses you choose per form.

On Pro and Business, each form can also call a webhook (great for Zapier, Make, n8n or Slack) and append a row to an Airtable table — see Airtable integration.

FAQ

Frequently asked questions

Still curious? Ask us anything — a person will reply.

Do I need to register forms before using them?

+

No. A form is created automatically the first time it receives a submission. The form name comes from the URL (/_forms/contact) or the form-name field.

Can visitors upload files through the form?

+

File inputs are accepted, but files themselves are not stored — the submission records the file name and size. For file collection, link to a dedicated upload service.

What happens if I hit my monthly limit?

+

New submissions are declined with a friendly message until the next month or until you upgrade. Existing submissions are never deleted.

Is the data GDPR friendly?

+

Submissions are only visible to you, can be exported or deleted at any time, and are never used for marketing. See our privacy policy and DPA for details.

Can I use forms on a custom domain?

+

Yes. /_forms/ works on every address your site is served from, including custom domains.

Your site could be live in the next minute.

One site free, forever. No credit card, no setup, no servers.