Migrate from Contentful to Sanity
We move your Contentful spaces to Sanity, or to Payload if you want the CMS in your own codebase: every content type, entry, asset and locale moved by script. Keep your front end, or rebuild it in Astro or Next.js.
Yegparian PLLC (opens in a new tab)Signs you have outgrown Contentful
Contentful set the standard for headless content. These are the moments teams tell us it stopped fitting.
The next tier is a big jump
One more space, locale, environment or editor can push you onto the next plan, and the step between plans is rarely small.
The free plan changed under you
Contentful changed its Free plan limits in April 2025. Side projects and small sites that fit yesterday may not fit today.
The content model hits limits
Caps on content types, fields per type and environments shape the model around the plan instead of around your content.
The editor is hard to bend
Custom inputs, previews and workflows mean building and hosting App Framework apps. Small changes to the editing screen turn into projects.
You want the CMS in your stack
Schemas live in a web UI, not in Git. Teams that review everything else in pull requests want their content model reviewed the same way.
What happens to your Contentful setup
Pick what your space uses today. Each part maps to something built into Sanity or Payload, or turns out not to be needed.
- Content typesSanity schemas or Payload collectionsEvery content type and field is read through the Content Management API and rebuilt as a schema in code, versioned in Git.
- Rich Text fieldsPortable Text or LexicalContentful’s Rich Text JSON converts to Portable Text in Sanity or Lexical rich text in Payload, with embedded entries and assets kept as references.
- ReferencesReferences that keep their linksEvery link between entries is preserved by ID, so nothing has to be reconnected by hand after the import.
- AssetsSanity assets or Payload uploadsImages and files are downloaded and re-uploaded with their titles and alt text, served through an image CDN with on-the-fly transforms.
- LocalesBuilt-in localisationEach locale moves with its fallbacks, per field or per document, with its own URLs and hreflang on the site.
- EnvironmentsDatasets or branchesStaging and feature environments become Sanity datasets, or Payload databases that follow your Git branches.
- Roles and permissionsRoles in the CMSEditor roles are recreated in Sanity, or written as access control in code with Payload, so permissions are reviewed like any other change.
- Contentful appsCustom inputs in the editorMost marketplace and custom apps become a small Studio plugin or a custom field component in your own code.
- WebhooksWebhooks and revalidationPublish events still trigger cache purges, search indexing and notifications, now configured alongside the code.
- GraphQL / Delivery API queriesGROQ or the Payload APIFront-end queries are rewritten for the new CMS. If you keep your front end, that is most of the code that changes.
What changes when you leave Contentful
Sanity and Payload are where your team edits. Astro and Next.js decide how pages are built. We recommend a pair after the audit.
| Feature | Astro + Sanity | Next.js + Payload | Contentful |
|---|---|---|---|
| Ownership and cost | |||
| Content model defined in code, in Git | |||
| Self-hosted, open-source option | Open-source Studio | ||
| Editor seats | Plan-based | Unlimited, self-hosted | Plan-based |
| Locales and environments | Plan-based | Unlimited, self-hosted | Plan-based limits |
| Content | |||
| Structured rich text with embeds | |||
| Live preview while editing | |||
| Click-to-edit on the live preview | |||
| Fully customisable editing screen | Through apps | ||
| Platform | |||
| Enterprise governance and SLAs | Enterprise plan | Your own hosting | |
| Marketplace of ready-made apps | Plugin ecosystem | Plugin ecosystem | |
Sites we've already moved
Different stacks for different jobs: a law firm on Next.js and Payload, a residential launch and our own studio on Astro and Sanity.
Yegparian PLLC
WordPressNext.js + Payload
An Austin trial litigation firm. Practice areas, matters and insights are Payload collections, and every page is pre-rendered and served from the edge.
yegparianpllc.com (opens in a new tab)25 Cuba
WordPressAstro + Sanity
A new residential address in Canary Wharf. Apartments, amenities and galleries are edited in Sanity, and the site ships as static Astro pages.
25cuba.com (opens in a new tab)Celerart
WebflowAstro + Sanity
Our own studio site. Every one of the 164 old URLs was carried over or redirected, and all content is now edited in Sanity.
celerart.com (opens in a new tab)
How we move a Contentful site
Your Contentful space stays live until the new CMS is ready. Editors keep publishing until the final content sync.
Audit
Audit
We export your content model, count entries, assets, locales and environments, list every app and webhook, and crawl the live site, so nothing is lost by accident.
Content model
Content model
Content types become schemas in Sanity or Payload, cleaned up where the plan forced workarounds, and shaped around how your team actually edits.
Content import
Content import
Entries, assets and locales move by script through the Contentful APIs. Rich text is converted, references kept and images re-uploaded.
Front end
Front end
We rewrite the queries in your existing front end, or rebuild it in Astro or Next.js with the same design or a refresh if one is due.
Final sync and launch
Final sync and launch
A last import picks up anything published during the project. URLs, metadata and sitemaps are compared before the switch.
Handover
Handover
Your team gets a walkthrough of the new editor. Then the Contentful subscription can be cancelled.
Questions about leaving Contentful
Sanity suits teams that want a hosted content platform with real-time collaboration and click-to-edit preview. Payload suits teams that want the CMS inside their own Next.js app and database, self-hosted and open source. The audit recommends one.
By script, through Contentful’s APIs: every content type, entry, asset and locale. Sanity maintains an open-source Contentful exporter we use as a starting point, and we write the parts specific to your model.
Contentful’s Rich Text is already structured JSON, so it converts cleanly to Portable Text in Sanity or Lexical in Payload. Embedded entries and assets stay as references, and we check a sample of every content type by eye.
Yes. If your Next.js, Astro or Gatsby front end works, we rewrite its queries and preview for the new CMS and leave the rest alone. If it also needs work, we rebuild it in the same project.
Only briefly, if at all. Editors keep working in Contentful during the project, and a final sync picks up their changes before the switch.
Not if the move is planned. Every URL keeps its address or gets a permanent one-hop redirect, and titles, descriptions, Open Graph images and structured data are carried over and checked before launch.
It depends on the number of content types, entries, locales and integrations. After the audit you get a fixed scope and timeline, and the Contentful space stays live until launch day.


