Migrating from Sprout Forms
If your Craft site uses Sprout Forms (opens new window), Formie's migration tool copies forms, email notifications, and submissions into Formie without modifying Sprout data. Sprout Forms layouts are typically simpler than Freeform — migration is often straightforward with few unsupported field types.
Prerequisites
- Formie installed
- Sprout Forms still installed and enabled
- Database backup before production migration
Before you migrate
- Inventory forms — handles, notification rules, front-end embed locations
- Export Sprout submissions if you need CSV archives beyond what migration copies
- Run on staging with both plugins enabled
- Plan template updates — Sprout render syntax differs from Formie
Run the migration
- Navigate to Formie → Settings → Migrations → Sprout Forms
- Select Sprout forms to migrate
- Click Migrate Forms
- Review results — copied forms, notifications, submissions, and errors
Sprout Forms data is not modified.
Handle collisions
Duplicate handles get a numeric suffix — contactForm becomes contactForm1 if Formie already owns contactForm. Rename in the Formie builder and update templates.
Unsupported fields
| Sprout Forms field | Formie approach |
|---|---|
| Private Notes | Use HTML cosmetic field or editor note — not a direct equivalent |
| Regular Expression | Use Single-Line Text with validation pattern |
Most common Sprout field types (Single Line, Paragraph, Dropdown, Email, Number, Checkboxes, Radio) migrate cleanly.
After migration checklist
- Verify each form in the form builder
- Update Twig from Sprout embed syntax to
craft.formie.renderForm() - Configure spam protection (Settings → Spam Protection) — Sprout's approach may differ
- Set up email notifications if Sprout used different notification mechanics
- Test front-end submit and admin notification delivery
- Compare submission counts
- Update any Sprout-specific reporting or exports to Formie submissions index
Front-end cutover
Sprout templates often use:
{# Sprout — replace after migration #}
{{ craft.sproutForms.renderForm('handle') }}Formie equivalent:
{{ craft.formie.renderForm('handle') }}For headless sites, follow Building a headless contact form with Formie React.
Include Formie front-end assets — see Frontend Assets. Sprout's JS/CSS do not carry over.
Notifications
Migrated notifications become Formie email notifications. Verify:
- From / Reply-To — see deliverability guide
- Variable tokens — Formie uses field references, not Sprout's token syntax; re-pick fields in the notification editor
- Conditions — rebuild if Sprout used rule-based sending
When to keep Sprout temporarily
Run parallel if Sprout forms are embedded in hard-to-update legacy templates. Hide Sprout forms from navigation while Formie forms go live on new templates.
Uninstall Sprout Forms only after all active forms migrate and historical submissions are accessible in Formie (or exported).