EmailJS Alternative: Forminit vs EmailJS (2026)
On this page
- Both handle forms from client-side JavaScript; EmailJS sends emails, while Forminit stores and validates submissions before sending notifications.
- Storage: EmailJS keeps sent-email history for 7 days on Free and 30 days on paid plans; Forminit stores submissions with no time limit by default.
- File uploads: Forminit accepts 25 MB on Free; EmailJS attachments start at 500 KB on the $9/mo Personal plan.
- Webhooks: Forminit from $19/mo; EmailJS does not offer webhooks.
- Free quotas: Forminit 100 stored submissions/mo; EmailJS 200 email requests/mo.
Forminit is an EmailJS alternative for developers who need more than email delivery. EmailJS sends form data to your inbox and keeps a short-lived sent-email log. Forminit is a full form backend: it stores every submission in a searchable inbox, validates data server-side, accepts 25 MB file uploads, and forwards data anywhere via webhooks and a REST API.
Sources: EmailJS’s official pricing page and documentation. Email history retention was re-verified on 31 August 2026.
How does Forminit compare to EmailJS?
EmailJS and Forminit both let you handle forms from client-side JavaScript without running a server. The difference is scope: EmailJS is an email delivery service, while Forminit is a form backend that treats email notifications as one output among many.
| Feature | EmailJS | Forminit |
|---|---|---|
| Primary function | Email delivery from the browser | Form backend with storage |
| Submission storage | Sent-email history only (7-30 days by plan) | Searchable inbox with status tracking, notes, and filtering |
| Submission retention | No. There is no retention setting; the email history window is fixed at 7 days on Free and 30 days on paid | Configurable per form: keep until manually deleted, or 30, 90, 365 days, or a custom period (Pro and higher) |
| Retrieve data programmatically | History API, last 30 days | REST API for submissions |
| File uploads | Paid plans only (500 KB to 30 MB) | Up to 25 MB per submission, on every plan |
| Server-side validation | No | Yes: email, phone, URL, country, date, rating |
| Webhooks | No | Yes, on paid plans |
| UTM tracking | No | Automatic (UTM params, ad click IDs, referrer) |
| Geolocation | No | Yes: country, city, timezone from IP |
| Spam protection | CAPTCHA you configure | Built in, plus optional Cloudflare Turnstile, reCAPTCHA, hCaptcha, honeypot |
| Auto-reply to submitters | Yes | Yes (autoresponder, Business plan) |
| Client-side exposure | Service ID, template ID, and public key visible in browser | Form ID only; API keys stay server-side via proxy handlers |
Is Forminit as easy to set up as EmailJS?
Yes, and there are fewer steps. EmailJS setup means creating an account, connecting an email provider (Gmail, Outlook, or SMTP), building an email template, and copying three identifiers into your code. Forminit setup means creating a form and copying one Form ID. Email notifications work out of the box, so there is no template to configure before your first submission arrives.
Why switch from EmailJS to Forminit?
1. A real submissions inbox, not an email log
EmailJS keeps a history of sent emails for 7 days on the Free plan and 30 days on the paid plans. If an email is deleted or the history window passes, the data is gone. Forminit stores every submission in a searchable dashboard. You can:
- View all submissions in one place
- Search and filter by any field
- Track status (open, in progress, done, cancelled) and add internal notes
- Export to CSV anytime without relying on email
The history window is also fixed. You cannot extend it to keep a record longer, and you cannot shorten it if your data-handling policy calls for that. Forminit stores submissions with no time limit by default, and Submission Retention on paid plans lets you set a period per form, after which the submission and its uploaded files are permanently deleted.
2. File uploads on every plan
EmailJS supports attachments only on paid plans: 500 KB on Personal, 2 MB on Professional, 30 MB on Business. Forminit accepts file uploads up to 25 MB per submission with 50+ MIME types, including on the Free plan, with proper storage and direct download URLs.
<input type="file" name="fi-file-resume" accept=".pdf,.doc,.docx" />
<input type="file" name="fi-file-documents[]" multiple />
3. Server-side validation
EmailJS forwards whatever the browser sends. Forminit validates data on the server before storing:
| Field Type | Validation |
|---|---|
email | Valid email format |
phone | E.164 international format |
url | Valid URI format |
country | ISO 3166-1 alpha-2 code |
rating | Integer between 1 and 5 |
date | ISO 8601 format |
Invalid submissions return clear error messages with specific field information, so garbage data never reaches your inbox or your automations.
4. Webhooks
EmailJS has no webhook support. Forminit can forward submissions to any URL, which connects your forms to:
- CRM systems (HubSpot, Salesforce)
- Databases (PostgreSQL, MongoDB)
- Communication tools (Slack, Discord)
- Spreadsheets (Google Sheets, Airtable)
- Your own backend services
For spreadsheets specifically, Forminit also has a native Google Sheets integration that writes each new submission to a sheet as a row, no webhook required.
5. REST API access
EmailJS’s API covers sending emails and reading the last 30 days of history. Forminit’s REST API is built for data access:
curl -X GET 'https://api.forminit.com/v1/forms/YOUR_FORM_ID' \
-H 'X-API-Key: YOUR_API_KEY'
Query, filter, and paginate through all your form data programmatically.
6. API key security
With EmailJS, your service ID, template ID, and public key all ship to the browser. Forminit exposes only a Form ID client-side, and provides proxy handlers for Next.js and Nuxt.js that keep API keys on the server:
// app/api/forminit/route.ts
import { createForminitProxy } from 'forminit/next';
export const POST = createForminitProxy({
apiKey: process.env.FORMINIT_API_KEY,
});
7. Marketing attribution
Forminit automatically captures:
- UTM parameters (source, medium, campaign, term, content)
- Ad platform click IDs (gclid, fbclid, msclkid, ttclid, twclid)
- Referrer URL
- Geolocation (country, city, timezone)
No additional code required. EmailJS captures none of this.
How long has Forminit been around?
Forminit has operated continuously since 2015, first as Getform.io and as Forminit since January 2026. It is operated by UXPLUS LTD, a UK-registered company, and has handled form submissions for teams at Burger King, Volkswagen, Toyota, Lidl, Codecademy, Sticker Mule, and the University of Essex.
Your lead flow sits in your critical path. A track record of more than a decade of paying customers means the service receiving your submissions will still be here next year, storing them, not just sending them.
Use case comparison
| Use Case | EmailJS | Forminit |
|---|---|---|
| Contact form with email notification | ✅ | ✅ |
| Templated notification emails | ✅ | ✅ |
| Searchable submission inbox | ❌ | ✅ |
| File uploads on a free plan | ❌ | ✅ |
| File uploads over 5 MB | ❌ (30 MB requires $40/mo) | ✅ |
| Connect to CRM or database | ❌ | ✅ |
| Track lead sources | ❌ | ✅ |
| API access to form data | Last 30 days of email history | ✅ Full submission access |
| Team access to submissions | Multi-user seats on paid plans | ✅ Workspaces with roles |
Pricing comparison
EmailJS prices by emails sent per month. Forminit prices by submissions collected per month.
EmailJS plans:
| Plan | Price | Requests/month | Attachments | Email history |
|---|---|---|---|---|
| Free | $0 | 200 | None | 7 days |
| Personal | $9/mo | 2,000 | 500 KB | 30 days |
| Professional | $15/mo | 5,000+ | 2 MB | 30 days |
| Business | $40/mo | 25,000+ | 30 MB | 30 days |
Forminit plans:
| Plan | Price | Submissions/month | File uploads | Storage |
|---|---|---|---|---|
| Free | $0 | 100 | Up to 25 MB per submission | 100 MB |
| Pro | $19/mo | 5,000 | Up to 25 MB per submission | 1 GB |
| Business | $49/mo | 10,000 | Up to 25 MB per submission | 5 GB |
| Volume | $99/mo | 50,000 | Up to 25 MB per submission | 10 GB |
Two differences worth noting when comparing costs:
- What a “request” buys. An EmailJS request sends one email and keeps it in history for at most 30 days. A Forminit submission is stored, validated, searchable, and exportable, and triggers notifications, webhooks, and integrations.
- Attachment economics. Sending a 3 MB file through EmailJS requires the $40/mo Business plan. Forminit handles it on the Free plan.
EmailJS offers 20% off with yearly billing. Forminit’s yearly billing gives you 2 months free. When you exceed your quota, EmailJS stops processing requests and over-limit submissions are ignored; Forminit pauses your forms until you upgrade.
When EmailJS may be the better choice
A fair comparison cuts both ways. EmailJS is the better fit when:
- You only need templated emails sent through your own provider. EmailJS connects directly to Gmail, Outlook, or custom SMTP and sends from your account with its template editor. If delivery is genuinely all you need, that focus is a feature.
- You want more free sends. EmailJS’s free plan allows 200 requests per month against Forminit’s 100 submissions, as long as you can live without attachments, storage, and validation.
- You deliberately don’t want submissions stored. If your data-handling policy is “email it and keep nothing,” an email relay with a 7-day history is closer to that than a form backend designed around storage.
If any of those stop being true (the first file upload, the first lost lead, the first CRM integration), that’s typically when teams migrate.
Migrating from EmailJS
Migration is a field-rename plus a one-line code change. There is no email service to connect and no template to build.
Field name mapping
| EmailJS | Forminit |
|---|---|
name="user_name" | name="fi-sender-fullName" |
name="user_email" | name="fi-sender-email" |
name="message" | name="fi-text-message" |
name="phone" | name="fi-sender-phone" |
Code changes
EmailJS:
emailjs.sendForm('service_id', 'template_id', form, 'public_key');
Forminit:
const forminit = new Forminit();
forminit.submit('YOUR_FORM_ID', new FormData(form));
Email notifications, storage, and validation are active immediately; there is nothing else to wire up.
Quick Start
1. Create a Form
Sign up at forminit.com and create a form to get your Form ID.
2. Install the SDK
npm install forminit
3. Implement
HTML / JavaScript:
<form id="contact-form">
<input type="text" name="fi-sender-firstName" placeholder="First name" required />
<input type="text" name="fi-sender-lastName" placeholder="Last 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>
Next.js:
// app/api/forminit/route.ts
import { createForminitProxy } from 'forminit/next';
export const POST = createForminitProxy({
apiKey: process.env.FORMINIT_API_KEY,
});
// components/ContactForm.tsx
'use client';
import { Forminit } from 'forminit';
const forminit = new Forminit({ proxyUrl: '/api/forminit' });
export function ContactForm() {
async function handleSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
const { data, error } = await forminit.submit('YOUR_FORM_ID', new FormData(e.currentTarget));
if (error) {
console.error(error.message);
return;
}
console.log('Submitted:', data.hashId);
e.currentTarget.reset();
}
return (
<form onSubmit={handleSubmit}>
<input type="text" name="fi-sender-firstName" placeholder="First name" required />
<input type="text" name="fi-sender-lastName" placeholder="Last name" required />
<input type="email" name="fi-sender-email" placeholder="Email" required />
<textarea name="fi-text-message" placeholder="Message" required />
<button type="submit">Send</button>
</form>
);
}
FAQ
Is Forminit harder to set up than EmailJS?
No. Both work from client-side JavaScript. EmailJS requires connecting an email service, creating a template, and wiring a service ID, template ID, and public key into your code. Forminit needs one Form ID: point the SDK at it and submissions are stored, validated, and emailed to you automatically.
Does EmailJS store form submissions?
Not as a submissions database. EmailJS keeps a sent-email history for 7 days on the Free plan and 30 days on the paid plans. Forminit stores every submission in a searchable inbox with status tracking, internal notes, filtering, and CSV export.
Can I send file attachments with EmailJS?
Only on paid plans, and the limits are tight: 500 KB on Personal ($9/mo), 2 MB on Professional ($15/mo), and 30 MB on Business ($40/mo). The free plan has no attachment support. Forminit accepts file uploads up to 25 MB per submission, including on the Free plan.
What happens when I go over my monthly quota?
EmailJS stops processing requests once your monthly quota is reached; over-limit submissions are ignored. Forminit pauses your forms when you hit your plan limit, and upgrading resumes collection immediately.
What spam protection options are available?
Forminit’s spam protection is built in and works out of the box. You can additionally enable Cloudflare Turnstile, reCAPTCHA, hCaptcha, or a honeypot field. EmailJS offers CAPTCHA verification that you configure yourself.
Is Forminit GDPR compliant?
Yes. Forminit is UK-registered, ICO-listed, and complies with the UK GDPR and the EU GDPR framework. All form data is encrypted and stored on AWS servers in Ireland (EU), a DPA is included, and all subprocessors are EU-based.
Related Documentation
- Form Blocks Reference — Available field types
- File Uploads — File upload handling
- Next.js Integration — Next.js setup
- Nuxt.js Integration — Nuxt.js setup
- Node.js Integration — Server-side usage
- Submission Retention — Choose how long each form keeps submissions
- List Submissions API — Retrieve submissions
- Submit Form API — API reference