Sanity vs Contentful vs Storyblok

Sanity vs Contentful vs Storyblok: pricing, free-tier language caps, editor preview, querying and export compared, plus the rule we use to decide.

Published: 11 min read
Sanity, Contentful und Storyblok als drei Karten nebeneinander, Sanity hervorgehoben

Sanity, Contentful and Storyblok are three dependable headless CMS platforms, meaning content databases without a frontend of their own, and for B2B websites built around marketing content we pick Sanity. The reason sits in the plans: 20 editors, 10,000 documents, 100 GB of assets and live preview come with the free tier, and languages are a modelling decision rather than a line on the invoice. Contentful and Storyblok are well built systems, they simply cut their plans differently. This article compares all three across ten criteria, shows the price and language limits, explains preview, querying and export, and ends with three decision rules.

Key takeaways

  • Sanity Free: $0, 20 editors, 10,000 documents, 100 GB assets, 100 GB bandwidth per month, Presentation Mode and Visual Editing included.
  • Contentful Free: 10 users, 2 languages, 10,000 entries. The next plan, Lite, starts at $300 per month.
  • Storyblok Starter: 1 seat, 2 languages, 20,000 entries. Growth starts at $99 per month with 5 seats and unlimited languages.
  • The third language, not a feature gap, is where the free tier ends at Contentful and Storyblok.
  • All three ship official MCP servers and APIs. The difference is code-level access to rendering, schema and sitemap logic.
  • A website on Astro or Next.js with Sanity Free runs on $0-20 of hosting per month, so almost no recurring platform fees.

The short answer

Sanity, Contentful and Storyblok store content in a structured way and serve it through an API, a programming interface, to a frontend you build yourself. For B2B websites in two to five languages built around marketing content, we pick Sanity. The free tier carries 20 editors, 10,000 documents, 100 GB of assets and 100 GB of bandwidth per month, Presentation Mode and Visual Editing are part of it, and Growth costs $15 per editor and month with 25,000 documents.

Contentful starts free with 10 users, 2 languages and 10,000 entries, and the next plan, Lite, starts at $300 per month. Storyblok starts free with one seat, 2 languages and 20,000 entries, and Growth starts at $99 per month with five seats and unlimited languages. Run your own numbers against those figures before you compare feature lists. The jump from $0 to $300 or to $99 settles more decisions in practice than any capability matrix.

We land on Sanity for three reasons you can verify: the plans are cut by editors and documents rather than by languages, editorial preview ships inside the product instead of inside the project budget, and the content model lives as code in the repository, so it moves through review and deployment like any other change. That does not make Contentful or Storyblok weaker. They fit different starting points, and those are further down.

Sanity, Contentful and Storyblok across ten criteria

The table below lines up the ten points that actually decided the question in our projects. Every figure here comes from the vendors' own pricing pages as of 13 September 2026. Check them again before you sign anything, plans change.

Sanity, Contentful and Storyblok across ten criteria

CriterionSanityContentfulStoryblok
Free tier$0, Presentation Mode and Visual Editing includedFree with 10 usersStarter, free
First paid planGrowth at $15 per editor and monthLite from $300 per monthGrowth from $99 per month
Editors on the free tier20 seats10 users1 seat
Documents or entries10,000 (Free), 25,000 (Growth)10,000 entries20,000 entries
Languages on the free tierhandled in the content model, no plan cap2 languages2 languages
Languages on paid planshandled in the content modelcheck per planunlimited from Growth
Editorial previewPresentation Mode, included on the free tierpreview available, scope depends on planpreview available, scope depends on plan
Content modellingschema as code in the repositoryin the web interface, scriptable via APIin the web interface, scriptable via API
Query languageGROQ, plus GraphQLREST and GraphQLREST and GraphQL
MCP server and APIofficial MCP server, APIofficial MCP server, APIofficial MCP server, API

Two rows in this table are knockout criteria, the rest is preference. The language row decides whether your free tier holds. The first-paid-plan row decides what growth costs you. How these systems are built in the first place is covered in our piece on headless CMS; this one is about choosing between three of them.

Pricing and limits: what the free tiers actually carry

A free tier is not a marketing promise, it is a capacity ceiling with a date on it. Sanity sets it at 10,000 documents and 20 editors, Contentful at 10,000 entries and 10 users, Storyblok at 20,000 entries and a single seat. A document here is any individual record: an article, a person, a location, a reusable section.

Put a realistic number against it. Our own website runs 49 knowledge articles, 10 service pages and 17 city pages out of one Sanity database, and LeanWave gets by with 64 documents and 86 image assets. Both sit far below 10,000. For a B2B marketing website the document ceiling is rarely the issue; the number of people allowed to edit content is. With Storyblok that stops at one seat.

