Skip to main content

Netlify Forms Alternative: Stay If You Stay on Netlify

Netlify Forms is free and unlimited on credit-based plans. A Netlify Forms alternative is the right move when the site leaves Netlify, needs a WordPress inbox or posts from another host.

Netlify Forms is form handling that rides on a Netlify deploy. You add data-netlify="true" or a netlify attribute, enable form detection and the build parses the HTML so submissions show up in the Netlify UI. A Netlify Forms alternative is worth looking at when the site is leaving Netlify, when the form has to live on a host that is not Netlify or when you want the inbox next to the rest of a WordPress site.

I build Core Forms, which is one of the options below. I’ll still say where Netlify Forms is the better tool, because if the site is staying on Netlify it usually is.

There are generally three ways people treat Netlify Forms.

You can assume every future site will be on Netlify, and let data-netlify become the way you think about forms. That works until a client wants Cloudflare Pages, a VPS or WordPress.

Or you can rip it out on day one and pay a hosted backend for a site that will never leave Netlify, which is paying twice for a deploy you already have.

But being extreme isn’t a good idea at all. Netlify Forms is an important part of the Netlify stack. It is wise to use it while the site lives there, and to pick an alternative the moment the form has to outlive the host.

The attribute is a deploy feature. It is not a form you can take with you.

Editorial scene of a Netlify deploy collecting a contact form Netlify Forms is free on credit-based plans. The alternative is about leaving the host.

How Netlify Forms Works

This is the part that surprises people coming from Formspree. There is no access key in the HTML. The build is the backend.

  1. Form detection is enabled in the Netlify UI.
  2. The HTML form has method="POST" and either data-netlify="true" or a netlify attribute.
  3. The form’s name is how it shows up in the UI. Two forms on one site need two names.
  4. On deploy, Netlify strips the attribute and injects a hidden form-name input whose value matches the form name.
  5. Posts go to the site origin. Ajax works if the body is URL-encoded. JSON is not supported.

A JavaScript-rendered form is invisible to the build unless you also ship a hidden HTML copy with the same field names, or you add the hidden form-name input yourself. Next.js and other SSR setups have the same requirement: a static HTML form that the parser can see.

File uploads are supported, with limits that matter:

  • one file per field
  • 8 MB maximum request size
  • uploads time out after 30 seconds

PII in uploads is a separate conversation. Netlify points at a Very Good Security integration for that, which is a sign that a job-application PDF is already past “throw a file input on the contact form.”

Success is a generic Netlify page unless you set action="/your-success-path/" or handle Ajax yourself.

What Netlify Forms Costs Right Now

Netlify currently has two billing stories, and mixing them up is how blog posts go stale.

Credit-based plans (Free, Personal, Pro) made form submissions unlimited and free in April 2026. Before that, a submission cost 1 credit. The changelog is public. If the account is on these plans, the form is not the line item. Bandwidth, compute and web requests are.

Legacy pricing plans still meter Forms per site. Level 0 is 100 verified submissions a month and 10 MB of uploads. Crossing the cap auto-upgrades the site to the next Forms level and bills at the end of the cycle. Free-tier accounts on the old model stay metered and have a hard limit.

So the honest sentence is: on current credit-based Netlify plans, Forms is free and unlimited. On a leftover legacy plan, 100 a month is still the first ceiling. Check which billing the team is on before you treat “unlimited” as a fact about your account.

Either way, the form only exists while the site is on Netlify.

Where Netlify Forms Is Still Better

Zero extra vendor. The host, the deploy and the form are one bill and one UI. For a marketing site that already lives on Netlify, adding Formspree is a second dashboard for no gain.

The markup stays ordinary. No access key to leak in git. No action pointing at a third-party origin. Posts stay first-party, which is nicer for cookies, CORS and “why is this form talking to api.someone.com.”

Unlimited on credit-based plans. That is a better free deal than Web3Forms’ 250 or Formspree’s 50, as long as you stay.

If the site is staying on Netlify and the form is a contact page, stay. An alternative is a migration you do not need.

Where a Netlify Forms Alternative Wins

The form is glued to the host. Move to Cloudflare Pages, GitHub Pages, a VPS or WordPress and data-netlify is a souvenir. Every other backend in this post survives a host change because the action is an URL you own or rent on purpose.

JavaScript-only forms are a footgun. The parser reads HTML at deploy time. A React form with no hidden twin 404s on submit, and the debugging thread is always the same. A hosted endpoint or a WordPress REST submit does not care whether the HTML existed at build time.

The inbox is the Netlify UI. Notifications can email or POST out, and there is a submissions API. There is still no WordPress-style moderation, no per-form action loop you edit like a plugin and no submissions table next to your posts. For a team that already lives in WP-Admin, that is the wrong room.

