Netlify Forms alternatives in 2026: a migration guide
Netlify Forms used to be the no-brainer choice if your site was already on Netlify. Recent billing changes made the cost less predictable, and a lot of people are quietly migrating. Here's how to do it — including the actual code diff for each alternative.
Disclosure
I build Form4Dev, one of the alternatives below. This is written as a practical migration guide rather than a sales pitch — every alternative listed gets the same code-diff treatment, including the cases where I'd recommend a competitor.
What changed and why people are leaving
Netlify Forms was built around a simple value proposition: you're already on Netlify, so adding a form is one HTML attribute. For years, the included quota on most plans covered normal usage and nobody thought about it.
The shift to credit-based billing changed that. Form submissions now consume credits from a shared pool that also covers function invocations and bandwidth. A single afternoon of bot spam against a form can drain credits your build process expects, and the cost-per-submission becomes harder to forecast.
Combined with general Netlify pricing changes, this has pushed teams to look for a dedicated form backend that's priced per-form-submission, not per-credit. Below is what's available and how to migrate to each.
Before you migrate: export your data
Netlify Forms lets you export submission history as CSV from the dashboard. Do this first, regardless of which alternative you pick. Once you re-point your form's action URL elsewhere, the new service starts collecting submissions immediately, but the old ones stay in Netlify until you export.
$ # Site → Forms → [select form] → Download as CSV $ # or via CLI: $ netlify api listSiteForms --data '{"site_id":"YOUR_SITE_ID"}'
Save the CSVs somewhere durable. You may not need them, but you don't want to need them and not have them.
The migration: what actually changes
Netlify Forms works via a special HTML attribute pattern:
<form name="contact" method="POST" data-netlify="true"> <input name="email" type="email" required> <textarea name="message" required></textarea> <button>Send</button> </form>
Netlify's build process detects the data-netlify="true"
attribute, registers the form, and rewrites it to POST to its own
form-handling endpoint. To move off, you remove that attribute and
explicitly point the form at the new service's endpoint URL.
Here's that change for each alternative.
Alternative 1 — Formspree
The boring, mature choice. Most documented, most integrations, $10/mo starter past 50 submissions.
The diff:
- <form name="contact" method="POST" data-netlify="true"> + <form action="https://formspree.io/f/<YOUR_FORM_ID>" method="POST"> <input name="email" type="email" required> <textarea name="message" required></textarea> <button>Send</button> </form>
Honeypot: Formspree uses _gotcha — add
<input type="text" name="_gotcha" style="display:none">.
Redirect after submit: add a hidden _next
field with your thank-you URL, or set it in the dashboard.
Alternative 2 — Basin
The dashboard-quality choice. Nicest UI in the category, $8.25/mo starter, 100/mo on free.
- <form name="contact" method="POST" data-netlify="true"> + <form action="https://usebasin.com/f/<YOUR_FORM_ID>" method="POST"> <input name="email" type="email" required> <textarea name="message" required></textarea> <button>Send</button> </form>
Basin's spam filtering is good enough that you can usually skip an explicit honeypot. Redirect URL goes in the form settings.
Alternative 3 — Formcarry
The price-optimized choice. $6/mo starter, lifetime archive on free tier.
- <form name="contact" method="POST" data-netlify="true"> + <form action="https://formcarry.com/s/<YOUR_FORM_ID>" method="POST"> <input name="email" type="email" required> <textarea name="message" required></textarea> <button>Send</button> </form>
Alternative 4 — Web3Forms
The unlimited-free-tier choice. POSTs go to a single endpoint with your access key embedded in the payload.
- <form name="contact" method="POST" data-netlify="true"> + <form action="https://api.web3forms.com/submit" method="POST"> + <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY"> <input name="email" type="email" required> <textarea name="message" required></textarea> <button>Send</button> </form>
Heads up: the access key is visible in your page source. Web3Forms scopes the key to one email destination, so a leaked key sends mail to your inbox — annoying but not catastrophic.
Alternative 5 — Form4Dev
Full disclosure — my product. The agent-and-automation-first choice, with transparent flat pricing ($0 / $9 / $29) and every feature on every plan.
- <form name="contact" method="POST" data-netlify="true"> + <form action="https://login.form4dev.com/api/submit/<YOUR_SLUG>" method="POST"> <input name="email" type="email" required> <textarea name="message" required></textarea> + <input type="text" name="_gotcha" tabindex="-1" style="position:absolute;left:-9999px"> <button>Send</button> </form>
Slug is whatever you named the form when you created it. Redirect
URL is configured in the form settings or passed via
_next in the payload.
What to test after migrating
Five things, in this order:
- Submit each form once from a real browser. Confirm the new service receives it and the notification email arrives.
- Check the Reply-To header on the notification. It should be the submitter's email. If hitting "reply" emails the service instead, that's a config issue.
- Submit a deliberate spam payload (fill the honeypot, or paste a known-spam URL). Confirm it gets blocked or quarantined, not delivered.
- Re-run any webhook integrations. Netlify Forms' webhook payload shape is service-specific; your new service's shape will differ. Update receivers.
- Leave Netlify Forms enabled for a week while DNS and CDN caches settle. Then disable.
Things that quietly break
Your netlify.toml form settings
If you configured spam filtering or webhook destinations in
netlify.toml, those don't transfer. Reconfigure in your
new service's dashboard.
Form rendering during the Netlify build
Netlify's build inspected your HTML for data-netlify
attributes and registered forms at deploy time. With that attribute
gone, the build process won't complain — but if you have a "form not
found" message cached in your generated output, clear the cache.
JavaScript-rendered forms
Netlify Forms had a special path for client-side-rendered forms
(netlify-honeypot, data-netlify-honeypot).
Most alternatives don't need this — they detect honeypot fields by
name regardless of how the form was rendered.
Hidden form for static prerendering
If you used the Netlify trick of including a hidden HTML form in your site so the build could detect it, you can delete that hidden form. The new service registers your form when you create it in the dashboard, not at build time.
FAQ
Will my Netlify Forms submissions transfer to the new service?
No. Historical submissions stay in Netlify. Export them as CSV before migrating. The new service starts collecting from the moment you re-point the form.
Can I keep using Netlify hosting and switch only the form backend?
Yes. The form-backend service is independent of where your site is hosted. Many people stay on Netlify for hosting and use a third-party service just for forms.
What about Netlify Functions that processed form submissions?
Most alternatives offer webhooks that fire on each submission — point your Netlify Function at the webhook URL and you keep your custom logic. Or move the function to a serverless endpoint elsewhere.
Which Netlify Forms alternative is cheapest at 10,000 submissions/month?
Web3Forms ($10/mo with dashboard), Formcarry ($15-30/mo depending on plan), Form4Dev ($29/mo Team plan), Basin (~$25/mo), Formspree ($35-50/mo). Verify on current pricing pages — these change.
Which alternative handles AI agents submitting forms?
Of the services here, Form4Dev is built specifically for agent submission as a first-class case. Deeper writeup at form backends for AI agents.
The takeaway
Netlify Forms was a great default while the pricing was predictable. The credit-based model made it less so, and a dedicated form backend is now usually the simpler answer. Migration is an afternoon's work: export, swap the action URL, test, ship. The alternatives above all do the job; the right one depends on what you value past "it works."
If you want the cleanest path for forms that also accept submissions from scripts and AI agents, Form4Dev is built around that case. Start free — 100 submissions/month on free, all features unlocked, no credit card.
Last updated May 15, 2026. Spotted something out of date? Email [email protected].