Skip to main content
On this page

How to choose a headless CMS in 2026: a developer's buying guide

Industry POV 12 min read

TL;DR

Choose a headless CMS on published pricing, no per-seat fees, an API style your team will use, and low migration lock-in. Feature checklists won't tell you what it costs to run. Walk away from three red flags: "contact sales" for basics, metered overages, and tier cliffs.

Score every headless CMS against eight things: its pricing model, whether it charges per seat, what triggers an overage, whether media is bundled, whether locales are capped, its API style, how hard it is to leave, and whether an agent can drive it. Everything else (the demo, the logos, the "composable" language) is downstream of those eight. Get them right and the bill stops surprising you.

Most buying guides won't tell you this. The big ones (Agility's 50-point checklist, Kontent.ai's evaluation guide, Brightspot's "10 questions to ask") are thorough and vendor-neutral to a fault. They'll have you rate "scalability" and "developer experience" on a 1–5 scale and leave you with a spreadsheet that every CMS passes. This guide is narrower and more opinionated: it turns the four things developers get burned by (hidden pricing, per-seat tax, feature-gating, and lock-in) into concrete pass/fail criteria, with named, dated numbers from the field.

Written for the people who make the call: technical founders and engineering leads picking a CMS they'll live with for years.

What "headless" buys you (and when Git + markdown is enough)

A headless CMS stores and manages content and serves it over an API. It has no coupled frontend, and it's framework-agnostic: it hands you content over an API instead of HTML welded to one stack, so you render it with whatever framework you want (Astro, Next.js, SvelteKit, Nuxt), and you can serve the same content to a site, an app, and a kiosk at once. That's the win: frontend freedom and multi-channel delivery. The cost: you own the frontend build, and you're adding a paid dependency.

So don't reach for one too early. If your only content editors are developers, Git plus markdown files in the repo is enough: it's free, versioned, reviewable in a pull request, and it never sends you an invoice. Astro, Next.js, and SvelteKit all read local markdown natively.

You outgrow that setup at a specific moment: the second, non-technical contributor. When someone who doesn't write code needs to publish (a marketer, a client, a founder who's stopped touching the repo), asking them to open a pull request stops working. That's the trigger for a headless CMS, not traffic and not "scale." Add these and the case gets stronger: multiple locales, content reused across a site and an app, a publishing workflow with review states, or scheduled releases. Below that bar, a CMS is overkill and you're paying for a problem you don't have.

The 8 criteria that actually matter

Rate each one for every CMS on your shortlist. These are ordered by how often they blow up a budget, not by how they look in a feature grid.

1. Pricing model: published and flat, or metered?

The first question is whether you can even see the price. A published, flat per-tier price means you know your bill before you sign up and it doesn't move with usage. Metered pricing means the sticker is a floor, and the real number depends on API calls, bandwidth, or assets you can't predict.

This is the single biggest source of "the bill is nothing like the quote." Contentful's total cost of ownership has been documented at 40–68% above list once overages and add-ons land. Prefer a model you can forecast on a napkin.

2. Seats: do they charge per contributor?

Per-seat pricing is a tax on collaboration. You add an editor, the bill goes up, so teams share logins or ration access, which is the wrong incentive.

As of 2026, nearly every vendor in the category charges per seat somewhere, commonly $15–$29 per seat per month above a plan minimum: Sanity ($15/seat on Growth), Storyblok ($15/seat beyond minimums), Strapi (+$15/seat on Growth), and Cosmic (+$29/user/mo). Contentful reaches the same place by a different mechanism: no per-seat line item, but tiered caps (on content types and API calls) that force an upgrade as you grow (the sharpest is the Free→$300/mo Lite cliff). If you're an agency running many client sites, multiply the per-seat vendors by every client's contributor list. That number makes per-project cost impossible to quote. Look for unlimited contributors instead.

3. Overages: what gets metered?

Find the meters before they find you. Ask what's counted (API requests, bandwidth, stored assets, documents, or all of them) and what happens when you cross a line: do you get billed, throttled, or blocked?

The mechanics are unforgiving once you read them. Sanity charges direct API requests at 10× the rate of CDN requests, an easy trap if your build hammers the API. Contentful meters bandwidth and bills the overage, though it doesn't publish the per-GB rate. Storyblok's Growth plan meters traffic at $75 per 250GB. If a vendor can't give you a straight answer on its meters, that's the answer. (We break the mechanics down in detail in what triggers overage fees.)

4. Media: bundled CDN, or a second bill?

Every content site serves images, so a CMS that handles media poorly pushes you onto a second SaaS. Check whether image storage, optimization (resize, format conversion, WebP/AVIF), and global CDN delivery are included, or whether you're expected to bolt on Cloudinary or Imgix.

