Validation and rules
Require fields, block values, mark spam, or route submissions based on the content. Rules run before a submission is accepted or counted.
Point any HTML form at a FreelyForm endpoint. We validate and store every submission, deliver it to your inbox, and keep a per-channel delivery record — without server code or a proprietary form builder.
Native HTML and JSON · File uploads · Signed webhooks · Spam controls
A form backend is the server-side half of a web form. It receives the POST request, validates and stores the fields, notifies the people who need to see it, and returns a response to the browser.
FreelyForm provides that backend as a hosted endpoint. Static sites and front-end apps can accept submissions without running a server, writing a mailer, or maintaining a database.
Why use one
Most forms fail after the visitor clicks send: mail lands in spam, a field is missing, an attachment is lost, or nobody notices that delivery stopped. FreelyForm makes the post-submit path visible and repeatable.
Require fields, block values, mark spam, or route submissions based on the content. Rules run before a submission is accepted or counted.
Owner notifications and autoresponses each have a status, error message, and retry action. No guessing whether the mail left the building.
Recipients confirm their address once. Until then submissions are stored safely as pending and delivered automatically after confirmation.
Accept images, PDFs, and documents with a MIME and extension allowlist, per-form limits, and a configurable retention period.
Send signed payloads to your own endpoint, Discord, or Telegram. Failed deliveries are retried and kept in a replayable log.
Query submissions, export CSV, inspect delivery attempts, and retry failed channels with account-scoped API keys.
How it works
No SDK is required. The endpoint accepts standard form posts, so the integration is mostly a copy-and-paste change.
Give the form a name, add up to five recipients, and choose whether to show a message, redirect, or return JSON after submit.
Each recipient confirms once by email. Submissions received before confirmation are retained and queued for delivery afterwards.
Set the action attribute, keep your field names, and submit. Add /embed.js if you want inline success and error states without a redirect.
<form action="https://freelyform.com/f/FORM_ID" method="POST">
<input type="text" name="name" required>
<input type="email" name="email" required>
<textarea name="message"></textarea>
<button type="submit">Send</button>
</form>
Already using JavaScript? POST JSON with an Accept: application/json header and read the structured response. See the quickstart or browse the API reference.
Side by side
Formspree is the established benchmark. This table is a practical comparison, not a claim that one product is right for every team.
| Capability | Formspree | FreelyForm |
|---|---|---|
| HTML and JSON form endpoint | Yes | Yes |
| Email notifications | Yes | Yes |
| Autoresponse to the submitter | Professional and above | Every account |
| File uploads | Yes, 5 files × 25 MB | Yes, 5 files × 25 MB by default |
| Custom notification templates | Business | Yes |
| Rules and conditional handling | Yes | Require, block, spam, route |
| Partial submissions and resume links | Not in the public feature list | Yes |
| Signed webhooks and replay | Webhooks available | HMAC signature, retries, delivery log, replay |
| Custom sending domain or SMTP | Yes | BYO SMTP with TXT verification |
| Submission and management API | Available | Included |
| Entry price | From $15/month, monthly billing | Free during early access |
See the full Formspree comparison for migration notes and where each product is a better fit.
Use cases
The same ingest path handles contact forms, quote requests, application forms, support intake, and file submissions.
Add a working contact form to GitHub Pages, Cloudflare Pages, Netlify, Vercel, or any static host without a serverless function.
Static site setup →Keep your component and validation layer. POST to the endpoint with fetch and show the structured response inline.
React example →Accept resumes, briefs, screenshots, or scanned documents with allowlists, size limits, and a retention policy.
File upload setup →Deliver submissions to a CRM, helpdesk, spreadsheet service, or custom automation with a signed payload.
Webhook setup →Reliability and abuse
Each submission keeps its own delivery history. When a channel fails, the reason is visible and the retry is explicit.
Early access note: FreelyForm does not publish an uptime SLA yet. The delivery log and retry controls are the operational record.
For developers
Send JSON, inspect the response, and manage the same data from the API that powers the dashboard.
curl -X POST https://freelyform.com/f/FORM_ID \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{"name":"Ada","email":"ada@example.com","message":"Hello"}'
const expected = createHmac('sha256', secret)
.update(timestamp + '.' + rawBody)
.digest('hex');
// header: x-freelyform-signature
// value: t=<timestamp>,v1=<expected>
No. FreelyForm hosts the endpoint that receives your form. Any HTML form can POST directly to it, and static hosts such as GitHub Pages, Cloudflare Pages, Netlify, and Vercel can use it without server-side code.
Yes. Change the form action to your FreelyForm endpoint and keep the field names you already use. Native HTML posts, JSON requests, and multipart file uploads are supported.
Every submission is stored in your FreelyForm account and queued for delivery to the recipients you configure. Each delivery channel has its own status, error detail, and retry action.
Yes. Forms can accept multiple files with a MIME and extension allowlist, per-form count and size limits, and an attachment retention period. Files are downloadable from the submission view.
FreelyForm is free during early access while billing is being built. Accounts currently have no monthly submission cap; per-form rate limits and fair-use safeguards apply.
Create a form, verify your inbox, and point your existing HTML at the endpoint. No server, no SDK, no rewrite.
POST https://freelyform.com/f/FORM_ID