Migrate from Webflow

Move a Webflow site to Modulify with its pages, styles, CMS collections and items, products, languages, forms and redirects, and what to check afterwards.

On this page

A migration from Webflow copies your published Webflow site and its CMS into a new Modulify site. It uses the Webflow import, which Import from Webflow describes step by step.

Before you start

  • Publish the latest version of your site in Webflow. Only published pages and published CMS items are read.
  • Choose how to connect: a Webflow app, which the dialog marks Recommended, or a site token. Only an admin of your Webflow workspace can create the app or see its client secret.
  • Make sure you own the site, or have permission to rebuild it. The import dialog asks you to confirm this.
  • Webflow shares redirects only with Enterprise workspaces, so the redirects of other sites stay in Webflow.
  • Keep your Webflow site published until the new site is live on your domain.

How the migration works

The import dialog reads the published site at the address you enter, then checks your app connection or token against that site before the site is created.

When you start the import, Modulify creates a new site and runs the import in the background. The site's chat shows each step as it runs: Reading the site, Copying images, Saving the data for the AI, Building pages and Saving pages, with a count while a step reads pages, copies images and files, or saves records.

The import reads the site, its pages, its CMS collections and items in each language, its products and orders, its redirects, and its forms and their submissions through the Webflow API. It reads the pages themselves from your published site, along with its sitemap and robots.txt file. The page of each CMS item and product is found through the sitemap, and when the site has no sitemap or the sitemap leaves an item out, through the links on your pages and the address of its collection.

Each published page becomes an editable page at the same address, including the page of each published CMS item and product. The stylesheets Webflow publishes are kept as they are, so your classes and design variables come across as written, and the page scripts come across with each page, so Webflow interactions carry over. Images and files are copied to Modulify storage.

Everything is then saved in the new site at once: the pages as editable code, the CMS items, the products, the orders and the form submissions as records in the site database, and the files in Modulify storage. Notes for the chat are saved with the pages in .modulify/import/README.md, listing what came across and what did not. The connection stays encrypted with the site. As soon as the import finishes, the AI builds the tables from those records and connects the pages that show them, as How migrations work describes.

Run the migration

Open the Webflow import

On Home, click + on the prompt, then choose From Webflow under Import.

Enter the site address

Enter the address your site is published at in Site address, such as yoursite.webflow.io or your own domain.

Connect your site

Under Connect a Webflow app, create a Data Client app in your Webflow workspace settings under Apps & Integrations, with the scopes and the redirect URI the dialog lists. Paste its Client ID and Client secret, select Connect, then Authorize in Webflow. The dialog shows Webflow is connected. To use a site token instead, choose Use a site token and paste a token you generate in the site's settings.

Confirm

Tick I own this site, or I have permission to rebuild it. and select Confirm. The prompt shows the site as a card with a picture of it and what the import found.

Start the import

Select Import site on the pill. Modulify creates the site and starts the import.

Read the warnings

When the import finishes, the site lists any warnings. Each one says what was left out and why.

What comes across

In Webflow In Modulify
Static pages Editable pages at the same addresses, with their titles, descriptions, favicon and social share images
CMS collections Their published items, which the AI builds into tables right after the import
Reference and multi-reference fields References between the tables the AI builds
CMS item pages A page for each published item, at the same address
Products The products with their SKUs and each SKU's stock, and a page for each published product
Orders One record for each order, with everything Webflow returns for it
Styles, classes and variables The stylesheets Webflow publishes, kept as written
Interactions and page scripts The same scripts on each page
Custom attributes, such as Memberstack's data-ms-* attributes Kept on each element, including names with a colon
Images and files Copies in Modulify storage
Locales The same language addresses, such as /fr, the site's language list and the translated CMS text
Forms Forms that save each submission in the site database before emailing it to you
Form submissions The submissions Webflow holds, which the AI loads into the same table as new submissions
301 redirects on an Enterprise workspace Redirects on the site
Sitemap and robots.txt A sitemap at /sitemap.xml and the robots.txt of the published site
Legal pages Ordinary pages with their published text

How the data is stored

The import does not create tables. It saves every record it reads in the hidden _import_rows table of your site's database, one row per record: the collection or kind of record in dataset, the Webflow id in id, the slug in slug, and the fields in data, a JSON object. Site databases explains the database itself.

  • CMS items keep their fields as Webflow returns them, with their creation, update and publish times in _created, _updated and _published. An option field keeps the name of the chosen option.
  • A reference field holds the Webflow id of the item it names, and a multi-reference field holds a list of ids.
  • The translated text of plain text and rich text fields is under _translations, keyed by language code and then by field.
  • Products keep the product's fields and its SKUs, and each SKU keeps its stock: whether it is tracked and how many are left. Products, SKUs and categories each come across once, from the store's own collections, so they keep their links to each other and their translations.
  • Orders keep everything Webflow returns for each order, such as the status, the totals, the customer, the addresses, the items bought and the payment details.
  • Form submissions are the form_submissions dataset. Each one keeps its Webflow id in id, with the fields the imported forms save: the form name, the fields the visitor sent as data and the time it was sent as created_at.

