Is Notion Database a Good Fit for CMS?

I'm curious—can Notion's database be used effectively as a CMS for websites? 🤔


For example, managing content for an e-commerce site or a news/blog platform.


Has anyone tried this? I'd love to hear about your experience! What are the pros and cons of using Notion as the backend for a website?


Looking forward to your insights! 👀

Add a comment

Replies

Best
Lars Lehmann

In my opinion it is the worst backend/database you can choose. Even though data management would be a breeze, the API has two major weaknesses:


Cons:

  • it is incredibly slow. Latency is sometimes over 0.2-0.5s. If you need to load Data from different tables, your users will wait to long until the page is loaded. It’ll kill your Google reputation as well.

  • Notion doesn’t return rendered HTML or Markdown. If you would like to display a Notion page content on your website, you need to render every from scratch. The Notion format is very complex. And while there are Open Source Notion renderers on Github, none of the ones I tested are stable or feature complete enough. Ar least for my taste.

Pros:

  • if there are any, I am not aware of.


tl;dr:

  • it wont be a good decision.

  • to slow API

  • to much work to create a proper HTML renderer.

steve beyatte

@lars_lehmann wow the Notion API just sends you the Notion blocks and you have to parse it on your own? Seems like even using WordPress as a headless CMS would be better than that.

Lars Lehmann

@steveb Wordpress as backend/database is the much better decision.


In Notion, everything is a „block“, which is represented as extremely nested JSON. Each text style is a block with special properties. And you render it completely on your own which erases the ease of the database builder while developing.


And on top, the API is super slow, which forces you to build sone sort of a caching system.


It is just not meant for this usecase.

steve beyatte

@lars_lehmann thanks for this. It's too bad, I would have thought they'd want Notion to cover this use case.

@lars_lehmann Wow! thank you for sharing your detailed insights. This is quite surprising to me!
From what I know, many content creators write their articles in Notion’s database. So I’m curious—do they manually transfer the content to their landing pages, or do they integrate Notion’s database API directly? If the latency is really that bad, then using Notion’s database as a CMS does seem impractical.🤔

Lars Lehmann

@victoria_wu Most creators i know use shared Notion pages directly.


Also through services like Zapier or Make, you can synch data relatively easy. But if they didn’t develop a Notion-Block-Renderer which requires coding skills, they probaly don’t use the formatted Notion page contents and just database properties.

If you only would use database properties, then you just have to deal with the sluggishness of the API.


Apart from this, checkout tools like

super.so

or

simple.ink


They use the Notion API to render pages for you. But they are not for free.

Harry Tucker

@victoria_wu yes it can, kind of. There are some big limitations in terms of what you can display on your site, but it can be used depending on what you're trying to achieve and if you have some engineering knowledge.

Pros:
- Internal Notion API's are easy to setup and manage
- Saves paying for another tool if your content is already on Notion
- You can have as many database connections as you like
- You can pass the cover image as a url to display on your site

Cons:
- Only suitable for displaying the database properties and cover, not the actual page content
- The API can be slow, especially when passing cover images
- Need to setup filters to avoid draft content being made live
- Doesn't support sharing the 'Status' property out of the box

I'm just sharing the metadata from the databases with links to the Notion page, not duplicating the actual page content onto my site. There are currently no good options to do that.

Head to the Canvas:OS Marketplace to see an example. The data on the cards are served from Notion with links to the page.

@canvasos Thanks so much, Harry! Yes, that’s exactly what I meant!

For example, if some data is already stored in a Notion database and I want to display it more effectively through a website, it sounds like it’s possible, but the results might not be ideal, right?

I think a lot of users already have their data in Notion, and if this doesn’t work well, they would have to migrate their data elsewhere.

Harry Tucker

@victoria_wu Yeah that's why I went down the Notion path as well. All my content was already in Notion, so I didn't want to setup another tool as a CMS. So yes, it's possible with some caveats.
Overall I've found the results to be good for my use case (displaying metadata from pages in a Notion database), and has saved some cost and complexity.

The main downsides with this approach are the performance lag and the UX when linking directly to the Notion page. There are ways to improve performance like caching, lazy loading etc. Happy to dive deeper if you want some support.

Nicolas Zozol

