Netlify Forms alternatives: when 100 submissions a month is not enough

April 5, 2026 · 7 min read

Warm server lights — migrating from Netlify Forms to a dedicated backend

Netlify Forms is one of those features that deserves a genuine tip of the hat for what it does well. If you host a small static site on Netlify, you add a netlify attribute to your form tag, and — magic — submissions appear in the Netlify dashboard. No setup, no external vendor, no API keys. For a personal portfolio or a low-traffic marketing page, it is exactly the right amount of product.

It is also the feature that Netlify's pricing team has quietly made less generous over time, and if you run a real business on top of it, you will eventually hit the wall.

Here's a straight answer to "should I keep using Netlify Forms or move somewhere else," based on what you're actually trying to do.

What Netlify Forms is good at

Before the criticism, the honest praise:

  • Zero configuration on a Netlify-hosted site. You add data-netlify="true" to a <form> tag and you're done.
  • Integrated dashboard — submissions appear right next to your deploys, so there's no extra login.
  • Email notifications included out of the box.
  • Spam filtering via Akismet, which is decent.
  • No vendor dependency outside of Netlify itself.

For a side project with 5 submissions a month and no budget, this is unbeatable. I have recommended Netlify Forms to friends for exactly that use case and I will do it again.

Where Netlify Forms starts to hurt

The problem is not the product. The product is fine. The problem is the pricing and the ceiling.

100 submissions a month on the free tier. If your site does any real volume — even a modest marketing site with a popular newsletter signup — you blow through 100 in a week. Netlify doesn't queue the overflow. Submissions beyond the limit are rejected.

$19/month for 1,000 submissions. On the paid tier, you get 1,000 submissions per month for $19. That's $19/month for a feature that, in most of the market, costs $9–$12/month. And it's tied to your Netlify plan — you can't buy just the form feature.

No webhook retries on the default tier. Webhooks are one-shot. If your downstream endpoint is briefly unavailable, the delivery fails and is not retried. For a production contact form this matters.

No submission search. The dashboard shows submissions in reverse chronological order. There's no full-text search. Once you have a few hundred submissions you will wish for this.

Limited field customization. Netlify expects the form to be a more-or-less standard HTML form with a specific attribute pattern. If you want to customize the payload shape or add conditional fields, you end up wrestling with Netlify's build step.

Vendor lock-in to Netlify hosting. If you want to migrate your site off Netlify — to Cloudflare Pages, to Vercel, to AWS, to your own VPS — the form stops working. The netlify attribute is meaningless anywhere else. You have to rewrite the form layer as part of the migration.

When to leave

A short list of honest "it's time to migrate" signals:

  • You hit the 100/month limit and don't want to pay $19 for the next tier
  • You want submissions to retry automatically when your webhook endpoint blips
  • You're paying Netlify for a plan you're only on because of Forms
  • You're considering moving off Netlify for hosting reasons and realize the form is a blocker
  • You want EU data residency (Netlify Forms data is US-stored)
  • You want Slack/Discord notifications as a first-class feature, not as a Zapier-glued workaround
  • You need to search through submissions and the reverse-chronological list is not enough

If two or more of these apply, it's worth a Saturday afternoon to migrate.

Where to go

Here's the shortlist of alternatives, sorted by the situation each one fits best.

If you mostly want "the same thing but cheaper"

FormTo — $9/month for 1,000 submissions, EU-hosted by default, webhook retries with replay, full submission search in the dashboard. Disclosure: I work on it, so pick your own grain of salt.

Formspree — $10/month, US-based, very mature, familiar if you've used it before. Honest comparison in this post.

Basin — $12.50/month, minimalist dev-first experience, good spam filtering by default.

For any of these three, the migration looks like: change the form's action attribute to the new endpoint URL, remove the netlify attribute, redeploy. Ten minutes at most.

If your volume is very low and you don't want to pay anything

Web3Forms — 250 submissions a month on the free tier, no account required, no Netlify lock-in. Good if you're running a truly low-volume personal site.

Apps Script + Google Sheets — free, self-managed, fifty lines of code. I wrote the whole setup in this post about replacing Zapier, and it works just as well as a Netlify Forms replacement.

