How to Migrate From Storyblok to a Self-Hosted CMS

Own your content and drop the subscription — the full path

August 2, 2026 · 6 min read
How to Migrate From Storyblok to a Self-Hosted CMS

Storyblok's visual editor is genuinely good — block-based editing that non-technical teams love. But the bill grows with usage, seats, and API traffic, and your content sits on Storyblok's servers behind a metered API. When the subscription math stops making sense, or you need your content on your own infrastructure, migrating off Storyblok is very doable. This guide walks the move to a self-hosted CMS without losing SEO, structure, or your mind.

TL;DR: Export Storyblok content via its Content Delivery API, map its component/block model to posts and pages, import into a self-hosted CMS like UnfoldCMS, set up 301 redirects if URLs change, and repoint your front end's API calls. Plan for the visual-editing tradeoff — self-hosted CMSes edit fields, not live page blocks.

Why teams migrate off Storyblok

Be clear on your reason — it shapes the migration:

  • Cost at scale. Storyblok pricing climbs with API requests, seats, and space usage. High-traffic or multi-site setups feel it.
  • Data ownership. Content lives on Storyblok. A self-hosted CMS puts it in your own database on your own server. See data ownership and your CMS.
  • No self-hosting. Storyblok is SaaS. If "on our infrastructure" is a requirement, you have to move.
  • Vendor risk. Pricing changes and plan sunsets are outside your control on any SaaS.

If Storyblok's visual editing is core to your team and the cost is acceptable, staying is fine. If ownership or cost is the driver, read on.

What you're moving to

This guide targets UnfoldCMS, a self-hosted CMS on Laravel with a REST API at /api/v1/*. It replaces Storyblok's hosted model with content in your own SQLite or MySQL database, a one-time cost instead of a subscription, and outgoing webhooks for rebuild triggers. The steps generalize to other self-hosted CMSes too.

Set expectations up front: Storyblok's headline feature is live visual, block-based editing. A field-based CMS like UnfoldCMS edits content in forms, not by clicking blocks on a rendered page. If visual editing is non-negotiable, weigh that before committing.

Step 1 — Export your Storyblok content

Storyblok exposes everything through its Content Delivery API. Pull all stories (its term for entries):

curl "https://api.storyblok.com/v2/cdn/stories?token=YOUR_TOKEN&per_page=100&page=1"

Page through until you have every story. Each returns its content as a JSON tree of components (blocks). Save the full export. Also grab your assets — Storyblok serves images from its CDN, so download the files you'll rehost.

Step 2 — Map the content model

This is the real work. Storyblok content is a nested tree of components; a CMS like UnfoldCMS has posts and pages with fields. Decide the mapping:

Storyblok UnfoldCMS
Story (article type) Post
Story (page type) Page (content_type=page)
Rich-text field Post body (converted to HTML)
Component blocks Flattened into body HTML, or mapped to fields
Asset (CDN image) Media library (featured-image)
Slug Slug (preserve for SEO)

The trickiest part is flattening block-based content into body HTML. Storyblok's rich-text field converts cleanly; custom component blocks need a small transform script that renders each block type to HTML.

Step 3 — Convert rich text to HTML

Storyblok's rich-text is a structured JSON format, not HTML. Convert it — Storyblok publishes a rich-text-to-HTML resolver, or use a small script. The goal is clean HTML your CMS stores directly. Verify headings, links, and images survive the conversion before bulk-importing.

Step 4 — Import into the CMS

With content mapped and rich text converted to HTML, import. UnfoldCMS stores body as HTML, so your converted content goes in directly. A migration script reads your Storyblok export, transforms each story, and creates a post or page — preserving the original slug so URLs stay stable.

Set each post's posted_at to the original publish date so your archive keeps its chronology, and attach downloaded images to the media library.

Step 5 — Preserve SEO with redirects

If your URL structure changes at all, set up 301 redirects from old paths to new ones. This is the single most important step for keeping rankings. UnfoldCMS has a built-in redirects system — map every old URL to its new home. See how to migrate a blog without losing SEO for the full checklist.

If you preserve slugs exactly (recommended), most URLs won't change and redirects are minimal — but audit every path to be sure.

Step 6 — Repoint your front end

Your front end currently calls Storyblok's API. Update it to call your new CMS's REST API. The response shapes differ, so you'll adjust the data mapping in your fetch layer — for example, reading data.data from UnfoldCMS's { success, message, data } envelope instead of Storyblok's stories array.

If you were using Storyblok's visual editor bridge for live preview, that goes away; set up a preview route against the new CMS instead.

Step 7 — Rebuild-on-publish

Storyblok webhooks triggered your rebuilds; keep that behavior. Register an outgoing webhook in UnfoldCMS pointed at your host's deploy hook. On publish, it fires an HMAC-signed POST and your site rebuilds — same flow, now on infrastructure you own.

Migration checklist

  • [ ] Export all stories via the Content Delivery API
  • [ ] Download all CDN assets
  • [ ] Map component/block model to posts and pages
  • [ ] Convert rich text and blocks to HTML
  • [ ] Import content, preserving slugs and publish dates
  • [ ] Attach images to the media library
  • [ ] Set up 301 redirects for any changed URLs
  • [ ] Repoint front-end API calls
  • [ ] Rebuild preview and webhook flows
  • [ ] Verify a sample of pages render correctly before DNS/go-live

FAQ

Can I export all my content from Storyblok? Yes. The Content Delivery API returns every story as JSON, and assets are downloadable from the CDN. You own an exportable copy of your content.

Will I lose SEO migrating off Storyblok? Not if you preserve slugs and set up 301 redirects for any URLs that change. Keeping the same URL structure is the key to holding rankings.

Do I lose visual editing? Yes, if you move to a field-based CMS like UnfoldCMS. Storyblok's block-based visual editor has no direct equivalent — you edit content in forms instead. Factor this into the decision.

How hard is the migration? The mechanical export and import are straightforward. The real effort is mapping Storyblok's nested block model to posts and pages and converting rich text to HTML — budget time for that transform.

Bottom line

Migrating off Storyblok is a clear path: export via the Content Delivery API, map the block model to posts and pages, convert rich text to HTML, import into a self-hosted CMS, and protect SEO with redirects. You gain data ownership and drop the subscription — but you give up Storyblok's visual editing, so make sure a field-based workflow suits your team before you commit.

See UnfoldCMS in the demo or read the full blog migration SEO guide.

Related: Migrate from Contentful · How to migrate a blog without losing SEO · Self-hosted vs SaaS CMS

Free & Open Source

Own your CMS. No subscriptions.

Unfold CMS is free to download and self-host. Built on Laravel + React, full source code included.

Share this post:

Discussion

Comments (0)

Leave a Comment

Please log in to leave a comment.

Don't have an account? Register here

No comments yet. Be the first to share your thoughts!

Keep Reading

Related Posts

Back to all posts