§ 01
Short answer: which one should you pick?
EmailJS is a JavaScript SDK that sends email from the browser by connecting to your own SMTP provider (Gmail, Outlook, SendGrid, etc.). It's a great fit if you specifically want browser-originated transactional email with branded templates and you're comfortable exposing a public key on the client.
splitforms is a form backend — you POST submissions to an endpoint, splitforms stores them, runs spam classification, fires webhooks, and emails recipients. It's the right fit when 'a user filled out a form' is the actual event you care about, and you want storage, retries, dashboards, and audit trails instead of fire-and-forget email.
§ 02
Why developers switch from EmailJS to splitforms
The most common trigger is abuse. EmailJS's public key is embedded in client JavaScript. Anyone can View Source, copy the key, and burn through your monthly quota with their own forms. EmailJS offers origin restrictions but they're easy to bypass with a custom Referer header. splitforms uses per-form access keys with rate limits, origin checks, and signed webhooks — abuse is contained and observable.
The second trigger is missing audit trail. EmailJS ships email and forgets. If a Gmail rate limit silently drops your message, there's no dashboard to inspect, no retry, no record. splitforms stores every submission permanently with re-delivery — your form-submission email can fail and you still have the data.
The third trigger is the free-tier ceiling. 200 emails/month is enough to demo; once a real contact form earns traffic, the $11/mo Personal plan kicks in for 1,000 emails. splitforms's free tier is 1,000 submissions/month with the full feature set — the upgrade pressure starts at 5x more volume.
§ 03
EmailJS vs splitforms: feature comparison
Storage: splitforms stores every submission permanently. EmailJS sends email and stores nothing — no submissions list, no search.
Security model: splitforms uses per-form access keys with origin checks and rate limits. EmailJS's public key is embedded in client JS and can be scraped.
Free tier: splitforms 1,000 submissions/month. EmailJS 200 emails/month.
Webhooks: splitforms includes signed webhooks with retries on every plan. EmailJS has no webhooks.
Spam protection: splitforms uses AI classification plus honeypot. EmailJS leaves spam handling to you.
Dashboard: splitforms ships a real dashboard. EmailJS has a usage console but no per-submission inspection.
API: splitforms ships an open REST API and MCP server. EmailJS is browser-SDK first.
§ 04
Common EmailJS issues splitforms solves
"Someone scraped my EmailJS public key and burned my quota." splitforms keys are scoped per form with rate limits and origin checks. Abuse is contained and visible in the dashboard.
"A submission was sent but never received — there's no record." splitforms stores every submission permanently and can re-deliver to any destination.
"I'm getting LLM-written spam through my contact form." splitforms's AI classifier is trained on modern form spam.
"I want to push submissions to Slack and a CRM, not just email." splitforms includes signed webhooks with retries — wire submissions to any service.
"I need to read submissions from an AI agent." splitforms ships an MCP server.
§ 05
splitforms advantages at a glance
Real storage and audit trail. Every submission is searchable, filterable, and re-deliverable. EmailJS has no submission concept — it's email-out only.
Per-form access keys with rate limits and origin restrictions. EmailJS's public key in client JS is a known abuse vector.
Signed webhooks with retries on the free tier. EmailJS is email-only.
AI spam classifier on every submission. EmailJS leaves spam to you.
5x larger free tier. 1,000 vs 200 events per month.
Open REST API for server-to-server submissions and an MCP server for AI agents. EmailJS is browser-first.
§ 06
How to migrate from EmailJS to splitforms
Step 1: sign up at splitforms.com for a free access key. Step 2: replace the EmailJS `send()` call with a `fetch` POST to `https://splitforms.com/api/submit/YOUR_KEY`. Step 3: configure your recipient email and template in the splitforms dashboard (the EmailJS template moves from JS to the dashboard).
Most EmailJS forms use 5-10 lines of JS to call `emailjs.send()`. The splitforms equivalent is a 4-line fetch. Existing field names work unchanged.
§ 07
Frequently asked questions
Is splitforms a viable EmailJS alternative? Yes, for any use case where 'form submission' is the unit of work — splitforms stores, classifies, and notifies. For pure transactional email (welcome emails, password resets), use a real email API like Postmark or Resend.
Can I keep my Gmail/SendGrid sender? splitforms uses dedicated SMTP by default; if you need to send from a specific domain, configure DMARC and we'll send on your behalf.
Will my key be safe in client JS? splitforms keys can be scoped to specific origins and rate-limited per form, which mitigates the EmailJS scraping attack.
Is there a one-time payment plan? Yes — $59 for the 4-Year plan at 15,000 submissions/month for 48 months.