Skip to content

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.


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.

FeatureFormspreeForminit
Setup complexitySimpleSimple
Server-side validationLimitedYes — email, phone, URL, country, date, rating
Authentication modesPublic onlyPublic + Protected (API key)
SDKReact package only2 KB JS SDK (any framework) + Next.js and Nuxt.js proxy handlers
File uploads10 MB25 MB per submission, 50+ MIME types
UTM auto-captureNoYes — UTM params, ad click IDs, referrer, geolocation
Webhooks$30/mo+ plans onlyAll plans
DashboardBasic tableInbox with status tracking, stars, notes, filtering
Email notificationsBasicCustomizable templates + autoresponder
Spam protectionreCAPTCHA, honeypotreCAPTCHA, hCaptcha, honeypot
Custom SMTPNoYes (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.


Formspree offers limited server-side validation. Forminit provides typed form blocks with comprehensive validation rules enforced before data is stored:

Block typeValidation rule
emailRFC 5322 format
phoneE.164 format (+12025550123)
urlValid URL structure
dateISO 8601 (YYYY-MM-DD)
ratingInteger 1-5
countryISO 3166-1 alpha-2
fileSize 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.

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-KEY header, 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!,
});

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
ForminitFormspree
Max size per submission25 MB10 MB
Supported types50+ (docs, images, video, audio, archives)Limited
Multiple file inputsUp to 20 file blocksLimited
Download URLsDirect download from dashboardVaries

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.

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.

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.

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 CaseFormspreeForminit
Simple contact form
Static site form (no server)
Server-side form proxyManual✅ 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 workflowBasic✅ Inbox with status

FormspreeForminit
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"

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));

Sign up at forminit.com and create a form to get your Form ID.

CDN (any site):

<script src="https://forminit.com/sdk/v1/forminit.js"></script>

npm (framework projects):

npm install forminit
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.

Yes. Include the SDK via CDN and submit forms with JavaScript. No server-side rendering required. See HTML integration.

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.