Skip to content
← All migration guides

Migrate · Getform

Migrate from Getform (now Forminit) to Formward

Getform was renamed Forminit on 14 January 2026. The same team runs it, and Forminit says existing Getform endpoints keep working. Its docs use https://forminit.com/f/ plus the form ID as the action, and name fields with a block prefix such as fi-sender-email or fi-text-message.

Forminit sets the subject, Reply-To and redirect in its dashboard rather than with hidden fields. On Formward you add a hidden field or two for the subject and redirect, or set them on the form. Reply-To comes from a field named email.

Last checked 7 October 2026. What this guide says about Getform comes from Getform's own documentation, listed under Sources. Check their current docs if something looks different in your account. The Formward side is the reference in the migration docs.

The change

Swap the action URL. Name the sender field email so it sets Reply-To, and add _subject and _redirect where you used Forminit's dashboard settings for them.

Before: Forminit, HTML

<form action="https://forminit.com/f/YOUR_FORM_ID" method="POST">
  <input type="email" name="fi-sender-email" required>
  <textarea name="fi-text-message" required></textarea>
  <input type="text" name="_gotcha" style="display:none">
  <button type="submit">Send</button>
</form>

After: Formward, HTML

<form action="https://forms.formward.eu/f/<formId>" method="POST">
  <input type="email" name="email" required>
  <textarea name="message" required></textarea>
  <input type="hidden" name="_subject" value="New enquiry">
  <input type="hidden" name="_redirect" value="/thanks">
  <input type="text" name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">
  <button type="submit">Send</button>
</form>

Before: Forminit SDK

// With the forminit SDK loaded
const forminit = new Forminit();
const { data, error } = await forminit.submit("YOUR_FORM_ID", new FormData(form));
if (error) throw new Error("Submission failed");

After: Formward, fetch()

const res = await fetch("https://forms.formward.eu/f/<formId>", {
  method: "POST",
  headers: { Accept: "application/json" },
  body: new FormData(form),
});
const data = await res.json();
if (!data.ok) throw new Error(data.error);

Field and feature mapping

GetformFormwardNotes
https://forminit.com/f/{id} or a getform.io endpointhttps://forms.formward.eu/f/<formId>The only required change to the form tag.
fi-sender-emailemailA field named email sets Reply-To on the notification. If you keep the fi-sender-email name, add _replyto to get Reply-To.
fi-text-message and other fi- fieldsany nameStored as sent. Keep the names if a downstream tool expects them, or simplify them.
_gotcha_gotchaForminit's default honeypot name. If you renamed it in Forminit, switch back to _gotcha.
Subject (dashboard)_subjectOr leave the form's default subject.
Reply-To template (dashboard)email or _replytoFormward reads Reply-To from a field named email; _replyto overrides it.
Redirections (dashboard)_redirect or the form's redirectA relative path, or a URL on one of the form's allowed origins.
Cc and Bcc (dashboard)Extra notification recipientsFrom Personal.
fi-file-* inputs, multipartfile input, multipartUploads are on Professional and up (5 files of up to 10 MiB each on Professional).
Turnstile, reCAPTCHA or hCaptchacf-turnstile-responseFormward supports Cloudflare Turnstile, optional per form.

What changes, what stays

Changes

  • The action or SDK call becomes a plain action URL or fetch().
  • Subject and redirect move from Forminit's dashboard to hidden fields or the Formward form settings. The sender field fi-sender-email becomes email, which sets Reply-To.
  • Error handling reads ok and error instead of success, error and code.

Stays the same

  • The _gotcha honeypot.
  • Your field names, including fi- prefixed ones, if you keep them.
  • multipart/form-data for forms with files.

Differences to test before you switch

Specific to Getform

  • Forminit includes file uploads on every plan, up to 25 MB per submission. Formward starts uploads on Professional, so a free Forminit form that takes files needs a paid Formward plan.
  • Forminit groups fields into typed blocks by their fi- prefix. Formward stores a flat set of named fields, so fi-text-message stays a field called fi-text-message.
  • Forminit's JSON responses use success, redirectUrl and a submission object, with error codes such as FORM_NOT_FOUND. Formward returns ok, id and error, plus a redirect key when the form has a redirect URL set.

