Ideas & OpinionCMSOpinionSelf-hostedSide Projects

Why I Stopped Using Headless CMS SaaS Platforms

The real case for self-hosting Payload over Contentful or Sanity for side projects — cost, control, and caveats.

March 31, 2026

why stopped headless cms saas

I used Contentful for three years. Before that, Sanity for a year. Both are genuinely good products. The teams are talented, the DX is polished, and the APIs are predictably well-designed. I stopped using them anyway, and I want to explain why — because the reasons are specific enough that they might not apply to you.

The Money Math Changed

When I started using headless CMS SaaS platforms, the cost was easy to justify. You got a database, a CDN, an asset pipeline, a well-designed admin UI, webhooks, versioning, and localization — all managed, all backed up, all available from day one. Building that yourself would take weeks. The $99/month felt like a bargain.

What changed: the scope of what I was building shrank. Side projects and solo developer blogs don't need localization, multi-environment workflows, or enterprise roles. They need to store posts and serve them. When 90% of what you're paying for is unused, $99/month is no longer a bargain — it's $99/month for peace of mind.

Self-hosting Payload CMS on Azure costs me about $15/month total: $8 for a Burstable B1ms Container App, $7 for a B1ms PostgreSQL Flexible Server. The media storage costs pennies. That's a meaningful difference when you're running multiple projects.

Control Over the Schema

SaaS CMS platforms have opinionated content models. Contentful has entries and assets. Sanity has documents and references. These models work well until they don't — and when they don't, you're stuck because the schema is partially managed by the platform.

With Payload, the schema is TypeScript in your repository. Want to add a viewCount field? One line. Want a tenant relationship that scopes all content? Define it, index it, done. Want a custom hook that fires whenever a post is published? Add it to the collection config.

The admin UI is generated from your schema, not the other way around. That means the admin panel looks exactly like your data model, rather than your data model being shaped to fit a generic UI.

Vendor Lock-In Isn't Theoretical

I have a project that started on Contentful. The export format is Contentful-specific JSON. Migrating to anything else means writing a custom import script and manually re-uploading every asset. It's a weekend project, not a blocker — but it's friction that wouldn't exist if the data lived in a PostgreSQL table I controlled.

With Payload, the data is in PostgreSQL. I own it. I can query it directly, export it with pg_dump, run migrations, or point a different application at the same database. The CMS is a layer on top of data I control, not the authoritative source of my data.

What I Gave Up

This isn't a free lunch. Self-hosting means I own the ops:

Backups. Azure Flexible Server does automatic backups, but I have to configure the retention policy and test restore procedures. With Contentful, backups were someone else's problem.

Uptime. If my Container App crashes at 3am, I'm the on-call. In practice this hasn't happened, but it's theoretically my responsibility.

New features. Contentful has built a native preview mode, live preview, workflows, and structured AI suggestions over the years. Payload is catching up but it's a smaller team. If you need those features now, the SaaS platforms have them.

Initial setup time. Getting Payload deployed to Azure the first time took a weekend. Contentful takes 30 minutes.

Who Should Still Use SaaS CMS

If you're building for a non-technical editor team that needs a polished, stable admin experience — use a SaaS CMS. The onboarding experience is better, the feature set is more complete, and the support is there.

If you have a client project where $99/month is easily justified by the time saved on infrastructure — use a SaaS CMS. Your time is worth more than the subscription.

If you're building something that genuinely needs localization, multi-region content, complex workflow approvals, or scheduled publishing with previews — use a SaaS CMS.

The Case for Self-Hosting Is Narrow but Real

For solo developers running personal projects where cost matters, schema control matters, and you're comfortable owning the deployment — self-hosting Payload beats a SaaS subscription. The tools have gotten good enough that the ops overhead is manageable, and the result is a system you understand completely because you built it.

That's a specific set of circumstances. It's the right choice for me. It might not be the right choice for you.