If you need to run forms across multiple sites

Netlify Forms ties submissions to a specific Netlify site. If you run several sites (an agency, a multi-brand company, a portfolio of side projects), juggling forms across separate Netlify dashboards gets old fast.

Any external form backend (FormTo, Formspree, Basin) gives you one dashboard for forms across all your sites. That consolidation alone is often worth the migration for anyone managing more than two sites.

If you're moving off Netlify entirely

Pick an external backend first, migrate the form to it, confirm it works, then move the site hosting. That way the form stays alive through the hosting transition and you don't have to do two migrations under a deadline.

The migration, step by step

Let's say you're on Netlify Forms today and want to move to an external backend. Here's the exact set of changes.

Before

<form name="contact" method="POST" data-netlify="true" data-netlify-honeypot="bot-field">
  <input type="hidden" name="form-name" value="contact">
  <p class="hidden">
    <label>Don't fill this out: <input name="bot-field"></label>
  </p>
  <label>
    Name <input type="text" name="name" required>
  </label>
  <label>
    Email <input type="email" name="email" required>
  </label>
  <label>
    Message <textarea name="message" required></textarea>
  </label>
  <button type="submit">Send</button>
</form>

After

<form method="POST" action="https://api.formto.dev/f/your-form-slug">
  <label>
    Name <input type="text" name="name" required>
  </label>
  <label>
    Email <input type="email" name="email" required>
  </label>
  <label>
    Message <textarea name="message" required></textarea>
  </label>

  <input type="text" name="website" tabindex="-1" autocomplete="off"
         style="position:absolute;left:-9999px" aria-hidden="true">

  <input type="hidden" name="_redirect" value="https://yoursite.com/thanks/">

  <button type="submit">Send</button>
</form>

What changed

  • Removed data-netlify="true" and data-netlify-honeypot attributes
  • Removed the Netlify-specific form-name hidden input
  • Replaced the Netlify bot-field with a standard honeypot (name="website", positioned off-screen)
  • Added action="https://..." pointing at the new endpoint
  • Added _redirect for the thank-you page (previously handled by Netlify's redirect config)

No build configuration changes. No netlify.toml edits. No redeployment drama. The new form will work on Netlify, Cloudflare Pages, Vercel, or any other host that serves HTML.

What to check after migration

Run through this once after you switch:

  • Submit a test from your own browser and confirm the notification arrives
  • Submit a test from an incognito window on mobile data (not your office Wi-Fi)
  • Fill in the honeypot field via browser DevTools and confirm that submission is dropped
  • Check that the thank-you redirect lands on your site, not on the backend's default page
  • Export old Netlify Forms submissions from the Netlify dashboard before decommissioning
  • Keep Netlify Forms enabled in parallel for 48 hours to catch any misrouted traffic

That last one is the cheap insurance move. Netlify Forms costs you nothing to leave running for a couple of days while you validate the new setup, and if anything is wrong you still have a fallback path.

The honest conclusion

If you're a happy Netlify Forms user at 20 submissions a month, stay. It's fine. You don't need to migrate for the sake of migrating, and I'm not going to pretend the decision is obvious.

If you're paying $19/month for Netlify Forms, or if you hit the 100/month wall and had to upgrade, or if you have more than one site, or if webhook retries matter to you — the math gets obvious in a hurry. A dedicated form backend gives you more at every price point, and the migration is ten minutes of find-and-replace plus a thirty-minute test.

Netlify Forms was a great convenience feature for the 2020 "Jamstack everything" era. In 2026, the "hosted form backend" category has outgrown it, and the alternatives are both cheaper and more capable.


Start a free form on FormTo — 25 submissions a month, EU-hosted by default, webhook retries and submission search included. Follow the migration steps above and you can be off Netlify Forms by the end of the afternoon.

For a broader comparison of form backend options, see the Formspree / Basin / Getform teardown. And if you're evaluating which static host to pair with your new form backend, the setup pattern is identical on any static site — the form backend doesn't care where your HTML is served from.

← All posts