MigrateToAstro

Moving a Webflow CMS to Sanity

The content leaves Webflow as flat records and has to arrive as a structured model. Most of the work is in three conversions, and the one people budget for is the one that costs least.

MigrateToAstro Migrations

Summarize with AI

What is in this

This is the content half of leaving Webflow. The front end half is a separate job, and what the Astro move looks like in code covers it. What follows is what happens to the CMS.

The export is not the interesting part

Collection items come out through the Data API, a page at a time, inside a rate limit of 60 a minute, or 120 on a CMS-capable plan. Source: Webflow Data API rate limits That part is a script and an afternoon.

What arrives is flat: every item is a bag of fields with the item's own id, and the structure you thought you had lives in reference fields that come back as ids rather than as objects. So the first real task is not moving data, it is deciding what the data is.

Rich text, which is the whole job

Webflow rich text is HTML. Sanity wants Portable Text, which is structured blocks with marks. There is no faithful automatic conversion, because the HTML does not record intent: a blockquote with a class on it might have been a pull quote, a callout or somebody styling a paragraph.

The approach that works: sample the real content first, list every pattern that actually appears, write a rule per pattern, and put anything unmatched into a report rather than into the database.

References, and the order things land in

A multi-reference is an array of ids, so the referenced documents have to exist before the documents that point at them. That makes the import a dependency graph rather than a loop, and it is why an import that is safe to run twice matters more than an import that runs fast.

Images inside rich text point at Webflow's CDN. They keep working right up until the site is unpublished, which is exactly when nobody is looking. Rehost them as part of the import and rewrite the references in the same pass, or the migration has a time bomb in it.

What this does not solve

Publishing. In Webflow an editor pressed a button. In Sanity somebody decides what a publish means, what it triggers, and how the site rebuilds, and that is a decision rather than a default.

If you are weighing this, send me the collection list and the item counts. The shape of the rich text decides the estimate more than the volume does.

Reach out and see if we are a good fit.

Start a project

Currently booking two to four weeks out.