Visual builder
Webflow form handling without a backend
Webflow has a built-in form handler, and Webflow's privacy FAQ says it stores its customers' and their end users' data in the United States. To keep form submissions in the EU, 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, under a DPA published at formward.eu/dpa.
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, which answers a standard submit with a 302 redirect. The visitor leaves the page, so Webflow's on-page success message does not appear; add a hidden _redirect field pointing at a thank-you page on your site.
- 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; a submission that fills it is filed as spam and never emailed.
Spam protection
Every example above includes the _gotcha honeypot field. It is hidden from real users and must stay empty. When a bot fills it, Formward files the submission as spam and still answers with a normal success response, so the bot learns nothing and nothing reaches your inbox. Rate limits and the origin allowlist are checked on Formward's side as well. For a stricter gate, switch on Cloudflare Turnstile in the form's settings and add the widget; it adds a cf-turnstile-response field that Formward verifies on receipt. Turnstile is optional, and Cloudflare is a US provider, listed as such in the sub-processor register. The spam docs have the widget markup.
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": "3f2a9c1e-...", "files": 0, "success": { "title": "Thank you!", ... } }files is the number of uploaded files stored and success carries the confirmation text from the form's settings. When you set a redirect URL for the form, the reply also has a redirect field your code can send the visitor to. On failure the body is { ok: false, error } with a 4xx status: 422 when required consent is missing or a field is too long, 403 when a Turnstile check fails, 429 for too many submissions from one address, 402 when the account is over its plan limit. See responses and redirects for the full table and the AJAX docs for CORS.
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.