How to add text recognition (OCR) to Notion

Capturing notes

Remember when you had a great brainstorm on a whiteboard with your colleagues and took a picture ‘that you would process later’? Or that you took a picture of the letter from the municipality so it wouldn’t get lost between the piles of other papers? Only to end up trying to find it between all your family pictures, GIFs or WhatsApp stickers from friends? Well, I’ve got something for you…

Notion is, as for many others, the main part of my Second Brain setup. Since my Second Brain is based on the Capture, Organize, Distill, Express (C.O.D.E.) concept of Tiago Forte, it is important to me that I can easily capture any interesting piece of content that I come across in my day-to-day life.

For digital content, this can easily be done through the Save to Notion or the Readwise Highlighter Chrome extensions. For physical notes, this is somewhat more challenging. Taking a picture is easy enough, but retrieving these days, weeks or months later can be a challenge if I don’t add comprehensive tags right away. Next to that, I don’t like to spend a lot of time transcribing my notes. So, wouldn’t it be awesome if we had the same full-text search functionality as with all your other Notion notes?

Building my own automated text recognizer

Unfortunately, Notion doesn’t support this (yet?). They do however offer a publicly available API, so adding your own functionalities isn’t too difficult. For the text recognition or Optical Character Recognition (OCR) part, I wanted to use something reliable, fast and (most importantly) free. Microsoft offers a great free tier with their Microsoft Vision API, which allows for 5000 free transactions per month: that’s a lot of notes! For the logic, I used Python, mainly, well, since that is the language I can somewhat work with 😅. Last but not least, I wrapped the whole thing in a Docker container, so it can be quickly distributed, installed and updated on any machine.

Update April 13th, 2026: Since the original release, I’ve rewritten the project in C# (.NET 10) and added support for a second OCR provider: IronOCR by IronSoftware. The original Python version is still available as v1 on GitHub, while the new C# version is tagged v2 / latest. I’ve ensured that there are no breaking API changes, so if you already have the Docker project running, you can just pull the latest image.

IronOCR as an alternative

Disclosure: the IronOCR integration was sponsored by IronSoftware.

IronOCR is a .NET OCR library that runs entirely on your machine, which makes it great for heavy users. To use it, set OCR_PROVIDER=ironocr and provide your license key; the rest of the Docker setup stays the same. Detailed instructions are in the GitHub README.

I’ve tested both providers myself. I feel the Azure API is best suited for the casual user, uploading different types of content (e.g. pictures, handwritten notes, papers etc), whereas IronOCR is a good fit for professional users that have a lot of printed text documents that they want to be easily searchable inside of their Notion Workspace.

Some things that are worth noting:

  • IronOCR also supports 125+ languages with separate NuGet packages, so worth checking out if you have a lot non-English content (didn’t test this myself)
  • Microsoft has announced the deprecation of the Image Analysis v4.0 API (end-of-life September 2028), so a migration will be needed (to Document Intelligence) at some point.

The end result can be found on my Github page here, together with a bit more technical write-up on how to set everything up. With this setup, I can now quickly snap a picture of anything important, inspiring or noteworthy that I come across in my day-to-day life. By adding a small tag underneath the picture, the photo will be automatically converted to text and thus increase the chances that it will pop up in the future when I’m searching my notes for inspiration. And who knows what new project will emerge then…

As always, please share your feedback by adding a comment here, sending me a message or sharing this with someone you know!

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top