As soon as the import finishes, the AI builds tables from these records and fills them, usually one for each collection or kind of record, with references between the tables and a column for each language. It picks the names of the tables and columns itself, and you can browse and edit the tables in the CMS, where _import_rows stays hidden. It loads the form submissions into the form_submissions table that the imported forms save to. Orders and form submissions hold personal data, so it builds their tables from the list of their fields without reading them.

The page of a CMS item or product starts as a copy of the published page. The AI connects the copied pages to their tables when it takes over, and until a page reads its table, a later change to the item does not change the page.

Images and files in the CMS, rich text, products and stylesheets are copied to Modulify storage, and the site and the saved records point at the copies. A file that could not be copied keeps its Webflow address. The import says how many there are and lists them in its notes, and the AI copies them when it takes over.

What does not come across

  • Draft and archived pages. Draft and archived CMS items come across marked as drafts or archived, without pages of their own, and the import says how many each collection has.
  • Checkout and payments. The buy buttons on product pages do not take payments.
  • Redirects, when your workspace is not on Enterprise.
  • Canonical and language link tags, which point at the Webflow address.
  • Webflow's confirmation emails to visitors, and spam protection for forms.
  • Components as one shared piece. A component comes across as part of each page that uses it.
  • A site that is password protected in Webflow. Its pages cannot be read, so turn the password off in Webflow before you migrate it.

Interactions come across with their scripts, but they have not been tested on every site, so check them on the imported site.

After the migration

When the migration finishes, the AI takes over on its own. It reads the notes, builds the tables from the saved records, connects the pages that show them, such as a blog list or the copied CMS item pages, to those tables while keeping them looking the same, and checks the pages. Then it answers with the pages, the tables it built with their row counts, the languages, the warnings and what still needs work. If you were already chatting, it gets the notes with your next message instead. From then on the chat builds on the imported site and never starts it over, and when it needs more than the notes it reads your Webflow site directly through the migration's connection.

  • Open the preview and click through the pages, on a computer and on a phone, and try the interactions.
  • Check the tables the AI built in the CMS, and the item and product pages.
  • Ask the chat to build what did not come across, such as a checkout or spam protection for forms.
  • Publish the site, then connect your domain and point it at Modulify.
  • Keep the Webflow app or the token while you want the chat to read your Webflow site. Once you delete it, the chat works from what was imported.

Troubleshooting

The dialog says "That does not look like a Webflow site."

The address does not open a published Webflow site. Use the address the site is published at, such as yoursite.webflow.io or your own domain, and publish the site in Webflow if you have not yet.

The dialog says "That token was rejected."

Webflow did not accept the token. Check that you copied it in full, or generate a new token and paste that.

The dialog says "That token works but does not have permission to read this site."

The token is missing scopes. Generate a new token with every scope the dialog lists.

The dialog says "That token is valid but belongs to a different site."

Generate the token in the settings of the site you are importing.

The dialog says "We could not identify this Webflow site, so the token cannot be checked."

The page at that address does not say which Webflow site it is. Enter the address of the published site itself.

The dialog shows "Could not connect Webflow"

Nothing was connected. Check the Client ID and Client secret, and that the app has the redirect URI from the dialog, then select Connect again.

The dialog shows "Connection expired"

The app connection lasts a short time. Select Start again to get a new connection.

The import failed with "Publish the site in Webflow before importing it"

Only published pages can be read. Publish the site in Webflow, then import it again.

The import failed with "Webflow returned no published pages, so nothing was imported."

Webflow listed no published pages for the site, or none of them could be read. Publish the pages you want to bring across, and if the site is password protected in Webflow, turn the password off. Then import the site again.

A warning says redirects need an Enterprise workspace

Webflow shares redirects only with Enterprise workspaces. Add the redirects you need on the new site, or ask the chat to add them.

A warning says "The pages of the CMS collection" could not be found

The import looked for the collection's item pages in the sitemap, in the links on your pages and at the collection's address, and none of them opened. Check that the collection's template page is published in Webflow and that an item page opens on your site, then import the site again.

A warning says the robots.txt file blocks every search engine

The robots.txt file at the address the import read blocks every search engine, as a staging address can, so it was not copied. Check the robots.txt file your site should have.

A warning says "The imported data could not be saved in the site database"

The records could not be saved for the AI. It reads the CMS items and products again from your Webflow site through the import's connection to build their tables, so keep the Webflow app or the token until the tables are built. Orders and form submissions cannot be read that way, so import the site again from Home to bring them across.