Formspree Alternative
Forminit is a form backend that works the same way as Formspree — you build your own form, point it at an API endpoint, and submissions are stored, validated, and forwarded. The difference is what happens to the data after it arrives.
How does Forminit compare to Formspree?
Section titled “How does Forminit compare to Formspree?”Both Formspree and Forminit are headless form backends for developers who build their own form UIs. Neither is a form builder. Both accept HTTP POST requests and store submissions.
| Feature | Formspree | Forminit |
|---|---|---|
| Setup complexity | Simple | Simple |
| Server-side validation | Limited | Yes — email, phone, URL, country, date, rating |
| Authentication modes | Public only | Public + Protected (API key) |
| SDK | React package only | 2 KB JS SDK (any framework) + Next.js and Nuxt.js proxy handlers |
| File uploads | 10 MB | 25 MB per submission, 50+ MIME types |
| UTM auto-capture | No | Yes — UTM params, ad click IDs, referrer, geolocation |
| Webhooks | $30/mo+ plans only | All plans |
| Dashboard | Basic table | Inbox with status tracking, stars, notes, filtering |
| Email notifications | Basic | Customizable templates + autoresponder |
| Spam protection | reCAPTCHA, honeypot | reCAPTCHA, hCaptcha, honeypot |
| Custom SMTP | No | Yes (Business plan) |
Is Forminit as easy to set up as Formspree?
Section titled “Is Forminit as easy to set up as Formspree?”Yes. The setup is nearly identical. You create a form, get an ID, and submit data to it.
Formspree:
<form action="https://formspree.io/f/YOUR_FORM_ID" method="POST">
<input type="text" name="name" />
<input type="email" name="email" />
<textarea name="message"></textarea>
<button type="submit">Send</button>
</form>
Forminit (HTML action method — no SDK needed):
<form action="https://forminit.com/f/YOUR_FORM_ID" method="POST">
<input type="text" name="fi-sender-fullName" />
<input type="email" name="fi-sender-email" />
<textarea name="fi-text-message"></textarea>
<button type="submit">Send</button>
</form>
Forminit (with SDK — adds UTM tracking, file uploads, error handling):
<form id="contact-form">
<input type="text" name="fi-sender-fullName" placeholder="Name" required />
<input type="email" name="fi-sender-email" placeholder="Email" required />
<textarea name="fi-text-message" placeholder="Message" required></textarea>
<button type="submit">Send</button>
</form>
<script src="https://forminit.com/sdk/v1/forminit.js"></script>
<script>
const forminit = new Forminit();
document.getElementById('contact-form').addEventListener('submit', async (e) => {
e.preventDefault();
const { data, error } = await forminit.submit('YOUR_FORM_ID', new FormData(e.target));
if (error) {
console.error(error.message);
return;
}
console.log('Submitted:', data.hashId);
e.target.reset();
});
</script>
Both approaches take minutes to set up. The SDK adds automatic UTM capture, ad click ID tracking, and structured error responses without extra code.
Benefits of Forminit over Formspree
Section titled “Benefits of Forminit over Formspree”1. Server-Side Validation
Section titled “1. Server-Side Validation”Formspree offers limited server-side validation. Forminit provides typed form blocks with comprehensive validation rules enforced before data is stored:
| Block type | Validation rule |
|---|---|
email | RFC 5322 format |
phone | E.164 format (+12025550123) |
url | Valid URL structure |
date | ISO 8601 (YYYY-MM-DD) |
rating | Integer 1-5 |
country | ISO 3166-1 alpha-2 |
file | Size limit + MIME type check |
Invalid submissions return structured error responses:
{
"error": "FI_SCHEMA_FORMAT_EMAIL",
"code": 400,
"message": "Invalid email format"
}
If you’re forwarding submissions to a CRM or database via webhooks, validated data means your pipeline doesn’t break on bad entries.
2. API Key Authentication
Section titled “2. API Key Authentication”Formspree endpoints are public. Anyone who discovers the URL — from page source, browser network tab, or automated scanning — can submit arbitrary data.
Forminit has two authentication modes:
- Public mode — No API key, 1 request per 30 seconds (for static sites)
- Protected mode — API key via
X-API-KEYheader, 5 requests per second (for server-side)
// Next.js: API key stays server-side
import { createForminitProxy } from 'forminit/next';
export const { POST } = createForminitProxy({
apiKey: process.env.FORMINIT_API_KEY!,
});
3. 2 KB SDK with Framework Support
Section titled “3. 2 KB SDK with Framework Support”Formspree offers a @formspree/react package for React. For everything else, you use fetch.
Forminit’s SDK works in any JavaScript environment — 2 KB via npm or CDN. It includes:
- FormData and JSON submission modes
- Auto UTM parameter capture (source, medium, campaign, term, content)
- Auto ad click ID capture (gclid, fbclid, msclkid, ttclid, twclid)
- Referrer and geolocation tracking
- Built-in proxy handlers for Next.js and Nuxt.js
4. Larger File Uploads
Section titled “4. Larger File Uploads”| Forminit | Formspree | |
|---|---|---|
| Max size per submission | 25 MB | 10 MB |
| Supported types | 50+ (docs, images, video, audio, archives) | Limited |
| Multiple file inputs | Up to 20 file blocks | Limited |
| Download URLs | Direct download from dashboard | Varies |
25 MB vs 10 MB matters when users upload resumes (2-5 MB), portfolio PDFs (10-15 MB), or sets of photos. At 10 MB, you reject legitimate submissions.
5. Inbox-Style Dashboard
Section titled “5. Inbox-Style Dashboard”Formspree provides a basic table view of submissions.
Forminit’s dashboard is an inbox designed for managing submissions as a workflow:
- Star/unstar submissions
- Status tracking (open, in-progress, done, cancelled)
- Internal notes on each submission
- Filter by date range, status, starred, unread
- Bulk actions and CSV export
If you use forms for lead generation, support requests, or job applications, status tracking means you know which leads have been contacted and which requests are resolved.
6. Webhooks on All Plans
Section titled “6. Webhooks on All Plans”Formspree requires the Professional plan ($30/mo) or Business plan ($90/mo) for webhook access. Forminit includes webhooks on all plans — forward submissions to any URL from day one.
7. Marketing Attribution
Section titled “7. Marketing Attribution”Formspree has no built-in tracking. If you want UTM parameters captured, you need to read them from the URL yourself, create hidden fields, and populate them with JavaScript.
Forminit’s SDK automatically captures and includes:
- UTM parameters (source, medium, campaign, term, content)
- Ad click IDs (Google gclid, Facebook fbclid, Microsoft msclkid, TikTok ttclid, X/Twitter twclid, LinkedIn, Amazon, Mailchimp)
- Referrer URL
- Geolocation (country, city, timezone from IP)
No hidden fields. No manual JavaScript. The SDK reads URL parameters and headers, then sends them alongside the form data.
Use case comparison
Section titled “Use case comparison”| Use Case | Formspree | Forminit |
|---|---|---|
| Simple contact form | ✅ | ✅ |
| Static site form (no server) | ✅ | ✅ |
| Server-side form proxy | Manual | ✅ Built-in handlers |
| File uploads over 10 MB | ❌ | ✅ |
| Track lead sources automatically | ❌ | ✅ |
| Validate data before storing | ❌ | ✅ |
| Restrict who can submit | ❌ | ✅ API key auth |
| Manage submissions as workflow | Basic | ✅ Inbox with status |
Migrating from Formspree
Section titled “Migrating from Formspree”Field Name Mapping
Section titled “Field Name Mapping”| Formspree | Forminit |
|---|---|
name="name" | name="fi-sender-fullName" |
name="email" | name="fi-sender-email" |
name="_replyto" | name="fi-sender-email" |
name="message" | name="fi-text-message" |
name="phone" | name="fi-sender-phone" |
Code Changes
Section titled “Code Changes”Formspree:
fetch("https://formspree.io/f/YOUR_FORM_ID", {
method: "POST",
body: new FormData(form),
headers: { Accept: "application/json" }
});
Forminit:
const forminit = new Forminit();
const { data, error } = await forminit.submit('YOUR_FORM_ID', new FormData(form));
Quick Start
Section titled “Quick Start”1. Create a Form
Section titled “1. Create a Form”Sign up at forminit.com and create a form to get your Form ID.
2. Add to Your Site
Section titled “2. Add to Your Site”CDN (any site):
<script src="https://forminit.com/sdk/v1/forminit.js"></script>
npm (framework projects):
npm install forminit
3. Submit
Section titled “3. Submit”import { Forminit } from 'forminit';
const forminit = new Forminit();
const { data, error } = await forminit.submit('YOUR_FORM_ID', formData);
Is Forminit harder to set up than Formspree?
Section titled “Is Forminit harder to set up than Formspree?”No. Both take minutes. Forminit supports the same HTML form action method as Formspree, plus a 2 KB SDK that adds UTM tracking, validation, and error handling automatically.
Does Forminit work with static sites?
Section titled “Does Forminit work with static sites?”Yes. Include the SDK via CDN and submit forms with JavaScript. No server-side rendering required. See HTML integration.
Does Forminit send email notifications?
Section titled “Does Forminit send email notifications?”Yes. Forminit sends customizable email notifications and stores submissions in a searchable dashboard.
Can I use Forminit with React, Vue, or Svelte?
Section titled “Can I use Forminit with React, Vue, or Svelte?”Yes. The SDK works in any JavaScript environment. For React/Next.js, use the built-in proxy handler. For Nuxt.js, see the Nuxt.js integration.
What spam protection options are available?
Section titled “What spam protection options are available?”Forminit integrates with reCAPTCHA, hCaptcha, and honeypot.
Related Documentation
Section titled “Related Documentation”- Form Blocks Reference — Available field types and validation
- File Uploads — File upload handling
- Webhooks — Forward submissions to any URL
- SDK Reference — JavaScript SDK documentation
- Next.js Integration — Next.js proxy setup
- Nuxt.js Integration — Nuxt.js proxy setup
- Submit Form API — API reference
Was this page helpful?
Thanks for your feedback.