Visual builder
Webflow form handling without a backend
Webflow has a built-in form handler, but submissions are processed on Webflow's US infrastructure and capped by your plan. To keep form data in the EU — and lift the submission cap — repoint the form at Formward, an EU-hosted form backend. You design the form in Webflow exactly as usual; only the action URL changes.
In the Webflow Designer, select the Form Block, open its settings, and set the Action to your Formward endpoint with the POST method. Add a hidden honeypot field named _gotcha. On publish, every submission goes straight to Formward in Sweden rather than to Webflow.
EU-hosted · Design in Webflow, store in Sweden: routing the action to an EU endpoint keeps personal data inside the EU/EEA, with a DPA on request.
The Webflow example
Copy this into your project and replace <FORM_ID> with the id of a form you create in the Formward dashboard.
html
<!-- The form Webflow publishes — set Action + Method in the Form settings.
This is the markup your Form Block produces once configured. -->
<form action="https://forms.formward.eu/f/<FORM_ID>" method="POST">
<input type="email" name="email" placeholder="Email" required />
<textarea name="message" placeholder="Message" required></textarea>
<!-- Add as a hidden field in the Designer; it must stay empty. -->
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off"
style="display:none" aria-hidden="true" />
<input type="submit" value="Send" />
</form>
<!-- Webflow settings:
1. Select the Form Block.
2. Form Settings → Action: https://forms.formward.eu/f/<FORM_ID>
3. Method: POST
4. Add a hidden field named "_gotcha" (leave its value empty). -->Success and error handling
- Setting a custom Action makes the browser POST directly to Formward; Webflow's own success/error states still show, and Formward returns a 302 redirect on a standard submit.
- Match each input's field name to what you expect in Formward — Webflow derives the name from the field's settings, so set them deliberately.
- The _gotcha honeypot replaces Webflow's reCAPTCHA dependency for basic bot filtering; Formward drops any submission where it is filled.
Spam protection
Every example above includes the _gotcha honeypot field. It is hidden from real users and must stay empty; Formward silently drops any submission where it is filled, which stops most bots with no CAPTCHA. For a stricter gate, add a Cloudflare Turnstile widget and send its token as the cf-turnstile-response field — Formward verifies it on receipt.
The JSON response
A standard POST gets a 302 redirect (or your thank-you page). Send the Accept: application/json header — as every fetch() example above does — and Formward returns JSON instead:
HTTP/1.1 200 OK
Content-Type: application/json
{ "ok": true, "id": "clxyz123...", "files": [] }On failure the body is { ok: false, error } with a 4xx status (validation, plan limit, and so on). See the AJAX docs for the full status-code table and CORS notes.
Other frameworks
Collect your first Webflow submission
Create a form, paste the snippet, and keep every submission in the EU. GDPR-clean from the first POST.