Use your components, not an iframe.
Keep the form on your route and let your design system own every visible control.
app.acme.co/onboarding/check-inOnboarding check-in
Plan a Tally-to-Fillo rebuild with a field map, response archive, test pass, cutover, and rollback path.
Tally is quick for a link, popup, or iframe. Fillo is for the point where the form needs your components, signed-in context, and product behavior.
Keep the form on your route and let your design system own every visible control.
app.acme.co/onboarding/check-inOnboarding check-in
Stable field IDs carry from the rendered form through server checks, responses, and exports.
Attach the account and route without making the person repeat details you already know.
Connect your own storage and keep each file attached to the response that brought it in.
There's no Tally importer in Fillo, so a migration is a controlled rebuild: preserve the old responses, translate the form into a Fillo schema, reconnect each destination, and switch traffic only after the form and its downstream systems pass a test.
Move when the form needs native product markup, a code-owned schema, signed application identity, or customer-connected file storage. Keep Tally when its hosted experience already fits, or when the form depends on Tally payments, custom domains, or another feature you don't want to replace. Numeric calculations aren't on that list anymore — they rebuild as Fillo calculated fields.
Read Fillo vs Tally before you start.
| Source form | Migration size |
|---|---|
| Linear text and choice questions, one completion screen | Small: field mapping, publish, response test, and link replacement |
| Pages, logic, calculations, hidden values, uploads, or several destinations | Medium: rule-by-rule rebuild and a full branch and delivery test |
| Payments, custom code, non-numeric calculations, or automations coupled to Tally payloads | Large: product and backend changes before traffic can move |
Size describes the kind of work, not how long it takes. Review the live form and its consumers before estimating.
Give fields durable Fillo IDs based on what they store, not the current question label. Labels change; IDs key answers, logic, exports, and downstream code.
| Tally source | Fillo target | Check during migration |
|---|---|---|
| Short or long answer | short_text or long_text | Required state and length limits |
| Single or multiple choice | select, dropdown, or multi_select | Stable option IDs, Other behavior, and shuffled order |
| Page and conditional logic | Fillo pages, visibleIf, and page next rules | Every reachable path and early completion |
| Hidden field or prefilled value | hidden, URL prefill, or initialData | Parameter names and whether the value is trusted or editable |
| File upload | file_upload | File count, size, accepted types, and connected storage |
| Numeric calculation | calculated | Same inputs and rounding, and each rule or export that reads the result |
| Payment | Application or external service | Payment status, failure, and return route |
Use the field catalog, logic guide, and prefill guide for exact schema shapes.
Export the responses before editing or closing the Tally form. Store the export date, source form ID, timezone, field map, file-access notes, retention owner, and deletion policy beside the archive. Don't merge those rows into Fillo and label them as native responses.
Test the published Fillo form with cases that cover:
If an automation expects a Tally payload, update it to the documented Fillo event or add a server-side translation layer. Don't treat a successful form submit as proof that the destination worked.
Keep the old URL or embed snippet ready until the Fillo path is stable. If validation, uploads, or delivery fail, restore that entry point, repair the Fillo form, and repeat the test. Don't collect production responses in both systems longer than the rollback window — it splits the record of activity.
Updated