Then there is frontend hosting. Vercel Pro costs $20 per month per developer seat including $20 of usage credit, with no per-project base fee; the Hobby tier is free but non-commercial only. Added up, a website on Astro or Next.js with Sanity Free runs on $0-20 of hosting per month, so almost no recurring platform fees. What such a project costs once, we break down in what a B2B website costs and in our overview of web development costs.

Was die kostenlosen Tarife tragen: Sanity mit deutlich mehr Plaetzen, Dokumenten und Sprachen als Contentful und Storyblok

Multilingual: where the invoices part ways

Two languages are free on all three. The third language is where it gets concrete: Contentful and Storyblok cap their free tiers at 2 languages, and Storyblok lifts that to unlimited from Growth at $99 per month. With Sanity, language is not a plan feature but a decision in the content model, and the plans count editors and documents. On our projects an extra language therefore carries no per-language surcharge.

The modelling is the real work, not the plan. You decide whether a language gets its own document or a field inside the same document, and that decision shapes every URL afterwards. On LeanWave, English sits at the root, German under /de, and the URL segments are translated: /solutions becomes /de/loesungen. On top of that comes reciprocal hreflang including x-default, the markup in the source that tells Google which language version belongs to which language and country, plus the fallback version for everyone else.

You want that chain of translated segments, hreflang and sitemap under code control, not inside an add-on. That is exactly why we treat localisation as an architecture question instead of a plan upgrade. How the pieces connect is covered in technical SEO.

Editorial preview: Presentation Mode in daily use

Preview decides whether editors use the system or work around it. Sanity ships Presentation Mode and Visual Editing on the free tier: editors see the real frontend next to the editor and jump from the page straight into the field they want to change. Contentful and Storyblok have preview solutions too. Clarify up front what scope your plan includes and who sets it up.

LeanWave runs Presentation Mode in daily use, and the website is built statically with Astro, meaning it is rendered into finished HTML files ahead of time. Every change in the CMS triggers a fresh build through a webhook, an automatic call from Sanity into the build system. For editors that means: save, wait briefly, see the result live. No approval chain, no developer in between.

Compare preview on a feature list and all three show a checkmark. Compare instead how many clicks sit between "change this text" and "see the result", and who has to build that path. Product details on the Studio, roles and datasets are in our article on Sanity CMS.

Presentation Mode: links die Live-Seite, rechts die Felder im Studio, ein Klick auf den Text oeffnet das passende Feld

Content model and querying: GROQ, GraphQL, REST

The content model is the list of document types and fields your website is made of. In Sanity it lives as code in the repository, so it is versioned, reviewed and shipped together with the frontend. In Contentful and Storyblok you model in the web interface, and both can additionally be scripted through their APIs. The practical difference: with Sanity a developer ships a model change and the matching frontend in one pull request, without anyone clicking through a backend in parallel.

For querying, Sanity brings GROQ, a query language for JSON documents that fetches exactly the fields a page needs in a single request, referenced documents included. Contentful and Storyblok work with REST and GraphQL, both well established routes to the same data. A team that already knows GraphQL gets going faster there; GROQ is quicker once pages get complex.

Choose by what your team can actually operate, not by what reads better. Both routes feed clean data into Astro or Next.js. The query language is rarely the reason a project fails.

AI agents, MCP servers and the real difference

A lot of nonsense gets sold here, so the facts first: Sanity, Contentful and Storyblok all have official MCP servers. MCP is a protocol that lets AI tools talk to a system and read, create and check content. Webflow and Wix offer it as well. "Only system X works with AI" is wrong, no matter who says it.

The difference sits one layer down. With a structured content database and your own frontend you drive the whole chain programmatically: content model, templates, rendering, structured data, sitemap, internal linking and deployment. An agent can create 40 location pages, set the matching internal links, generate FAQPage schema and trigger the build. In site builders access stops where templates are tied to collections and rate limits kick in. Our own website uses exactly that layer: llms.txt, IndexNow and FAQPage schema come from code, not from a plugin.

One warning we paid for: programmatic pages only work with real substance on each page. Where that substance is missing, Google classes them as doorway pages: pages that exist only because of a keyword. That is precisely what happened on our old website. How to build AI visibility properly is covered in generative engine optimization and by our GEO team.

Migration, export and hosting independence

All three systems are hosting independent: content lives with the vendor, the frontend lives wherever you put it, and switching hosts changes nothing about the CMS. That is the structural advantage over site builders, where design, content and delivery sit in one contract. The way out of any of the three runs through the API.

Moving content into Sanity looks like this:

1

Pull the content

Through the source system's API, or as a CSV per collection in the case of Webflow.

2

Map the fields

Every source field gets a target field in the Sanity schema, with references and assets handled separately.

3

Import as NDJSON

NDJSON is a format with one JSON record per line, and the import runs through `sanity dataset import`.

