HTML form without a backend: use a form endpoint

Short answer: A static site has no server to receive a form post, so the form needs somewhere to send it. Put a Sendform endpoint in your form's action and every submission is spam-filtered, stored and sent to your email, Slack, Discord, Telegram or a webhook. The free plan covers 250 submissions a month, and spam never counts toward it.

Why your static form doesn't send anything

A <form> only tells the browser where to post the data. On a static host nothing at that address receives it.

  • mailto: links open the visitor's own email app. Many visitors have none set up, there's no spam filtering and no record.
  • Your own serverless function works, but you write and maintain the handler, email sending, spam protection, storage and retries.
  • A form endpoint is one URL in the action attribute. It works on any host or builder.

Set it up in a few minutes

  1. Create a free account at sendform.app and create a form. Copy your endpoint: https://sendform.app/api/public/f/YOUR_ID.
  2. Paste it into your form:
<form action="https://sendform.app/api/public/f/YOUR_ID" method="POST">
  <input type="email" name="email" required>
  <textarea name="message" required></textarea>
  <!-- honeypot: hidden from people, filled in by bots -->
  <input type="text" name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">
  <!-- optional: your own thank-you page -->
  <input type="hidden" name="_redirect" value="https://yoursite.com/thanks">
  <button type="submit">Send</button>
</form>
  1. Submit a test from the live site and check your inbox.

Reply-to on the notification is the submitter's email field, or _replyto if you set it. _redirect must be an absolute URL on the site the form is posted from, one of your allowed domains, or the domain of your saved redirect; otherwise Sendform uses your saved redirect or its own thank-you page.

Send HTML form data to email without PHP

You don't need PHP or any server script. The browser posts to the Sendform endpoint, and Sendform emails the submission to up to 5 recipients (multiple recipients are a Pro feature). Set a custom subject with a hidden _subject field.

Optional: submit with fetch()

const form = document.querySelector("form");
form.addEventListener("submit", async (e) => {
  e.preventDefault();
  const res = await fetch(form.action, {
    method: "POST",
    headers: { Accept: "application/json" },
    body: new FormData(form),
  });
  form.innerHTML = res.ok ? "<p>Thanks, we'll be in touch.</p>" : "<p>Something went wrong.</p>";
});

Works with your stack

Plain HTML, GitHub Pages, Hugo, Jekyll, Eleventy, Astro, Next.js static export, sites hosted on Netlify, Vercel or Cloudflare Pages, and Carrd, Framer and Webflow. Guides: Astro · Hugo · GitHub Pages · Webflow

What to look for in a form backend

  • Submissions per month on the plan you'll actually use.
  • Whether spam counts toward your quota. On Sendform it never does.
  • Autoresponder, webhooks and API on the entry paid plan.
  • File uploads if you collect CVs or briefs.
  • Export (CSV/JSON) so you're never locked in.

Plans

FreeProAgency
Price$0$5/mo or $48/yr$15/mo or $144/yr
Submissions per month2505,00025,000
Spam counts toward quotaNeverNeverNever
Autoresponder, file uploads, webhooks, API–YesYes

Retention: Free keeps submissions for up to 90 days. On Pro and Agency you can keep them for 365 days or forever, set per form. Spam is deleted after 30 days on every plan.

FAQ

What is a form endpoint?

A URL that accepts form posts for you. It stores the submission, filters spam and forwards it.

Can an HTML form send email without a backend?

Not on its own. Something has to receive the post; a form endpoint is the backend you don't run.

Do I need JavaScript?

No. A plain POST form works. Send Accept: application/json to get JSON back.

How do I stop spam without a server?

Sendform filters spam with rate limits and optional Cloudflare Turnstile. The hidden _gotcha honeypot field in the snippet adds bot protection.

Is there a free plan?

Yes: 250 submissions a month, 3 forms.

Moving an existing form?

Point its action at your Sendform endpoint and keep your field names; they become the columns in your inbox. Use _redirect (or its alias _next) for the thank-you page, then send a test.

Put a working form on your site today

Get an endpoint, paste the snippet, and you're done in about two minutes.

Get your endpoint free