As of 2026, Contentful's built-in Images API is weak enough that teams routinely add Cloudinary, a second bill and a second integration. Strapi ships no media CDN by default; its Media Library writes to local disk, so you wire up Cloudinary, Imgix, or S3 yourself. Sanity and Storyblok host media but meter its bandwidth. A bundled media CDN removes an entire vendor from your stack.

5. Localization: included, or capped by tier?

If you're multilingual now or plausibly will be, check how locales are priced, because "supports multiple languages" often hides a cap or a surcharge.

As of 2026, Hygraph caps locales by tier: 2 free, 3 on the $199+/mo Growth plan, up to 80 on Enterprise. Cosmic sells localization as a $99/mo add-on, on top of a paid plan. When localization is metered or gated, going multilingual becomes a pricing event rather than a modeling decision. Look for localization included and locales uncapped.

6. API style: REST, GraphQL, or both?

Pick the API you want to write, and don't get locked into one you don't. GraphQL is great at avoiding over-fetching for deeply nested queries; REST is simpler to cache, debug, and reason about for most content sites. Neither is universally right.

What matters is optionality. Hygraph is GraphQL-only by design (it's in their own FAQ). If your team prefers REST, that's a paradigm you're forced into. A CMS that offers REST, or both, keeps the choice yours. (Full breakdown: REST vs GraphQL for a headless CMS.)

7. Migration and lock-in: how hard is it to leave?

You're choosing this CMS today, but you should evaluate how you'd get out. Two forms of lock-in matter: data (can you export your content and assets cleanly, or is it trapped behind a proprietary format?) and query language (a proprietary language like Sanity's GROQ means every query you write is rewrite work if you switch).

Ask for the export path in writing. Check whether content can be moved in and out over a standard API. The vendors that make leaving easy are usually the ones most confident you'll stay.

8. Agent and automation readiness

New in 2026, and the criterion most checklists still miss: can a script or an AI agent drive the CMS non-interactively? Content work is increasingly automated: bulk imports, scheduled publishing from CI, agents that draft and file content. That needs a real CLI or a clean write API, not a point-and-click admin UI.

"AI-powered" in a marketing headline usually means an in-editor writing assistant, which is not the same thing. What you want is programmatic control: an authenticated, scriptable interface an agent can use to read the schema and read/write content. Verify it with a five-minute test: try to create a piece of content from the command line.

The major CMSs side by side

The same mechanics, in one view. Every competitor cell traces to that vendor's pricing page and the linked comparison; re-verify before you quote. The category reprices often.

CMS Pricing model Per-seat Overages Bundled media Locale caps
Contentful Free → Lite $300/mo → Enterprise (contact sales); Free→$300 "cliff" No per-seat line; tier caps force upgrades Bandwidth / API / content-type caps metered or gated No, weak Images API, teams add Cloudinary Not published
Sanity Free → Growth $15/seat/mo → Enterprise $15/seat (Growth) Metered; direct API = 10× CDN; add-ons stack ($999/mo per extra dataset) Hosts media, meters bandwidth Not published
Storyblok Free → Growth $99 → Growth Plus $349 → Enterprise ($3,000+/mo) $15/seat beyond minimums Traffic $75 / 250GB Hosts media, meters bandwidth Extra locales $20/mo
Strapi License (Community free → Growth $45/mo → Enterprise) + Cloud hosting ($29 / $99 / $499/mo) +$15/seat (Growth) Storage / bandwidth on top of both tracks No, Media Library on local disk; add Cloudinary/Imgix/S3 Not published
Cosmic Free → Builder $49 → Team $299 → Business $499 → Enterprise +$29/user/mo Six metered dimensions (buckets, objects, API, media bw/storage, AI) Media metered Localization a $99/mo add-on
Hygraph Hobby free (overages blocked) → Growth $199–$299/mo → Enterprise Not published Metered on Growth; blocked on free tier Not published 2 free / 3 Growth / up to 80 Enterprise
Adapto Flat-rate, published across five tiers: Free Evaluation $0, Hobby $29, Startup $69, Scale $249, Professional $449/mo None; unlimited contributors, every tier None; approaching a limit triggers an email + 7-day grace period, not a charge Bundled; media CDN + optimization, every tier (media.adaptocms.com) Included / uncapped; field-level localization, unlimited translations, every tier

Competitor figures as of 2026, from each vendor's pricing page and the linked comparison. Adapto's tier-by-tier numbers are in the pricing breakdown below and on the live pricing page.

Red flags

Some patterns are reliable signals that the bill or the workflow will hurt later. None is automatically disqualifying, but each should cost points.

  • "Contact sales" for basic capability. SSO, more locales, a higher content-type cap, or governance locked behind an unpriced Enterprise tier means you can't see the price or self-serve. For a small team, that's friction dressed up as a feature.
  • Per-seat pricing. A recurring tax on adding teammates. It punishes the collaboration a CMS is supposed to enable.
  • Tier cliffs. A small usage bump that triggers a large jump. Contentful's is the classic: Free → $300/mo Lite, with nothing in between (the "$300 cliff"). Storyblok's is the $99 → $349 jump between Growth and Growth Plus. One image over the asset threshold can mean +250 EUR/mo (as of 2026).
  • Metered overages you can't predict. If a routine traffic spike or a chatty build can multiply your bill, you're budgeting against a variable, not a price.
  • Feature-gating basics. Localization, revision history, webhooks, or backups sold as paid add-ons. As of 2026, Cosmic prices each of those as a $99/mo add-on (or a $199 bundle), even on paid tiers.

A scoring checklist you can copy/paste

Drop this into your evaluation doc and fill one column per CMS. Score each row 2 (clear pass), 1 (partial), or 0 (fail). Anything scoring 0 on pricing model, overages, or lock-in deserves a second, hard look regardless of the total.

Headless CMS scoring sheet          | CMS A | CMS B | CMS C
------------------------------------|-------|-------|------
1. Pricing published + flat         |       |       |
2. No per-seat charges              |       |       |
3. No unpredictable overages        |       |       |
4. Media CDN + optimization bundled |       |       |
5. Localization included, uncapped  |       |       |
6. REST available (not GraphQL-only)|       |       |
7. Clean export / no query lock-in  |       |       |
8. CLI / agent-drivable API         |       |       |
------------------------------------|-------|-------|------
No "contact sales" for basics       |       |       |
No tier cliff on your growth path   |       |       |
------------------------------------|-------|-------|------
TOTAL (max 20)                      |       |       |

These ten rows matter more than the total they produce: they force the vendor to answer questions their pricing page is designed to soften.

How Adapto CMS scores against the criteria

Fair to put ourselves on the same sheet. That's the whole point of building it.

  • Pricing model. Flat, published pricing across five tiers: Free Evaluation ($0: 500 records, 5,000 API calls/mo, 2 GB bandwidth/mo, evaluation only, no credit card), Hobby ($29/mo), Startup ($69/mo, our most popular plan), Scale ($249/mo), and Professional ($449/mo). Every feature (webhooks, localization, custom roles, the media CDN) ships on every tier, the price is locked for the billing period, and there's no "contact sales" tier even past Professional.
  • Seats. Unlimited contributors, organizations, and projects on every tier, including Free Evaluation. Headcount is never a pricing lever.
  • Overages. None. There are no metered dimensions to bill against. If you approach a plan's limit, you get an email and a 7-day grace period to upgrade or trim usage. There's no silent overage billing and no unannounced throttle.
  • Media. A bundled media CDN with image optimization on every tier, served from media.adaptocms.com, so there's no separate Cloudinary or Imgix bill to manage.
  • Localization. Field-level localization included on every tier, with unlimited translations and no per-locale fee. (This site currently ships en-US; the i18n plumbing is built for more.)
  • API style. The public REST API is read-only by design; creating, updating, and deleting content goes through the adapto CLI, which is built for CI and AI-agent workflows rather than a point-and-click admin. That split is deliberate: open reads over REST, scripted and auditable writes through the CLI.
  • Migration and lock-in. Standard REST in, CLI-driven writes out, no proprietary query language to rewrite.
  • Agent readiness. A real adapto CLI built for non-interactive and AI-agent workflows: an authenticated interface an agent uses to read the schema and read/write content. This site's content is managed through that pipeline; see the adapto CLI for AI agents.

The honest framing: we designed Adapto around the failure modes above, so it scores well on a sheet we'd want to fill out ourselves. See Adapto's pricing for the current, published numbers. No call required. And run the same sheet against your other finalists; a criterion only matters if you check it on everyone.

FAQ

What should I ask before choosing a headless CMS?

Ask the eight questions above: Is the price published and flat, or metered? Do you charge per seat? What triggers an overage? Is media bundled or a separate bill? Are locales capped by tier? REST, GraphQL, or both? How do I export my content and leave? And can an agent or CI script drive it? Any "contact sales" answer for a basic capability is a red flag for a small team.

What's the difference between a headless CMS and a traditional CMS?

A traditional, monolithic CMS (classic WordPress is the archetype) couples content storage to a fixed frontend and theme. You get the whole stack, but you're tied to its rendering. A headless CMS stores content and serves it over an API with no coupled frontend, so you render it with any framework and deliver to any channel. Headless gives you frontend freedom and multi-channel reuse; the tradeoff is that you build and own the frontend.

Do I need to talk to sales for enterprise CMS pricing?

For basic capability, you shouldn't. Several vendors put SSO, personalization, governance, higher content-type caps, or more locales behind an unpriced Enterprise tier. That's fine for large-org procurement, but for a small team it means no visible price and no self-serve path. Self-serve CMSs publish every price and let you sign up without a call. If a feature you'd consider basic requires a sales conversation, count it against the CMS.