4

Redirects and checks

Every old URL gets a target, followed by a before-and-after ranking comparison.

The full process including the pre-crawl, the redirect map and monitoring is described in website relaunch without SEO losses; here just the key figures: a marketing website with 10-30 pages typically takes 3-6 weeks to go live, plus two weeks of monitoring. We bill a migration as a relaunch project, and our relaunch packages start at 8,000 EUR net. If you are coming from a site builder rather than a headless system, the routes from Webflow and Wix have articles of their own.

When Sanity, when Contentful, when Storyblok

The decision hangs on three things: how many people maintain content, how many languages are coming, and how much control you need over rendering and delivery. These are the rules we use in first conversations, and they hold in most cases.

Choose Sanity if

You are building a B2B website that runs content as a system and you want more than two languages without a per-language surcharge.

  • More than one person edits content and you want to start on the free tier: 20 editors, 10,000 documents.
  • Editors should see the page while they work on it: Presentation Mode is included, not bought in.
  • Rendering, schema, sitemap and internal linking belong in code, so AI agents can work on them cleanly too.

Choose Contentful if

Your company already runs processes, integrations or a team on Contentful, and switching would move the work around instead of removing it.

  • Several products and channels pull from the same content database, not just one website.
  • The budget carries the step up to Lite from $300 per month once 10 users and 2 languages stop being enough.
  • Your team works with REST and GraphQL anyway and does not want to introduce a second query language.

Choose Storyblok if

One person maintains the content, two languages are enough, and you want to start without cost and without a developer setup.

  • 20,000 entries on the free tier cover a large content base, as long as one seat is enough.
  • More languages come later: Growth lifts the cap to unlimited from $99 per month and adds 5 seats.
  • Your editors would rather work visually in blocks than in fields.

How we do it

Our standard for new B2B websites is Astro with Sanity. Astro renders statically, so it serves finished HTML files and loads no JavaScript by default for static content; only interactive parts, called islands, get scripts. We reach for Next.js when logins, application logic or server-generated data per request are involved. That is why our own website runs on Next.js with Sanity and Vercel.

LeanWave shows the standard case: static Astro, Sanity, Tailwind, Vercel, bilingual with translated URL segments and reciprocal hreflang including x-default, 64 documents, 86 image assets, Presentation Mode in daily use and a rebuild via webhook on every change. Its home page loads around 39 KB of JavaScript in three files, measured on 13 September 2026. One of our Webflow client sites loads around 740 KB in thirteen files at the same spot. That is not an argument against a CMS, it is an argument for controlling the frontend.

On in-sync.io, 49 knowledge articles, 10 service pages and 17 city pages come out of one Sanity database, bilingual with hreflang, plus server rendering, llms.txt, IndexNow and FAQPage schema. The honest part belongs here too: the previous Wix website earned almost nothing organically, and the current version has been live since June 2026 and is still building its rankings. If you want to take this route, our way of working is on web development, and for existing Webflow clients the Webflow team stays the contact.

Frequently asked questions

For B2B marketing websites we use Sanity. The free tier covers 20 editors, 10,000 documents and 100 GB of assets, Presentation Mode is included, and languages run through the content model rather than the plan. Contentful fits better when your company already works on it or several products draw from the same content database.

Sanity Free costs $0, Growth $15 per editor and month with 25,000 documents. Contentful starts free with 10 users, and the next plan, Lite, starts at $300 per month. Storyblok Starter is free with one seat, Growth starts at $99 per month with 5 seats. Hosting adds $0-20 on top.

Contentful and Storyblok cap their free tiers at 2 languages. Storyblok lifts that to unlimited from Growth at $99 per month. With Sanity, language is a modelling decision, and the plans count editors and documents. Plan the third language early, because it is the most common reason teams change plans.

Yes. Sanity, Contentful and Storyblok have official MCP servers and APIs that let AI tools read, create and check content. The difference sits outside the CMS: only with your own frontend do you also control rendering, structured data, sitemap and internal linking in code. Programmatic pages need real substance, or Google devalues them.

In four steps: pull content out of the source system through its API, map the fields onto the Sanity schema, import it as NDJSON with `sanity dataset import`, then set redirects and compare rankings. A marketing website with 10-30 pages typically takes 3-6 weeks to go live, with two weeks of monitoring after that.

For the build and the content model yes, for day-to-day operation no. After launch editors maintain content in the Studio with Presentation Mode, as on LeanWave with its 64 documents in daily use. Changes to document types, templates or rendering go through the repository, and therefore through development.

Next step

Send us your page count, your languages and the number of people who maintain content, and you get a reasoned recommendation for one of the three systems.

20-minute call, no sales pressure. You describe what you have in mind, we tell you if and how we can help.

Max Herzer

Max Herzer

Consultant & Business Development