Netlify Forms Alternative: What to Use for Static Site Forms
Netlify Forms Alternative: What to Use for Static Site Forms
Netlify Forms is one of the easiest ways to add form handling to a static site. Enable form detection, add data-netlify="true" to your <form>, deploy, and submissions start flowing. Zero external accounts, zero backend code. For projects that stay on Netlify, it just works.
The catch isn’t quality — it’s portability. Your forms are baked into your hosting. If you move your site to Cloudflare Pages, Vercel, or GitHub Pages, your forms stop working. And even if you’re staying put, you might eventually need more control over webhooks, field validation, dashboards, or team workflows than Netlify Forms provides out of the box.
This article is a practical guide for what to use when you need to move off Netlify Forms — whether you’re migrating hosts, building for portability, or just want more control over your form infrastructure.
When Netlify Forms Is Still the Right Choice
Before exploring alternatives, it’s worth being honest about when Netlify Forms is the right tool. It’s not a compromise — for many projects it’s genuinely the best option:
You’re committed to Netlify hosting — If your site isn’t moving, Netlify Forms eliminates the need for an external service. No extra accounts, no endpoint URLs to manage, no separate dashboard to check.
You want zero-config simplicity — Enable form detection in the dashboard, add the attribute to your form, deploy. That’s the entire setup. No API keys, no endpoint configuration, no field mapping.
Your form needs are straightforward — A contact form, a newsletter signup, a feedback widget. Netlify Forms handles these without ceremony.
You already use Netlify’s ecosystem — If you’re leveraging Netlify’s build pipeline, serverless functions, and deploy previews, keeping forms inside that ecosystem reduces complexity.
You need basic spam protection — reCAPTCHA integration is built in and works well for most projects.
The forms below aren’t “better” in an absolute sense — they’re better when your needs diverge from what Netlify Forms provides naturally.
What You Lose When Leaving Netlify Forms
Before picking a replacement, it helps to audit exactly what Netlify Forms handles for you today. Here’s the full picture:
Build-Time Form Detection
Netlify’s build system scans your HTML at deploy time and automatically handles any form it finds. You don’t register forms anywhere — just include the markup and Netlify picks it up. This is effortless but means your forms are discovered and managed through the build pipeline, not through a standalone form service.
What changes: With an external form backend, you register a form in the service’s dashboard and get an endpoint URL. The form is managed independently of your deploy process.
Submissions Dashboard
Netlify provides a built-in UI for viewing, searching, and managing submissions. You can see entries, filter them, and download CSV exports. It’s not a full CRM, but it covers the basics.
What changes: External form backends offer their own dashboards with varying levels of depth — from simple submission lists to full search, filtering, status tracking, and team access controls.
Email Notifications
You can configure Netlify to send email alerts when new submissions arrive. Notifications go to the email addresses you specify in the dashboard.
What changes: Most form services support email notifications too, often with more control over templates, recipients, and conditional routing.
Spam Filtering
Netlify Forms includes reCAPTCHA integration to reduce spam. You can enable it per form in the dashboard.
What changes: External services may offer additional layers — honeypot fields, AI-based scoring, CAPTCHA variants (hCaptcha, Turnstile), content filtering, or custom spam rules.
CSV Export and API Access
Netlify allows you to download submissions as CSV from the dashboard. There’s also a Netlify API for programmatic access to form data.
What changes: Most form backends offer CSV export directly from their dashboard. Some also provide REST APIs and webhooks for real-time data forwarding.
File Upload Handling
Netlify Forms accepts file uploads up to 8 MB per request. Files appear in the submissions dashboard with download links.
What changes: External services vary in their file upload limits and supported types. Some offer larger limits, configurable allowed types, and virus scanning.
Form-Triggered Functions
Netlify can run serverless functions when a form is submitted. This is powerful for custom logic — writing to a database, calling an API, sending a Slack message, or processing data before storage.
What changes: External form backends typically offer webhooks as the equivalent mechanism — a POST request to a URL you specify. Some also support direct integrations (Slack, Zapier, Make) without needing a function.
The Before and After
Here’s what the migration looks like in practice. The core change is replacing the Netlify-specific attribute with a standard form action URL.
Before: Netlify Forms
<form name="contact" method="POST" data-netlify="true">
<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>
Netlify’s build system detects the data-netlify="true" attribute, strips it from the deployed HTML, and injects a hidden form-name input. When someone submits, Netlify handles validation, spam filtering, storage, and notification.
After: Portable Form Endpoint
<form action="https://your-form-backend.example/submit" method="POST">
<label>
Name
<input type="text" 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>
The difference is minimal: data-netlify="true" becomes action="URL". Your field names stay the same. Your form markup stays almost identical. The backend changes from Netlify’s build-time detection to an external service that accepts POST requests.
This is the fundamental trade-off: you lose the “just add an attribute” convenience, but your forms become portable — they work on any hosting platform.
Three Replacement Paths
There are three general directions when moving off Netlify Forms. The right one depends on your hosting plans and how much control you want.
Path A: Portable Hosted Form Backend
Point your <form> at an external endpoint instead of Netlify’s built-in handler. Your forms become independent of your hosting — you can move your site anywhere without touching your form setup.
This is the most common path. You get the same “set it and forget it” simplicity as Netlify Forms, but without the hosting lock-in. Services like FiraForm, Formspree, Basin, and Forminit all work this way.
The migration is usually simple: replace data-netlify="true" with an action URL pointing at the new service, keep method="POST", and you’re done.
Path B: Host-Native Replacement
If you’re moving to another platform that offers built-in form handling, you can switch to their native forms feature. This keeps the same convenience model but changes which host you’re locked into.
This makes sense if you’re confident your new host is permanent. It doesn’t solve the portability problem — it just moves the lock-in.
Path C: Serverless Function
Build your own form backend using Cloudflare Workers, Vercel Functions, or AWS Lambda. You handle validation, spam filtering, email delivery, storage, and error handling yourself.
This gives you complete control but the most development overhead. Best for teams with specific compliance requirements or unusual workflow logic that no form backend supports.
Scenario Guide
Here’s how the replacement path looks in four common migration scenarios.
Moving from Netlify to Cloudflare Pages
Cloudflare Pages doesn’t have a built-in forms feature like Netlify. If you’re migrating, you’ll need an external form backend — this is where Path A (portable hosted form backend) is the natural fit.
The migration is straightforward: pick a form service, create an endpoint, update your <form action>, and deploy to Cloudflare Pages. Your forms now live independently of your hosting.
Since Cloudflare Pages integrates well with Cloudflare Workers, you could also use Path C (serverless function) if you want to build custom form handling within the Cloudflare ecosystem.
Moving from Netlify to Vercel
Vercel doesn’t offer built-in form handling either. Same situation as Cloudflare Pages — you need an external form backend.
If you’re using Next.js on Vercel, some form services (like Forminit) provide framework-specific SDKs with proxy handlers to keep API keys secure on the server side. This can make the integration feel more native to the Next.js ecosystem.
Staying Static but Wanting Portable Forms
You’re not migrating hosts — you just want your forms to be independent of Netlify. Maybe you’re evaluating other hosting options for the future, or you want the flexibility to switch without rebuilding your forms.
This is the purest case for Path A. Pick any portable form backend, update your form markup, and your forms are now decoupled from your hosting. You stay on Netlify, but your form infrastructure isn’t locked in.
Needing Custom Backend Logic
Your form workflow has requirements that no form backend supports: complex validation rules, multi-step processing, direct database writes, or compliance constraints that require data to stay within your own infrastructure.
This is Path C territory. Build a serverless function that receives submissions, processes them however you need, and stores or forwards the data. The trade-off is that you’re maintaining your own form backend.
Provider Notes
Here’s a deeper look at each option — what it replaces from Netlify Forms, where it fits, migration complexity, and the main trade-off.
FiraForm
Replaces: Netlify’s submissions UI and spam filtering with a dedicated dashboard and multi-layer spam protection.
What you get: Web-based dashboard for viewing, searching, and managing submissions. Flexible field configuration with server-side validation (text, email, number, URL, date, file upload, arrays). Three-layer spam protection: AI-powered scoring, privacy-friendly CAPTCHA slider, and honeypot fields. Webhooks for sending submissions to external services. CSV export. Email notifications to team members with optional file attachments. Domain whitelisting. Team collaboration with four roles (Owner, Admin, Manager, Member). File uploads with configurable allowed types and size limits.
Where it fits: Projects that need fine-grained field control, multi-layer spam filtering, and a dashboard that works regardless of where your site is hosted. FiraForm is built specifically for static sites.
Migration complexity: Low. Create an account, get your endpoint URL, update your form’s action attribute. The field names in your existing form carry over directly.
Main trade-off: Requires account setup and more configuration decisions upfront. Newer service with a smaller community than established tools.
Formspree
Replaces: Netlify’s form detection and submission storage with a proven endpoint-based backend.
What you get: Server-side validation, machine-learning spam filtering (Formshield) with reCAPTCHA and custom rules, customizable email notifications and auto-responses, a web-based inbox with daily analytics, CSV and JSON export, webhooks, file upload support, and direct integrations with Slack, Google Sheets, HubSpot, Mailchimp, Airtable, Salesforce, Discord, Telegram, and many more.
Where it fits: Projects that want a mature, low-friction form backend with a wide integration ecosystem. Formspree has been around since the early days of static site forms and covers a lot of ground.
Migration complexity: Low. Change your form’s action attribute to the Formspree endpoint URL, keep method="POST", and test. Most migrations take minutes.
Main trade-off: Tied to Formspree’s ecosystem. You’re trusting their infrastructure, and some advanced features require paid plans.
Basin
Replaces: Netlify’s form-triggered functions and notifications with a richer integration and automation layer.
What you get: Web dashboard for managing, filtering, and searching submissions. Notification emails with fast delivery. Multi-layer spam protection with CAPTCHA options, honeypots, and content filtering. Auto-responses. Integrations with Discord, Google Sheets, Slack, Zapier, Make, and webhooks. File uploads. Multi-step form support with progress saving. Form analytics. BasinJS JavaScript library for advanced frontend control. No-code form builder. API and CLI access. Automation features for organizing and routing submissions.
Where it fits: Teams that need extensive integrations, workflow automation, and a no-code option alongside the API. Basin goes beyond submission storage with tools for organizing and routing submissions.
Migration complexity: Low to medium. Endpoint-based like the others, but the depth of configuration options (integrations, automation rules, spam layers) means more setup if you want the full feature set.
Main trade-off: Some advanced features are on paid plans. The breadth of options can feel overwhelming for simple use cases.
Forminit (Formerly Getform.io)
Replaces: Netlify’s submission storage with a typed validation model and marketing attribution tracking.
What you get: Server-side validation with a typed block-based field model (email format, E.164 phone, ISO country codes, URL structure, date format, rating ranges). Spam protection with reCAPTCHA v3, hCaptcha, and honeypot fields. File uploads up to 25 MB. Email notifications and autoresponders (paid plans). Webhooks for forwarding submissions to external services (paid plans). REST API (paid plans). Integrations with Zapier, Slack, Discord, Make, and custom webhooks (paid plans). CSV export (paid plans). Dashboard with status tracking, internal notes, and star ratings. JavaScript SDK with automatic UTM and ad platform click ID capture. Proxy handlers for Next.js and Nuxt.js. Workspaces with role-based access control (paid plans). GDPR-compliant storage on AWS servers in Ireland. Forminit rebranded from Getform.io in January 2026 and has been operating since 2015.
Where it fits: Projects that want structured field validation, a lightweight SDK with marketing attribution tracking, and webhook/API access for programmatic workflows.
Migration complexity: Low to medium. The endpoint model is the same, but Forminit’s typed block naming convention (fi-sender-email, fi-text-message) may require renaming some fields. If you’re using the SDK, there’s additional integration work.
Main trade-off: Most useful features (webhooks, CSV export, REST API) require paid plans. The typed naming convention adds a learning curve.
Serverless Function
Replaces: All of Netlify Forms with custom logic you fully control.
What you get: Complete control over validation, spam filtering, email delivery, storage, and error handling. You can write to your own database, call any API, transform data however you need, and process submissions through complex workflows.
Where it fits: Projects with specific compliance requirements, complex multi-step processing, direct database writes, or workflow logic that no form backend supports.
Migration complexity: High. You’re building a form backend from scratch. Expect to handle validation, spam filtering (honeypot, rate limiting, CAPTCHA integration), email delivery (via a transactional email service), storage (database or file), error handling, and CORS.
Main trade-off: You’re building and maintaining your own form backend. More development and maintenance overhead, but complete control.
Feature Comparison Table
Here’s a side-by-side reference for the features that matter most when replacing Netlify Forms.
| Feature | Netlify Forms | FiraForm | Formspree | Basin | Forminit |
|---|---|---|---|---|---|
| Setup method | data-netlify attribute | Form action URL | Form action URL | Form action URL | Form action URL or SDK |
| Hosting lock-in | Netlify only | None | None | None | None |
| Server-side validation | No (HTML5 only) | Yes | Yes | Yes | Yes (typed blocks) |
| Spam protection | reCAPTCHA | AI scoring + CAPTCHA + honeypot | ML filter + reCAPTCHA | Multi-layer AI + CAPTCHAs | reCAPTCHA + hCaptcha + honeypot |
| Dashboard | Yes (Netlify UI) | Yes | Yes | Yes | Yes |
| CSV/JSON export | CSV + API | CSV | Yes | API/export options | CSV (paid) |
| Webhooks | HTTP notifications + functions | Yes | Yes | Yes | Yes (paid) |
| File uploads | Yes (8 MB limit) | Yes (configurable) | Yes | Yes | Yes (25 MB) |
| Direct integrations | Form-triggered functions | Webhooks + Zapier/Make/n8n | 25+ (Slack, Sheets, HubSpot, etc.) | Discord, Sheets, Slack, Zapier, Make | Zapier, Slack, Discord, Make |
| Team collaboration | Via Netlify team | Yes (4 roles) | No | Yes | Yes (paid, role-based) |
| Custom success/error pages | Yes | Yes | Yes | Yes | Yes |
| REST API | Via Netlify API | Yes | Limited | Yes (CLI + API) | Yes (paid) |
Migration Checklist
Switching from Netlify Forms to an external form backend is usually straightforward. Here’s a phased approach to make sure you don’t miss anything.
Phase 1: Audit Your Current Netlify Form
Before changing anything, document what you have:
- List all your Netlify forms — Check your Netlify dashboard under Forms to see every active form
- Document the fields — Note each field’s
name, type (text, email, file, select), and whether it’s required - Check current notifications — Who receives email alerts? Are there any form-triggered functions?
- Review spam settings — Is reCAPTCHA enabled? Any custom configuration?
- Export existing submissions — Download CSVs from the Netlify dashboard before switching. There’s no automatic import tool for other services.
Phase 2: Choose and Set Up Your Replacement
- Pick a form service — Based on your needs (dashboard, webhooks, validation, integrations), choose a provider from the options above
- Create a form endpoint — Sign up, create a project, and get your new endpoint URL
- Configure notifications — Set up email alerts, webhooks, or integrations in the new service
- Enable spam protection — Configure CAPTCHA, honeypot, or AI filtering to match or improve on your current setup
Phase 3: Update Your HTML
- Replace the form action — Remove
data-netlify="true"(ornetlify) and addaction="NEW_ENDPOINT"withmethod="POST" - Keep field name attributes — Your existing
nameattributes should work with most services. Check for any naming conventions required by your new provider (e.g., Forminit usesfi-{type}-{name}) - Add any new markup — Some services require a hidden field, a CAPTCHA widget script, or an SDK snippet
Phase 4: Test Everything
- Test with real submissions — Send test entries and verify they arrive in the new dashboard
- Check field mapping — Make sure all fields are captured correctly, especially file uploads, select fields, and multi-value inputs
- Verify email notifications — Confirm alerts arrive at the right addresses
- Verify dashboard and export — View submissions in the dashboard and test CSV/JSON export
- Recreate success/error redirects — Update redirect URLs if the new service handles them differently
- Test file uploads — If your form accepts files, verify they upload correctly and appear in the dashboard
- Test on your new host — If you’re also migrating hosting, deploy and test the form on the new platform
Phase 5: Cut Over
- Deploy the updated form — Push your changes and verify the live form works
- Monitor for a few days — Watch submissions to make sure nothing is being lost or misrouted
- Update internal docs — Let your team know about the new form workflow and where to find submissions
- Disable Netlify form detection — Once you’re confident everything works, you can disable form detection in the Netlify dashboard to reduce build processing
Most migrations take less than an hour. The longest part is usually testing to make sure everything works as expected.
Common Mistakes to Avoid
A few pitfalls come up repeatedly when people migrate off Netlify Forms:
Forgetting to export old submissions — Netlify stores submissions in its dashboard. If you need that data, download it before you switch. There’s no automatic import to other services.
Removing method="POST" by accident — When updating your form, make sure method="POST" stays. Some services won’t accept GET requests.
Not testing file uploads — File handling varies between services. Test with an actual file upload to make sure it works end-to-end.
Ignoring spam protection — If reCAPTCHA was handling spam on Netlify, make sure your new service has equivalent protection enabled before going live.
Leaving form-triggered functions running — If you had Netlify Functions triggered by form submissions, those will stop working when you switch. Make sure your new webhook or notification setup covers the same logic.
Not updating success/error redirects — If your form redirected to a thank-you page after submission, verify that works with the new service. Some handle redirects differently.
Need Forms For Your Static Site?
FiraForm is the headless form backend built specifically for static sites. No backend code needed—just point your forms to our endpoint and we'll handle submissions, validation, notifications, and more.
Free tier available • No credit card required
The Bottom Line
Netlify Forms is a solid, convenient form handling solution that works well when your site stays on Netlify. Zero-config setup, built-in submissions UI, reCAPTCHA filtering, CSV export, and form-triggered functions cover a lot of ground.
But if you need hosting portability, more control over webhooks and dashboards, server-side field validation, or a form infrastructure that isn’t tied to your hosting platform — there are strong alternatives available. The portable options above (FiraForm, Formspree, Basin, Forminit) each cover different needs, from simple email delivery to full workflow automation.
Pick based on your actual hosting strategy and workflow requirements. There’s no universal winner — just the tool that fits your current project.
Have questions about migrating from Netlify Forms? Drop a comment or reach out — happy to help you figure out what fits your workflow.