send.webforms.toRead the docs →

Move a form from Formspree, Web3Forms, FormSubmit or Netlify

Paste the form from your site and get it back pointed at WebForms, with every hidden field renamed or removed the way the migration guides describe. Nothing else in your markup is touched: attribute order, quoting and indentation stay as you wrote them, so you can diff the result. It runs in your browser and the form never leaves the page.

Leave it empty to get a placeholder you can fill in later.

Converted from Formspree

<form action="https://send.webforms.to/wft_your_key" method="POST">
  <p hidden><input name="_gotcha" tabindex="-1" autocomplete="off"></p>
  <input type="hidden" name="_subject" value="New enquiry">
  <input type="hidden" name="_redirect" value="https://example.com/thanks">
  <input type="email" name="email" required>
  <textarea name="message" required></textarea>
  <button type="submit">Send</button>
</form>

What changed

  • Pointed the form at https://send.webforms.to/wft_your_key instead of https://formspree.io/f/xyzabcde.
  • Renamed the hidden subject field to _subject. The underscore stops it colliding with a real field called subject.
  • Renamed _next to _redirect. Both work for the thank-you page, but _redirect also sends the visitor back to your form with an error code if a submission is rejected.
  • Added a hidden _gotcha honeypot. Humans never see it; a bot that fills it is discarded before any other check runs.

Still to do in the dashboard

  1. Add your destinations (email on every plan; Slack, Discord, Telegram and webhooks on paid plans) to the form in the dashboard.
  2. Submit the form once for real and check that it appears in the dashboard and the delivery log.

What it changes, service by service

Formspree. The action URL, _next to _redirect, and a hidden subject to _subject. The _gotcha honeypot works as it is, so it is left alone. A visible field someone happened to call subject is left as data, because renaming it would turn a question you asked your visitor into a setting.

Web3Forms. The access_key input goes, since the key moves into the URL, and subject, redirect, replyto and from_name gain their underscore. botcheck becomes the _gotcha honeypot.

FormSubmit. Your email address leaves the action URL, which is the change most people are after. _next becomes _redirect and _honey becomes _gotcha. Fields like _cc, _autoresponse, _template and _webhook are removed, because each is a setting in the dashboard rather than something a public form should be able to change, and the tool lists where each one went.

Netlify Forms. The data-netlify and netlify-honeypot attributes and the hidden form-name input go, the honeypot is renamed to _gotcha, and the form gains the action attribute it never needed on Netlify. The form then works on any host, not only one that scans your HTML at build time.

What it cannot move

Anything that lives in the old service rather than in your HTML: destinations, CC lists, auto-responder text, past submissions. Those are listed under "still to do" for the form you paste. The full walkthroughs cover each in detail: Formspree, Web3Forms, FormSubmit and Netlify Forms.

Still deciding whether to move at all? The comparison pages say plainly when you should stay: vs Formspree, vs Web3Forms, vs FormSubmit, vs Netlify Forms.