How Sanity stacks up against contentful
This is our point of view on Contentful as builders in the CMS space for over a decade.
When you're suddenly out of content types and realize you need to delete something to add something new? When your editors are copy-pasting from Google Docs because the CMS is too painful? When you're running migration scripts at 2am because changing a field means touching every piece of content?
That's not how content operations should feel. That's what we hear building with Contentful feels like.
What developers who switched tell us
We've watched hundreds of teams migrate from Contentful to Sanity. Here's what they say made the difference: radically better flexibility and customization. Not the "configure it in our UI" kind, but the "shape it exactly how your team works" kind.
Here's what we think actually matters when you're choosing between us.
The thing about flexibility
Or: why Content Lake vs CMS matters
In our view: Contentful wasn't designed for true flexibility. They built a CMS in the browser with an opinionated API on top. At Sanity, we built a Content Lake, a database where your content is the source of truth, not our interface.
This fundamental difference shows everywhere. With Contentful, you're configuring their system through their UI. With Sanity, you're defining your content model in code, version-controlled alongside your application. With hot-module-reloading to instantly see how the editor experience turns out. Your content exists as structured data that you can shape, query, and transform however you need.
We see customers moving from Contentful because of this. It's hard to spot at first, but you slowly feel the walls closing in as your project matures. What seemed like helpful guardrails become permanent constraints.
The type ceiling you'll hit
Here's what a developer working on a major Contentful enterprise account recently told us: they're stuck at 149 out of 150 content types. Dead in the water. Can't add the second report type their client needs without deleting something else. Or go into contract negations.
This isn't edge-case stuff. Contentful forces everything to be references: no inline objects in documents. Every reusable button? That's a content type. Every SEO block? Another type. That single document list in Contentful becomes a junkyard of loose content pieces, differentiated by emojis because that's all you've got.
With Sanity, you decide what should be reusable references and what should be inline. You can tailor document lists to be exactly what you need.
Your content model, your rules.
Migration impossibility
Changing your mind seem to cost extra with Contentful. Need to restructure content? It's hard to do schema change management. You soft-deprecate by hiding fields because deletion is destructive. Their "solution" for evolving content models is making you accumulate cruft until your schema looks like archaeological layers.
It's like they are not incentivized to let you get rid of content types.
With Sanity? Update multiple documents in a single transaction. Use createOrReplace and patch for smart upsert. Provide determinstic IDs for predictable migrations. Our transaction API means you can refactor confidently: no hoping that API call #3 doesn't fail after #1 and #2 succeeded. Our schema migration tooling gives you just-enough-abstraction to scaffold, write, validate, and run schema and content migrations efficiently.
When preview becomes a puzzle
Let's talk about that "superior editorial experience" Contentful claims.
Want live preview? Digging into their docs, you'll discover that it entails adding 5-10 lines of boilerplate to every single component. Want to change a button? Better remember that button might be referenced on 17 other pages: hope you meant to change them all. Need to preview changes? Publish the referenced documents first (separately), then refresh the preview. We think all of that should just work, including previewing draft versions of your references.
What might look nice and clean in that demo or in the start, quickly becomes messy. And content creators risk subtly breaking stuff unless engineering has spent a lot of time adding all the safe guards.
One agency showed us their workflow: editors work in Google Docs, developers copy-paste into Contentful. That's not a content management system, that's expensive manual labor and wasted engineering time.
Meanwhile, with Sanity you can start writing free-form content with AI assistance in Canvas, and then automatically map it directly to your fields in the Studio. You can give different teams completely different Studios and specialized content ops apps. Your merchandisers get their e-commerce interface. Editors see authors and posts. Not just permissions, completely tailored interfaces that make sense for each team's actual job.
And all working on the same single-source-of-truth content.
The AI development gap
While Contentful makes you click through their UI to add fields one by one, our developers are building entire content models in minutes. They screenshot a Figma design, describe what they want to an AI agent, and get working schemas.
Contentful offer Agent Actions through a simple GUI dashboard (you can trigger it via an API call). And… that's it.
Developers using Sanity can deploy Functions with Agent Actions and their own business logic that automatically triggers on any content change made by humans/agents and does the work automatically: with full attribution and transparency. And without causing race conditions.
Here's the kicker: Sanity Functions use GROQ patterns for surgical precision. Trigger only when the body changes AND contains "sale" AND price < 10. Try setting that up in Contentful's webhook panel.
The agent even understands your schema.
Using AI development tools with Sanity means actually developing with AI. With Contentful, it means asking AI where to click next.
True composability vs. "headless"
While Contentful talks about being "composable," they're still surprisingly opinionated about how you structure and access your content. True composability means you can swap out any part of your stack: including how your content is modeled, stored, and delivered. It's what they call interoperability.
Contentful's reference-only architecture makes this surprisingly rigid. You can't refactor your content model without touching every piece of content. You can't optimize queries without their specific GraphQL limitations. You can't build the editorial UI your team actually needs. You can't easily update content programmatically either.
Sanity gives you the same powerful mutation APIs that our editing environment uses for real-time updates. It's pretty wild: You can actually point to a specific nested property in a JSON document and conditionally patch it in a transaction. If you don't understand what that means, hopefully it sounds cool that you can (but it's also pretty useful!)
Real-time by default
The difference between a CDN and a Live Content API
Contentful gives you a standard CDN. Sanity give you a Live Content API where the CDN automatically updates only what changes, and your front-end can subscribe to updates.
No refresh needed—disable that "Add to cart" button the instant inventory hits zero. Show breaking news as it happens. Update prices across all channels simultaneously. This isn't a feature you configure. It's just how Sanity's content API works.
What 300 Contentful customers said
A December 2024 study surveyed 300 actual Contentful users. The highlights:
- 45% reported sluggish performance during normal usage
- 40% struggled with basic navigation and setup
- 35% needed more customization but hit platform limits
- 30% worried about scaling costs
- 25% found collaboration tools inadequate for real projects
These aren't competitors talking. These are their customers. And these are only the ones who realize that you can have higher expectations to your CMS.
When Contentful might work for you
Let's be honest. Contentful can be fine if:
- Your content model is simple and unlikely to evolve
- You have a small team with clearly defined roles
- You prefer GUI-based CMS configuration over code
- You're building a straightforward marketing site with standard requirements (and no ambitions to expand it)
If that's you, Contentful might genuinely be enough. We built Sanity for everyone else.
Things you can actually do in Sanity
(that you can't neatly do with Contentful)
✓ Define your entire content model in code
✓ Have unlimited content types (not 150) and locales
✓ Use inline objects, even in rich text
✓ Build custom editorial interfaces that match your workflow
✓ Create multiple Studios for different teams
✓ See all your content as actual JSON in the dashboard
✓ Generate schemas with AI in your favorite IDE
✓ Actually migrate content without risking overwriting data
✓ Version control your content model alongside your code
✓ Give editors a UI that makes sense for their actual job
✓ Query your content with a language built for content (not generic data)
✓ Copy and paste entire field values (complex objects, not just text)
✓ Build purpose-specific content apps beyond just the Studio
✓ Subscribe to real-time content updates without polling
The technical reality
For the developers who want specifics:
Content modeling: Contentful locks you into their UI with hard type limits. Sanity has no artificial limits on content types: you'll hit their limit way before you hit our technical constraints.
Field types: Contentful forces everything to be references. Sanity supports both inline objects and references. Use what makes sense.
Validation: Contentful gives you a subset of regex. Sanity gives you full JavaScript validation. Write the rules you actually need and that helps your content team.
Query language: Contentful offers generic REST/GraphQL. Sanity built GROQ specifically for content: query content as data.
Real-time collaboration: Contentful's is slow and prone to race conditions. Sanity is fast and shows you who's working where. Even agents.
Migration: Contentful requires custom API scripts and prone to accidental content deletion. Sanity supports declarative migrations that actually work.
Customization: Contentful limits you to UI extensions. Sanity lets you build full React components: your UI, your way. With fast local developer experience.
AI development: Contentful's AI stops at their UI. Sanity supports full code generation. Let AI build your entire content model, even custom content operations apps.
Already invested in Contentful?
We get it. Migration feels daunting. You've got content, you've got workflows, you've got a team that finally knows where to click.
Here's what teams who've made the switch tell us: the migration itself took weeks, but they got months of development time back in the first year. No more wrestling with reference puzzles. No more content type Tetris. No more "sorry, that customization isn't possible."
We've built migration tools specifically for Contentful. Your content comes over structured and clean. Your team gets trained on a system that actually makes sense. Our solution and support engineers have done this migration many times before.
Why this matters now
Every workaround you build in Contentful becomes technical debt. Every content type you carefully ration delays your next feature. Every reference-publishing puzzle your editors solve is time not spent on actual content.
The architectural decisions Contentful made years ago, Everything as references, UI-based configuration, rigid type limits: these aren't bugs. They're features of a business model that profits from deliberate constraints.
The bottom line
We built Sanity because we were tired of content systems that made easy things hard and hard things impossible. Where Contentful gives you forms to fill out, we give you code to shape. Where they count your content types, we let you model freely. Where they lock you into their UI, we let you build your own.
This isn't about features. It's about fundamentally different philosophies. Contentful believes they know how you should work. We believe you know better than anyone.
What's next?
Just evaluating?
Start with our free tier and 30 day Growth trial →
Build something real with most of the features, and see how different it feels when your content system works with you, not against you.
Stuck on Contentful?
Talk to our sales team →
We've helped enough teams make the move to know exactly what works, what doesn't, and how to preserve your content while upgrading your capabilities.
P.S. If you're reading this while waiting for Contentful's preview to refresh, or trying to figure out which of your 147 content types you can sacrifice to add a new feature... yeah, we built Sanity for you.


