Migrate from Contentful
Move a Contentful space to Flow CMS — map content types and locales, export over the CMA, and swap the delivery layer.
Contentful and Flow CMS share the same worldview — structured types, references and API-first delivery — so this migration is mostly mechanical. What changes is where it runs (your infrastructure), the pricing model, and having SEO + AI built into the editor instead of arriving via marketplace apps.
The shape of the migration
- Recreate the model (types map almost 1:1).
- Export content and assets with Contentful's tooling.
- Import assets, then entries, resolving references.
- Swap the delivery layer in your front-end.
1. Map the model
| Contentful | Flow CMS | Notes |
|---|---|---|
| Content type | Collection / Single | Same concept |
| Reference field | Reference | Expand on read replaces include |
| Asset | Media | WebP optimization on upload |
| Rich text | Block editor rich text | Embedded entries become components |
| Locales | Localized fields | Migrate the default locale first |
| Environments | Draft → published workflow | Drafts + preview tokens cover the common case |
2. Export the space
Contentful's CLI exports everything as one JSON file (entries, assets, the model), or read the Delivery/Management APIs directly if you want to transform as you go.
3. Import into Flow CMS
- Assets first: download from the exported asset URLs, upload, keep an old-id → new-id map.
- Entries next: walk the export, mapping fields; convert rich text documents to the block editor format; resolve reference fields through the id map (import parents after children, or import all then patch references).
- Publish as a second pass so a half-imported state is never live.
Do the default locale end-to-end first. Additional locales import cleanly once the reference graph exists.
4. Swap the delivery layer
Where the front-end called Contentful's delivery API, point it at REST or GraphQL with a read-only CONTENT token (Settings → API Tokens):
include=Nbecomes explicitexpandof the references you need.- Preview API → preview tokens for drafts.
- Webhook-triggered rebuilds → the same pattern with Flow CMS webhooks, or on-demand revalidation instead of full rebuilds.
The @flowcms/client SDK is the tidiest endpoint: typed
queries, token handling, pagination.
Budget-wise the shift is structural: Contentful bills per seat/record/locale on their infrastructure; self-hosted Flow CMS costs whatever your Postgres box costs, with editions unlocking governance features. The compare page has the detailed breakdown.