Ben Grant, writing as Benji, published this on 1 January 2025. He had used Notion since 2018. The push was Notion’s shift toward workplace features. A single-user knowledge base started to feel bloated.
The Notion → Obsidian playbook covers export, attachments, and what a database becomes. Ben’s post is what the Importer actually left on disk, and the months he spent after that.
Why Obsidian
Two reasons made the choice. Notes are Markdown files, so a dead app does not take the archive with it. Community plugins are code he can change. He is a JavaScript developer, and he says he already has.
What the import looked like
He used the Importer plugin. It did the heavy lifting. When it finished he had thousands of Markdown files in the same structure as the Notion workspace, and thousands more images, all in the vault root. Notion never gave an image a folder. Images were embeds. Obsidian needed a path.
Folders were the other shock. In Notion a folder can also be a page. Obsidian folders are just folders.
Databases were the third. He had gone deep on them. Obsidian had no matching feature yet. The Kanban plugin covers boards, and he says it is well done, and he still had not rebuilt every workflow.
Cleanup took a couple of months. He archived old notes, moved images into a structure he could keep, and deleted hundreds of images that came from the Notion web clipper. Workflows moved to folders, tags, or Kanban boards that track tasks.
The recipe database, and the blog
Recipes were the piece he rebuilt on purpose. Dataview, the Meta Bind plugin, and a custom stylesheet produce a filterable grid. Meal tags and sorts (difficulty, time, name, last updated) are properties on the note. The query skips the index page named Recipes, takes the first embedded image, and sums any property whose name ends in “ time“. The full DataviewJS and CSS are in his post. The old Notion link for those recipes is unmaintained. He planned a public site and had not shipped it in this write-up.
The blog used to be a Notion database. A React app pulled page content and rendered it. He had written that up in an earlier post. After the move, the site reads Markdown and images from a public S3 bucket and renders them with Next.js. Cache revalidation is one hour.
He uses Obsidian’s official sync so the vault is not a custom system. Remotely Save copies only the blog files to that S3 bucket. Edit on any device, and the site catches up within the hour. Website images, including project pictures and friends’ favicons, live in the vault and ride the same sync.
What I would copy
Expect the Importer to preserve the Notion tree and to dump attachments in one place. Budget the months for moving images. Ben’s clock was a couple of months, and a lot of that was web-clipper junk he deleted.
Decide, per database, whether it becomes a folder, a tag, a Kanban board, or a Dataview page. He did not find one Obsidian feature that replaced Notion databases.
If a site reads the vault, sync the public files to their own bucket. His split is official Sync for the vault and Remotely Save for the blog, with a one-hour revalidation so a note edit is not an instant deploy.