# EmailJS alternatives: form backends and email APIs

_By Luka Brzin, Senior Product Marketing Manager_

The right EmailJS alternative depends on what EmailJS does for you. If it sends your website's contact form to your inbox, use a form backend such as Formspree, Web3Forms, Basin, Forminit or OllieLeads: the form posts straight to it, there is no email service to connect, and most of them keep a copy of every lead. If it sends email to your users from an app, use a transactional email API such as Resend or Postmark from a small piece of server code, so the key never sits in the browser.

## Key takeaways

-   EmailJS's free plan is 200 requests a month, and past your quota extra requests are dropped, not billed.
-   For a contact form, a form backend is the closer fit: a plain HTML form, no email service or template to maintain, and most store every lead.
-   For email your app sends, such as receipts and sign-in links, call an email API from your server: Resend's free plan is 3,000 emails a month, Postmark's is 100.
-   Web3Forms has the largest free monthly allowance of the form backends (250); Formspree, Basin and Forminit store what they receive.
-   Moving a contact form off EmailJS means removing its script and the `sendForm()` call, then setting the form's `action`.

## What EmailJS does, and what it costs

EmailJS sends email from front-end code. You connect an email service in its dashboard, either a personal mailbox such as Gmail or Outlook 365 or a transactional provider, write your templates there, and your page calls `emailjs.sendForm()` or `emailjs.send()` with your public key. EmailJS itself recommends a transactional provider for production, because a personal mailbox has daily sending caps that can get the account blocked ([EmailJS docs](https://www.emailjs.com/docs/user-guide/connecting-email-services/), checked October 2026).

Plan

Price

Requests a month

Free

$0

200

Personal

$9 a month

2,000

Professional

From $15 a month

From 5,000

Business

From $40 a month

From 25,000

Yearly billing takes 20% off. Free has 2 templates, 7 days of email history and requests up to 50 KB; paid plans keep 30 days of history and add the domain allowlist. EmailJS charges no automatic overage: it warns you at 80% and 95% of your quota, and from 100% it drops further requests ([EmailJS pricing](https://www.emailjs.com/pricing/), checked October 2026).

## Why people replace EmailJS

-   **A dropped request is a lost lead.** On a contact form, a message sent after you reach your quota never arrives, and the visitor only knows if your code catches the error and says so.
-   **There is no lead inbox.** EmailJS keeps a history of sent emails for 7 days on Free and 30 days on paid plans. That is a delivery log, not a place to keep, search and follow up leads.
-   **The key lives in your page.** EmailJS's FAQ accepts that someone could copy your public key. They can only trigger the templates you made, and IP-based rate limits, the domain allowlist and reCAPTCHA help, but reCAPTCHA is yours to turn on (EmailJS FAQ on [public keys](https://www.emailjs.com/docs/faq/is-it-okay-to-expose-my-public-key/) and [spam](https://www.emailjs.com/docs/faq/does-emailjs-expose-my-account-to-spam/)).
-   **Two services to keep healthy.** Every message depends on EmailJS and on the mailbox or provider it sends through.

## For contact forms: form backends

A form backend gives each form an endpoint URL. The form posts to it as a plain HTML form or with `fetch`, and the backend emails you, filters spam and, in most cases, stores the lead. There is no email service to connect and no template to keep in sync with your fields. Our [guide to form backends for static sites](/guides/form-backend-for-static-sites) compares this with writing your own serverless function.

Service

Free plan

First paid plan

Formspree

50 submissions a month

$15 a month ($10 billed yearly) for 200

Web3Forms

250 submissions a month

$149 a year for 10,000 a month

Basin

50 submissions a month, 1 form

$12.50 a month billed yearly for 250

Forminit

100 submissions a month, 1 form

$190 a year for 5,000 a month

OllieLeads

500 leads in total

$29 a month for 1,000 leads a month

All checked October 2026 on each pricing page, linked below. We make OllieLeads, so weigh its row with that in mind.

### Formspree

Unlimited forms on every plan, AJAX on Free and a JavaScript library for it. Free keeps 30 days of history with no export. Professional ($30 a month, or $20 billed yearly) adds autoresponses, the closest match to EmailJS's auto-reply templates, plus webhooks, Zapier and the API ([Formspree plans](https://formspree.io/plans)). Past your monthly limit, submissions are held in an Over Limit folder without notifications until you have room.

### Web3Forms

The closest to EmailJS in spirit: it emails you each submission. Its FAQ says it doesn't store submissions and runs its servers in the US East region ([Web3Forms FAQ](https://docs.web3forms.com/getting-started/faq)), while its pricing page lists 30 days of submission history on the free plan and up to a year on paid plans ([Web3Forms pricing](https://web3forms.com/pricing), checked October 2026), so check which applies before relying on it. Free is 250 submissions a month. Autoresponses, file uploads and webhooks are Pro features, and Pro is $149 a year for 10,000 a month.

### Basin

Free is 1 form and 50 submissions a month, kept for 30 days. Paid plans keep data longer (365 days on Starter, with no limit from Growth), and past your monthly cap submissions are still delivered and billed per 1,000 rather than dropped. Auto-responses start on Growth, at $24.17 a month billed yearly ([Basin pricing](https://usebasin.com/pricing)).

### Forminit (formerly Getform)

Free is 1 form and 100 submissions a month. Pro is $190 a year for 5,000 a month, with an autoresponder, webhooks, Slack, Discord, Google Sheets, Zapier and a REST API. Past the allowance, forms pause and reject new submissions, which aren't stored, until it renews or you upgrade ([Forminit pricing](https://forminit.com/pricing/)).

### OllieLeads

A form backend, not a form builder: a plain HTML form posts to `https://ollieleads.com/f/{formId}`, or you send JSON with `fetch`, or forward from your own server. Free is 500 leads in total with no monthly reset. Pro is $29 a month for 1,000 leads a month and $10 per extra 1,000, and a spend cap holds leads past it instead of dropping them ([OllieLeads pricing](/pricing)). Only leads with an email address or phone number count; spam and test leads never do. Alerts arrive by email, Slack or Discord within a minute, and with its script it saves the contact fields of visitors who leave halfway ([how that works](/features/partial-submissions)). Leads are stored in the EU, in Frankfurt. What others do better: it has no file uploads, and if you want an automatic reply to the visitor, Formspree, Basin and Forminit have one built in.

## For email your app sends: email APIs

If EmailJS sends password resets, receipts or invitations, a form backend is the wrong tool. Use a transactional email API and call it from code that runs on a server, such as a serverless function, an API route or a Worker, where its key stays secret.

-   **Resend:** the free plan is 3,000 emails a month and 100 a day, with 30 days of data retention. Pro is $20 a month for 50,000 ([Resend pricing](https://resend.com/pricing), checked October 2026).
-   **Postmark:** the free developer tier is 100 emails a month. Basic is $15 a month starting at 10,000, with extra emails at $1.80 per 1,000 ([Postmark pricing](https://postmarkapp.com/pricing), checked October 2026).

Both expect a server to make the call. If your site has no server code at all, a form backend or EmailJS is the simpler route.

## How to switch a contact form from EmailJS

Most EmailJS contact forms come down to one call:

```
emailjs.sendForm('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', '#myForm');
```

1.  Create the form in your new backend and copy its endpoint URL.
2.  Remove the EmailJS script, the `emailjs.init()` call and the `sendForm()` handler.
3.  Set `method="POST"` and `action` on the form to the endpoint. Keep a `name` on every field: that is what the backend stores.
4.  To stay on the page instead of loading a thank-you page, send the form with `fetch`, as below.
5.  Send a test and check that it shows up in the backend and in your inbox.

```
const form = document.querySelector('#myForm');

form.addEventListener('submit', async (event) => {
  event.preventDefault();
  const res = await fetch(form.action, {
    method: 'POST',
    headers: { Accept: 'application/json' },
    body: new FormData(form)
  });
  if (!res.ok) {
    alert('Sorry, that did not send. Please try again.');
    return;
  }
  form.reset();
});
```

With OllieLeads this works as written: the endpoint accepts form data and answers in JSON when you send `Accept: application/json`. Formspree recommends its own JavaScript library, and Web3Forms posts to its own API address with your access key, so follow their docs for those. If messages still don't reach your inbox, our guide to a [contact form not sending email](/blog/contact-form-not-sending-email) covers the usual causes.

## When EmailJS is still the right call

EmailJS is good at what it was built for: sending a templated email from front-end code with no server, on the web or in React Native and Flutter apps. If you send a handful of messages a month to yourself, the free plan covers it, and auto-reply templates are built in. If that is you, keep it, and turn on the domain allowlist (paid plans) and reCAPTCHA so a copied key is harder to misuse.

## FAQ

### Is EmailJS free?

Yes. The Free plan is 200 requests a month with 2 templates and 7 days of history. Paid plans start at $9 a month for 2,000 requests (checked October 2026 on the [EmailJS pricing page](https://www.emailjs.com/pricing/)).

### Is it safe to use EmailJS in the browser?

Your public key is visible in the page, and EmailJS's FAQ says someone could copy it. A copier can only trigger templates you already made, and EmailJS adds IP-based rate limits, a domain allowlist and optional reCAPTCHA. Turn those on before you rely on it.

### What is the best free alternative to EmailJS?

For a contact form, Web3Forms has the largest monthly allowance (250 a month); Forminit gives 100 a month with storage; OllieLeads gives 500 leads in total with no monthly reset. For email your app sends, Resend's free plan covers 3,000 emails a month.

### Does EmailJS store form submissions?

It keeps a history of the emails it sent: 7 days on Free and 30 days on paid plans. It isn't a lead database, so if you need to keep and search leads, use a backend that stores them.

### Do I need a backend to send email from a website?

Not for a contact form: EmailJS and form backends both take the request straight from the browser. You need your own server code only for an email API such as Resend or Postmark, because their keys must stay secret.

Published with [SuperDuperSEO](https://superduperseo.com/published-by)
