Add a contact form to a static site (no backend)

Static hosts don't run server code, so a plain contact form has nowhere to send data. FormBeam is a form endpoint you point at: submissions show up in email and in a dashboard.

I built it for my own static sites so I wouldn't spin up a server every time I needed a contact form. Free plan is 100 submissions/month.

Quick comparison

Honest tradeoffs, not a slam dunk table.

OptionGood forDownsides
Google FormsZero setup, freeIframe / Google look, weak fit if you want your own UI
Roll your ownFull controlEmail, spam, storage, and uptime become your problem
Formspree / Basin / similarDrop-in endpointPricing and features vary; check limits before you depend on them
FormBeamYour HTML, email + dashboard, spam honeypot, optional auto-replyNo Zapier/Sheets/Slack. Signed webhooks yes. Email destinations and dashboard are the core loop.

Setup

1Create a form in FormBeam
Sign up, open the dashboard, create a form, copy the endpoint.

You'll get something like https://api.formbeam.io/f/your-form-slug. Set a notification email there.

2Point your HTML form at it
Normal form fields. Use method="POST" and FormData (not a JSON body).
<form action="https://api.formbeam.io/f/your-form-slug" method="POST">
<label for="name">Name</label>
<input type="text" id="name" name="name" required />
<label for="email">Email</label>
<input type="email" id="email" name="email" required />
<label for="message">Message</label>
<textarea id="message" name="message" required></textarea>
<!-- bots often fill this; leave it empty and hide with CSS -->
<input type="text" name="honeypot" tabindex="-1" autocomplete="off" />
<button type="submit">Send</button>
</form>
3Optional: auto-reply and domains
In form settings you can turn on auto-reply (needs an email or _email field) and restrict which domains can post.
4Submit a test and check email + dashboard

If nothing arrives, check the form slug, allowed domains, and that you're sending multipart form data.

What you get today

  • Email notification with field values and file attachments
  • Submissions stored in a searchable dashboard
  • Honeypot + extra spam filters (spam does not count toward usage)
  • Optional auto-reply to the submitter
  • HMAC-signed HTTPS webhook after an accepted submission
  • File uploads: up to 5 files, 10MB each, 50MB total

Not included yet: Google Sheets sync, or native Slack/Discord routing. If you need those now, POST a signed webhook into your own job, or use another tool.

Pricing (quick)

  • Free: 100 submissions/month
  • Starter $9: 1,000/month
  • Growth $14: 2,500/month
  • Pro $29: 5,000/month
  • Overage: $0.018 per submission over the limit

Full table: /pricing

FAQ

Does this work with Next.js / Astro / Hugo?

Yes, if the page can render a normal HTML form (or POST FormData with fetch). For Next.js static export, you cannot use API routes on that deploy; use FormBeam (or similar) as the external action.

Can I style the form myself?

Yes. FormBeam is only the backend. There is no required iframe or FormBeam branding on your form.

What about fetch / SPA submit?

POST FormData to the same endpoint. Do not send a JSON body.

Ship your contact form without a backend

One form action URL. Accepted submissions are saved first. Email, dashboard, auto-reply, and signed webhooks. Free to start.

No credit card. Upgrade only when you need more volume.