The form is part of your page.
Start with Fillo's accessible controls, restyle them, or replace a field with your own component.
app.acme.co/settings/feedbackProduct feedback
Plan a Typeform-to-Fillo rebuild with a response archive, question map, branch tests, cutover, and rollback path.
Typeform owns the form experience. With Fillo, your app owns the route, components, and flow. Fillo handles the rules, responses, and files behind it.
Start with Fillo's accessible controls, restyle them, or replace a field with your own component.
app.acme.co/settings/feedbackProduct feedback
See what someone sent, which account they came from, and what happened next.
Send uploads browser-direct to storage you connect and keep the file with the response.
The form, server checks, response view, and export use the same IDs and rules.
Fillo doesn't import a Typeform URL, schema, or response history. The move is a rebuild with four separate jobs: preserve the source data, translate the form, reconnect external systems, and move traffic with a rollback path.
Move when the form needs native application controls, code review, signed product identity, or customer-connected file storage. Keep Typeform when its conversational presentation, scoring, endings, payment flow, or existing integration is the reason the form works. Numeric calculations alone aren't a reason to stay — they rebuild as Fillo calculated fields.
Read Fillo vs Typeform before changing the live form.
| Source form | Migration size |
|---|---|
| Linear questions and one ending | Small: field and page rebuild, publish, response test, and embed replacement |
| Branching, calculations, hidden fields, uploads, or several integrations | Medium: reference mapping and calculated-field rebuilds plus branch, storage, and delivery tests |
| Scoring, payments, several endings, or payload-dependent automation | Large: product and backend changes before cutover |
Estimate from the source form, its Typeform logic map, and its downstream consumers — question count alone won't tell you.
Typeform question references and Fillo field IDs do the same downstream job: they identify stored answers even when the visible copy changes. Record the mapping before writing the new schema.
| Typeform source | Fillo target | Check during migration |
|---|---|---|
| Short text, long text, email, phone, number, date | Matching typed Fillo field | Required state, bounds, and value format |
| Multiple choice or dropdown | select, multi_select, or dropdown | Stable option IDs and single versus multiple selection |
| One-question screens | One field per Fillo page when the pacing still helps | Progress, keyboard flow, and mobile height |
| Branching and hidden fields | visibleIf, page next, hidden fields, and prefill | Every path, public parameter, and early exit |
| File upload | file_upload | Connected storage, accepted types, count, and size |
| Calculation over numeric answers | calculated | Same operands and rounding, and every rule or destination that reads the result |
| Scoring, payment, or several endings | Application or external service | Trusted result, failure path, and final route |
Fillo currently supports one success state or redirect. When a Typeform has several endings, route to an application page that can choose the next screen from trusted response state, or redesign the flow around explicit Fillo pages.
Use Typeform's response export and download the file-upload archive before the source form changes. Keep the form ID, export date, timezone, question-reference map, file notes, retention owner, and access policy with the archive. A linked spreadsheet is useful for reporting, but it's still Typeform history.
Run matching cases through Typeform and Fillo, then compare:
Confirm the accepted response in Fillo and the final state of each required destination. A success screen in the renderer doesn't prove that a later integration succeeded.
Keep the previous embed or URL ready until production traffic is stable. If the new form blocks a valid path or loses a required delivery, restore the old entry point, fix the issue, and repeat the comparison test.
Updated