Submissions backend · self-hostable

Forms land in your inbox.

Point any HTML form at EasyForms and we route the submission to your email — rendered by EasyRender — and to a webhook with HMAC and retries. No more cobbling together Zapier flows.

Free plan includes 100 submissions/mo, no card required.

<form action="https://easyfrm.dev/f/Crp6zkfAJV"
      method="POST">
  <input name="email" type="email" required>
  <input name="message" required>
  <!-- honeypot, ignored if filled -->
  <input name="_url" style="display:none">
  <button>Send</button>
</form>

# We POST a webhook too:
{ "id":"sub_…", "data":{ "email":"…", "message":"…" } }

Built for real teams.

Six things every form backend should do well. We focus on those, and only those.

✉

Email out of the box

A clean HTML template by default. Bring your own EasyRender template per form for full custom branding.

⇆

Webhooks with retries

HMAC-SHA256 signature header. Exponential retries 1m → 5m → 30m → 2h → 12h. Delivery log per attempt.

⛨

Spam-resistant

Honeypot field, per-IP rate limiting, hCaptcha verification, declared field schema with type validation.

◷

Handlebars everywhere

Subject templates, webhook payloads, derived fields and conditional rules. Same engine your EasyRender templates use.

⚿

Scoped API keys

Account keys manage everything. Form-scoped keys can read and submit a single form — perfect for sharing with a partner.

⌬

Self-hostable

Single Bun process, SQLite, S3-compatible storage for uploads. One docker compose up and you are running.

From form to inbox in 90 ms.

01

Receive

POST /f/<id> accepts JSON, urlencoded or multipart. CORS-aware. Honeypot + rate-limit are checked before storage.

02

Transform

Validate against your declared schema, compute derived fields, evaluate conditional rules — all in Handlebars.

03

Deliver

Async workers send the email via EasyEmailsand fire the webhook with HMAC + retries.

Three plans, one job.

All plans include API + dashboard + email + webhook. Differences are quotas and Pro-only extras.

Free
$0
  • 100 submissions/mo
  • 2 forms
  • 1 recipient/form
  • 30-day retention
Start free
Pro
$29 /mo
  • 50 000 submissions/mo
  • 200 forms · 10 recipients
  • 730-day retention
  • File uploads up to 25 MB (S3)
  • Custom branding
Choose Pro

A small REST API.

Authenticate with a Bearer key. Everything you do in the dashboard is also available programmatically.

Create a formPOST
curl -X POST https://easyfrm.dev/api/v1/forms \
  -H 'Authorization: Bearer ef_...' \
  -H 'content-type: application/json' \
  -d '{
    "name": "Contact",
    "config": {
      "recipients": ["me@example.com"],
      "honeypotField": "_url"
    }
  }'
Submit (from a website)POST
<form action="https://easyfrm.dev/f/Crp6zkfAJV"
      method="POST">
  <input name="email" type="email" required>
  <input name="message" required>
  <button>Send</button>
</form>

Stop wiring forms manually.

Free plan, no card. Cancel by deleting your account.