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
Three ways to get a form that stores and emails a submission. This table is about the work each one leaves you with, not about a vendor.
| Question | Written by you | Embedded widget | FreelyForm |
|---|---|---|---|
| Whose markup renders the form? | Yours | Usually theirs, themed | Yours |
| Works without JavaScript? | Depends what you wrote | Usually no | Yes, a plain POST |
| Who runs the receiver? | You | They do | We do |
| Where submissions live | Your database | Their platform | Stored, unlimited archive, CSV |
| Owner notification | Your SMTP, your reputation | Usually included | Included, with a delivery record |
| Retry a failed send | You build it | Varies | Attempts and last error recorded |
| Spam control | You build it | Usually included | Honeypot, heuristics, Turnstile |
| Server-side validation and routing | You build it | Often in-widget logic | Require, block, spam, route |
| File uploads | You handle storage and cleanup | Plan-dependent | 5 × 25 MB default, 90-day attachments |
| Draft and resume link | You build it | Uncommon | Yes |
| Signed webhooks with replay | You build it | Uncommon | HMAC-SHA256, retries, log, replay |
| API to read submissions | You build it | Usually read-only | Included |
| Time to first delivery | Hours to days | Minutes | Minutes |
| Cost | Host, mail provider, your time | Subscription | From free: 80 submissions a month |
The longer comparison covers the full table, what the endpoint accepts, and the migration path in both directions.
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":"[email protected]","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. The free plan carries 80 submissions a month; if a month goes over that, submissions are still stored and shown as over limit, without a notification email, and can be reprocessed once there is room. Per-form rate limits and fair-use safeguards apply as well.
Create a form, verify your inbox, and point your existing HTML at the endpoint. No server, no SDK, no rewrite.
One action attribute · urlencoded, JSON, or multipart · no SDK, no build step