SSR and Next.js need extra HTML. That is documented, not a bug, and it is still work you would not do with a normal form backend.

Netlify Forms vs the Usual Alternatives

ToolBest forHost lock-inCost shapeThe honest catch
Netlify FormsSites that will stay on NetlifyYesFree and unlimited on credit-based plans; legacy plans meter from 100/monthDead if you leave Netlify; JS forms need a hidden HTML twin
Web3FormsStatic HTML on any hostNo250/month free; Pro $149/yearFiles and webhooks are paid
FormspreeA hosted dashboard and pluginsNo50/month free; Personal $120/yearAutoresponses start at Professional
FormsparkOne-time credits, any hostNo250 total free; $25 to $50 once for 50kCredits are per workspace
Core FormsWordPress inbox, HTML on any originNo (needs WordPress)$59/year or $249 lifetimeYou run WordPress; not a Netlify feature

The Web3Forms alternative and Formspree alternative posts are the hosted-endpoint versions of this decision. The WordPress form backend post is the version where the site on Netlify posts to WordPress.

Which Alternative Fits Which Site

The site is on Netlify and will stay there

Keep Netlify Forms. Enable detection, name the form, test a submit from the deployed URL, not from localhost. Local posts have nowhere to go.

The site might leave Netlify in the next year

Do not start with data-netlify. Use Web3Forms if volume is small, Formspark if you want credits, Formspree if you want the dashboard. The HTML action moves with the repo.

The marketing site is on Netlify and WordPress still runs the business

This is the usual split: Astro or Eleventy on Netlify, WordPress on the side for the CMS, the shop or the intranet. Point the Netlify-hosted HTML at Core Forms over REST. Submissions land in WordPress. The static host stays a static host.

That is the same pattern as headless WordPress forms, just started from the Netlify side.

You already hit a legacy Forms level upgrade

If the account is still on legacy metering and a campaign pushed you to Level 1, you are paying Netlify for forms and you should know it. Credit-based plans made submissions free. A billing conversation with Netlify may be cheaper than a new vendor. If you would rather leave the host, that is a migration, not a form setting.

How a Netlify Form Looks

From their docs, with labels.

<form name="contact" method="POST" data-netlify="true">
  <p>
    <label for="nf-name">Name</label>
    <input id="nf-name" type="text" name="name" autocomplete="name" required>
  </p>
  <p>
    <label for="nf-email">Email</label>
    <input id="nf-email" type="email" name="email" autocomplete="email" required>
  </p>
  <p>
    <label for="nf-message">Message</label>
    <textarea id="nf-message" name="message" rows="6" required></textarea>
  </p>
  <button type="submit">Send</button>
</form>

After deploy, the attribute is gone and this is present:

<input type="hidden" name="form-name" value="contact">

If you submit with fetch, the body has to be application/x-www-form-urlencoded. A JSON post will not land. File fields should omit a manual Content-Type so the browser can set the multipart boundary.

An alternative HTML form looks the same to the visitor. Only action and the hidden key change. The HTML form to email guide is the longer route if the current idea is still mailto:.

The Limits

Netlify Forms is not portable. That is the whole article. It is also not a builder: no multi-step UI, no calculated fields, no WordPress-style conditional logic. Spam filtering exists (Akismet and reCAPTCHA 2 in their docs). It is still a host feature, not a form product you pick independently.

I have not billed a Netlify account of my own for Forms in 2026. The credit-based unlimited change is from Netlify’s 14 April 2026 changelog and their current Forms setup and billing docs. If your dashboard still shows Forms levels, you are on the legacy path and those docs are the ones that apply.

What Quietly Ruins It

Testing only on localhost. The parser and the submissions UI live on the deployed site. A local POST is a 404 with extra steps.

A React form with no hidden HTML twin. The build never saw the fields. Submit fails, and it looks like Netlify is down.

One 9 MB resume field. The request limit is 8 MB and the upload gives up at 30 seconds. The file upload post is the longer version of why a form should say the limit before the visitor hits it.

Disabling form detection to “speed up deploys” on a site that still has forms. Netlify’s own warning is correct. Detection off means new and updated forms stop working.

Final Remarks

A Netlify Forms alternative is only urgent if the form has to outlive Netlify. If it does not, keep the attribute, enable detection and spend the attention on labels and spam.

If the site is moving, or WordPress already holds the rest of the business, put an action on the form that you could take to another host tomorrow. Web3Forms, Formspark, Formspree and Core Forms all survive that move. data-netlify does not.

Build the form. Stop reading.

Every note here came out of a real Core Forms setup.