How Formward behaves

  • JSON responses. Send Accept: application/json and a success is a 200 with { ok: true, id }. An error is { ok: false, error } with a status code. Without that header, a successful post redirects or shows Formward's thanks page. Code that only checks res.ok keeps working.
  • Status codes. 402 when the plan's monthly submission limit is reached (the body has upgrade: true), 422 when a field fails a validation rule set on the form or required consent is missing, 429 when one address posts too often (with a Retry-After header), and 403 when the origin is not allowed, the Turnstile check fails or files are sent on a plan without uploads.
  • File uploads. Uploads need enctype="multipart/form-data" and a plan that includes them: Professional and up (5 files of up to 10 MiB each on Professional). On Free and Personal a post that carries files is refused with 403, so test an upload before you switch a form that takes attachments.
  • Redirects. A hidden _redirect is followed only if it is a relative path or a URL on one of the form's allowed origins; otherwise it is ignored and the redirect set on the form applies, then Formward's thanks page. JSON (AJAX) requests are never redirected.
  • Spam. If the _gotcha honeypot is filled in, the sender gets a normal success response, but the submission is stored as spam, sends no notification and does not count toward your quota. Rate limits apply on every plan; Cloudflare Turnstile and disposable-email blocking are optional per form.
  • Allowed origins. With the list empty, any site can post to the endpoint. Once you add an origin, requests whose Origin header does not match are refused with 403, including server-side requests that send no Origin header.
  • Reply-To. The Reply-To of the notification email is taken from _replyto, then _reply_to, then a field named email. So a plain email field sets Reply-To with no rename, and _replyto only overrides it, for example when the email field has another name or the form has several. An invalid address is dropped, and the email then has no Reply-To.

Every status code and body is listed in responses and redirects.

History, integrations and settings

  • Forminit lists CSV export on its Pro plan and above. Formward's CSV importer (Dashboard, Import & migrate) takes any CSV with a header row, up to 5,000 rows and 10 MB per file. Imported rows send no email and do not count toward your quota. Each row keeps its original date when the file has a column named Submitted At, created_at or createdAt; otherwise it is dated at import time. Attached files are not imported, only cell values.
  • Forms on the Free plan keep submissions for 30 days, and the nightly retention sweep deletes imported rows older than a form's retention window. To keep a longer history, import into a form on a paid plan with a long enough window.
  • The form importer on the same page reads your original Getform HTML form and creates an inactive draft with the fields mapped. Notification addresses, webhooks, autoresponders and spam settings are listed for you to review and are never switched on by the import.
  • Webhooks, Slack, Discord, Google Sheets, Zapier and Make connections, autoresponders and a custom SMTP sender belong to your Forminit account and do not move with the endpoint. Recreate the ones you need: Formward webhooks (including Slack, Discord, Teams and Mattermost), Google Sheets and Baserow sync start on Professional, the autoresponder on Professional, and extra notification recipients on Personal.

Pricing and data location

  • Forminit lists Free with 100 submissions a month and 1 form, Pro at $16 a month billed yearly (5,000 submissions) and Business at $50 a month billed yearly (50,000). At high volume it is cheaper than Formward.
  • Forminit is operated by UXPLUS LTD in London and says its application and data servers are in the EU regions of AWS.
  • Formward is priced in euros: Free with 50 submissions a month, then Personal at EUR 15, Professional at EUR 30 and Business at EUR 90 a month (EUR 10, 20 and 60 billed yearly).
  • Formward stores and processes submissions at Hostup AB in Sweden and sends notification email through Mailjet in the EU. The one optional non-EU sub-processor is Cloudflare Turnstile, on forms where you switch it on.

The full side-by-side, with sources, is in Formward vs Getform. Formward's prices are on the plans page, and where each part of Formward runs is on EU data residency.

Step-by-step checklist

  1. Create the form. In the Formward dashboard, create a form, set the notification email and copy the endpoint.
  2. Change the action. Replace the forminit.com or getform.io URL in the form's action with the Formward endpoint, or replace the SDK call with fetch().
  3. Add the hidden fields. Add _subject and _redirect to replace the settings you had in Forminit's dashboard, and rename fi-sender-email to email so it sets Reply-To.
  4. Restrict origins. Add your site's origin, for example https://www.example.com, to the form's allowed origins. Leave the list empty if you also post from a server.
  5. Test before you switch. Point a copy of the form at Formward and send a few entries: a normal one, one with the honeypot filled, and one with a file if the form takes uploads. Check the dashboard and the notification email.
  6. Recreate integrations. Set up webhooks, Sheets sync, extra recipients and the autoresponder on the Formward form.
  7. Bring the history. If you want past submissions, export them as CSV from your old provider and import them under Dashboard, Import & migrate.
  8. Retire the Forminit form. Switch the live form, watch the first real submissions arrive, then disable the form at Forminit so nothing is split between two inboxes.

Sources

Last checked 7 October 2026

Move one form first

The free plan takes 50 submissions a month with no card. Point a copy of one form at Formward, send a few test entries, and switch the live form once the path works end to end.

Migrate from Getform (Forminit) to Formward