There is an official plugin from Wordpress. My guess is that they saw it coming and wanted to create dissuasion for a startup to come in.

Nevertheless, one friend of mine in Toulouse created this open-source repo : Notion<->Markdown synchronisation:
https://github.com/Myastr0/mk-notes

You can now synchronize your CMS markdown with Notion. Unfortunately, Notion API has strong limitations on content upload.

@nicorama Thanks for sharing! The project looks great! Notion<->Markdown synchronization is definitely useful, especially for keeping CMS content in sync.👍

Ali Hesari

Hey Victoria,


As I understand, you plan to use Notion as a backend and integrate its API with your frontend. This can work, but it has limitations!


I haven’t personally used it as a full CMS backend, but I work a lot with Notion databases. The main issue is that Notion API is slow and has a rate limit of 3 requests per second! meaning if you send multiple requests per page, you might hit that limit quickly.


That said, it can work well for a lightweight blog if optimized properly:

1- Make static parts truly static – Keep menus, sidebars, and other UI elements static, fetching only the main content from Notion.

2- Cache content – Avoid redundant API calls by caching data on the frontend (localStorage, SWR,...).

3- Use backend caching, if using Next.js / Nuxt.js, cache Notion responses with Redis or a similar solution.


If we are optimistic, with 3 requests per second, you can theoretically support ~1.5 visitors per second, ~90 per minute, and ~129,600 per day, assuming each visitor triggers 2 API calls (one for a post, one for a list)

@alihesari Yes, you got it!! Thank you so much, Ali. But even with caching, the first load would still be quite slow. It seems like Notion might not be the best choice for this unless there's another way to solve the latency issue..

Ali Hesari

@victoria_wu As you Notion is not the best choice. I just mention all the possible ways and idea that maybe help you. Next.js framework has two different rendering strategies and methods. I am using these strategies to reduce the number of network requests and speeds up data access.

1- SSG method: Fetch content at build time instead of on every request which is best for blogs and static content (https://nextjs.org/docs/pages/building-your-application/rendering/static-site-generation)

2- ISR method: Instead of fetching on every request, fetch data only once every X minutes and keep the site fresh without slowing down performance. (https://nextjs.org/docs/pages/building-your-application/data-fetching/incremental-static-regeneration)

Also, another way is, you have not to fetch blogs data per request and you can fetch multiple records in a single API request and cached it somewhere or use it on build time.

Btw, there are plenty of ideas and approaches, but most of them require coding.

Ndamulelo Nemakhavhani

We are currently busy with a system that can do something like this, so first we write a blog and set the status to 'Ready to Publish', then we run a simple cron job using github actions to update the site running AstroJS. For now it's a nice simple systems that works very well for us.

@ndamulelonemakh Oh Really? How does this type of website perform? Have you encountered any of the latency issues mentioned in the comments above?

Prannay Kedia

Self-managing Notion as a Database is an impossible task because Notion's API, types etc are incredibly difficult to manage. But I completely get the attraction towards Notion as a CMS. I've been toying around Notion as a CMS for my personal website's blog for the last 3 years and recently decided to go all in.


The process was painful and to help make this more viable for others, I decided to create 2 solutions (shameless plug ahead):

  1. @prkedia81/notion-blogs - This is a Notion API wrapper that makes using Notion as CMS and connecting it to literally any front-end a breeze. This is open-source and you can just use this without worrying about the pros and cons others have mentioned for Notion's API. This is highly opinionated at the moment as this was built for the second product.

  2. NotoStack - This is a Notion to SEO-optimised No-Code Blog builder. I had to keep creating blogs for the multiple ($0 revenue 😝) indie products I kept dreaming up and decided to build this to help me with SEO. I promise you the fastest blog on Earth for your first and millionth user at just $9 per month. Feel free to try this out, if you'd prefer a no-code solution for blogs/ news with Notion as the backend.

I apologise for the sales pitch, but I'd love to help you set-up your Notion as a CMS for your use-case irrespective of if you use either of the above!

@prannay_kedia Thank you for sharing your insights and solutions! Wishing you success with both projects. 😊

Babak
I recommend Baserow.

use https://gitcms.blog instead of using Notion as CMS with your SSG site.

Alex Com

Great for simple CMS needs, but limited for scaling!