Skip to main content
Menu
On this page

Rebuild a Typeform

Turn a Typeform question flow into Fillo pages, stable field IDs, logic, completion, and delivery settings.

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.

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 behaviorFillo implementation
Branch to another questionPut related questions on pages and use page next rules
Show a question conditionallyAdd visibleIf to the field schema
Recall an answerUse answer piping in respondent-facing copy
Hidden field or URL parameterUse a hidden field, URL prefill, or initialData
File questionConnect storage, then add file_upload
Several endingsRoute to an application-owned result page or redesign around Fillo pages
Score, calculation, or paymentCalculate 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 and your coding agent builds the first form, staged for your review — or open the editor.

Updated

Was this page helpful?