---
title: "Rebuild a Typeform"
description: "Turn a Typeform question flow into Fillo pages, stable field IDs, logic, completion, and delivery settings."
order: 22
type: "guide"
topic: "Migrations"
tags:
  - "Typeform"
  - "migration"
  - "pages"
  - "logic"
updated: "2026-07-15"
---

This is the implementation recipe for a Typeform you've already decided to move. Fillo doesn't read the Typeform URL or account, so start by writing down how the source form behaves.

For archive, effort, cutover, and rollback decisions, read [Migrate from Typeform](/docs/migrate/typeform).

## Write the map before the schema

For each Typeform question, record:

- its Typeform reference and visible label;
- the permanent Fillo field ID and option IDs;
- required state and validation;
- branches that read the answer;
- URL parameters, variables, or recalled values;
- file and integration dependencies;
- the ending reached from each path.

Export responses and files before changing the source. Keep that history outside Fillo.

## Translate screens into pages

One Typeform screen can map to one Fillo page, but it doesn't have to. Keep one question per page when the pacing helps; group short related questions when another screen adds nothing.

```ts
import { defineForm, when } from "@usefillo/core";

export const feedback = defineForm({
  id: "product-feedback",
  title: "Product feedback",
  pages: [
    {
      id: "score",
      blocks: [
        {
          id: "rating",
          kind: "linear_scale",
          label: "How likely are you to recommend us?",
          min: 0,
          max: 10,
          insightsMetric: "nps",
          required: true,
        },
      ],
      next: [
        { when: [when("rating").lt(7)], to: "follow-up" },
        { when: [when("rating").gt(6)], to: "end" },
      ],
    },
    {
      id: "follow-up",
      blocks: [
        {
          id: "improvement",
          kind: "long_text",
          label: "What should we improve?",
        },
      ],
    },
  ],
  settings: {
    showProgress: true,
    submitLabel: "Send feedback",
    successTitle: "Feedback received",
  },
});
```

Keep field and option IDs tied to what they store. Editing a label later shouldn't rename historical answers or break a branch.

## Translate behavior explicitly

| Typeform behavior | Fillo implementation |
| --- | --- |
| Branch to another question | Put related questions on pages and use page `next` rules |
| Show a question conditionally | Add `visibleIf` to the field schema |
| Recall an answer | Use answer piping in respondent-facing copy |
| Hidden field or URL parameter | Use a hidden field, URL prefill, or `initialData` |
| File question | Connect storage, then add `file_upload` |
| Several endings | Route to an application-owned result page or redesign around Fillo pages |
| Score, calculation, or payment | Calculate or collect it in a trusted external system |

Reconnect Sheets, Notion, Slack, Zapier, webhooks, email, and upload storage in Fillo. None of those settings come over from the Typeform.

## Test matching cases

Run the same cases through both forms and compare:

- page and branch sequence;
- stored values and option IDs;
- required and invalid input;
- prefilled and hidden values;
- completion route;
- file access;
- response and destination payloads;
- desktop, narrow, keyboard, error, and success states.

Replace one Typeform link or embed first, and keep its old URL ready until the Fillo response and every required destination hold up under real traffic.

## Try it

[Start with a prompt](/start?from=guide-rebuild-a-typeform) and your coding agent builds the first form, staged for your review — or [open the editor](/new).

## Related

- [Job application example](/examples#job-application): Inspect explicit pages and progress in the live renderer.
- [Typeform logic guide](https://help.typeform.com/hc/en-us/articles/36047433913364-Which-type-of-logic-should-I-use-and-where-can-I-find-it): Inventory source branching, calculations, and endings.
- [Typeform response export](https://help.typeform.com/hc/en-us/articles/360029253572-Export-your-responses): Preserve rows and files.
- [Code-defined forms](/docs/authoring): Review stable IDs and sync rules.
- [Logic](/docs/logic): Implement visibility and page routing.
