Introducing GetForms: An Open-Source Form Backend for Static Websites

GetForms product preview showing the open-source form backend

Written by

in

A contact form on a static website shouldn’t require an entire backend. Yet accepting submissions often means writing an API route, setting up email delivery, handling uploads, and filtering spam. GetForms provides an open-source alternative: point a form to an endpoint, then manage responses and notifications from one place.

This guide covers how GetForms works, a practical HTML integration, spam protection, file uploads, webhooks, and the trade-offs between its hosted and self-hosted versions.

What is GetForms?

GetForms is a form backend for static sites and web applications. It receives submissions sent to a dedicated endpoint, saves responses in an inbox, and supports notifications through email, Telegram, Discord, Slack, and webhooks. It works with plain HTML, Astro, React, Next.js, and other frameworks that can submit an HTTP request.

The project publishes its source code under the Apache 2.0 license. You can use the hosted service or self-host the software. The launch documentation describes a hosted fair-use allowance of roughly 5,000 submissions per month across unlimited forms; always check current service limits.

How submissions work

  1. Create a form endpoint. Give it a recognizable slug, such as contact-sales.
  2. Add the URL to your site. Use an HTML form action or send a request with JavaScript.
  3. Receive submissions. GetForms validates, checks for spam, and records the response.
  4. Review and notify. Use the inbox and configure delivery to email, chat, or webhook destinations.

The documented architecture separates submission processing from outbound notifications using a queue with retries. This helps prevent a slow notification provider from blocking basic form intake.

Create your first HTML form

You don’t need a framework-specific SDK. Replace your-form-slug with an endpoint you created in GetForms:

<form action="https://getforms.codaipro.com/f/your-form-slug" method="POST">
  <label for="name">Name</label>
  <input id="name" name="name" required>

  <label for="email">Email</label>
  <input id="email" name="email" type="email" required>

  <label for="message">Message</label>
  <textarea id="message" name="message" required></textarea>

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

This approach works on a statically generated Astro page or a Next.js page without adding a form-handling server route. Submit a test message and confirm it arrives before launching the form publicly.

Stop simple spam without adding friction

GetForms documents an invisible honeypot field as a simple first defense, with optional Cloudflare Turnstile, Altcha, and reCAPTCHA for tougher spam problems.

<div style="display:none" aria-hidden="true">
  <input type="text" name="_gotcha"
         tabindex="-1" autocomplete="off">
</div>

Place this inside your form. Real visitors leave it blank, while some bots fill it. A honeypot is useful but not foolproof; use stronger verification and origin restrictions when your traffic warrants them.

File uploads, auto-replies, and team workflows

The GetForms launch documentation describes multipart file uploads up to 25 MB per submission on its hosted offering, subject to current limits. That can support resumes, support screenshots, and other attachments.

<form action="https://getforms.codaipro.com/f/your-form-slug"
      method="POST" enctype="multipart/form-data">
  <input type="file" name="resume"
         accept=".pdf,.doc,.docx" required>
  <button type="submit">Submit application</button>
</form>

Other documented features include automatic reply emails, double opt-in for newsletter signups, searchable submissions, internal notes, and statuses for tracking work from new to resolved. Test email settings and delivery—accepting a submission and successfully delivering a notification are separate events.

Connect webhooks to other tools

For workflows beyond simple notifications, GetForms can send structured JSON to another endpoint. Its documentation describes HMAC-SHA256 signatures in the X-GetForms-Signature header. Verify signatures using the original request body and keep webhook secrets private.

Webhooks are useful for routing submissions into internal systems, triggering automation, or linking a form to a support pipeline. Set up retry and duplicate-event handling in your receiving system as needed.

Use a JavaScript submission when you need custom UI

If you prefer in-page loading and success states, send JSON with fetch:

const response = await fetch(
  "https://getforms.codaipro.com/f/your-form-slug",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Accept": "application/json"
    },
    body: JSON.stringify({
      name: "Jane",
      email: "jane@example.com",
      message: "Hello!"
    })
  }
);

if (!response.ok) {
  throw new Error("Form submission failed");
}

Handle the error and success responses in your interface, and verify that your form is permitted by the endpoint’s origin settings.

Hosted or self-hosted?

Hosted GetForms Self-hosted GetForms
Fast setup; no server administration for the form backend Control over hosting, data, backups, and updates
Useful for low-maintenance static sites Useful for private infrastructure or custom requirements
Subject to hosted fair-use policies Subject to your infrastructure capacity and operating costs

The published technical overview describes Node.js, embedded SQLite for straightforward setups, and optional PostgreSQL for larger deployments. Self-hosting gives control, but also means maintaining security patches, HTTPS, backups, monitoring, and notification infrastructure.

How does GetForms compare with other form backends?

Formspree, Formcarry, Basin, and similar services also handle form submissions. The right comparison is not just a headline price: check the current limits on forms and submissions, file uploads, data retention, spam controls, alerts, webhooks, and export tools. GetForms is differentiated by its open-source codebase and a hosted free offering, but competing plans change frequently. Avoid relying on old pricing tables when choosing a service for production.

Frequently asked questions

Does GetForms work with Astro and Next.js?

Yes. Use a standard HTML form or an HTTP request to your endpoint. No GetForms-specific frontend framework is required.

Can visitors attach files?

The launch materials describe file uploads, with a 25 MB per-submission allowance for the hosted option. Check current configuration and limits before accepting large files.

Can I export my submissions?

The documented inbox includes export capabilities. Confirm the available formats and retention rules in the version you use.

Is GetForms completely free?

The source is Apache 2.0 licensed and the hosted service is described as free within its fair-use policy. Self-hosting may still incur infrastructure, storage, and email-delivery costs.

Get started

For a contact page, waitlist, feedback form, or small support workflow, start with one endpoint and send a real test submission. Check the inbox, notification delivery, spam handling, and error responses before connecting more forms.

Try hosted GetForms · Explore the product · Read the source and documentation