From Paper to Notion: Scan, OCR, and Decide What to Keep
Warranties, utility bills, instruction manuals. Paper documents arrive and pile up on the edge of the desk under the assumption that "I might need this someday," only to vanish when you actually need them. Scanning them into Notion makes them searchable, but if you stop there, you're still left wondering: "Can I throw away the original?"
In this article, I share the workflow I use to keep paper from piling up. It consists of four steps: scan the document, transcribe it into text, save both the image and the text in Notion, and record whether to keep or discard the physical copy—along with how long to keep it.
A Workflow to Prevent Paper Clutter
- 1. ScanConvert to an image file
- 2. TranscribeExtract text with OCR; pass only text to AI
- 3. Store in NotionOne page per document; transcript below image
- 4. Decide physical handlingRecord keep or discard, plus retention period
Why I Don't Feed Images Directly to the AI
In the beginning, I fed scanned images directly to Claude Code. Compared to the page count, images consume a large number of tokens (the unit of usage capacity). When I passed dozens of pages at once, token consumption spiked noticeably.
Now, before passing anything to the AI, I transcribe the images using a small script dedicated to OCR (extracting text from images). I only pass the text to the AI. In my setup, this script simply takes a list of image paths and returns text organized with headings for each document. It asks a Gemini API model to "transcribe the text in this image."
- Cost: Passing only text is much lighter than loading images into the AI conversation every time.
- Speed: Once converted to text, you don't have to re-read images every time you search or summarize.
- Reusability: As text, it can be searched inside Notion and easily picked up by other automated workflows.
Data Handling When Using APIs for OCR
This is something you must verify if you handle personal documents. In Google's Gemini API Additional Terms of Service, data handling differs between Unpaid Services and Paid Services.
| Unpaid Services | Paid Services | |
|---|---|---|
| Use of submitted content | Used to improve services and develop machine learning technologies | Not used to improve products |
| Human review | Human reviewers may read inputs and outputs | Terms state retention is limited to purposes such as abuse detection |
| Terms warning | Do not submit sensitive, confidential, or personal information |
The original text of the terms explicitly states for Unpaid Services: "Do not submit sensitive, confidential, or personal information to the Unpaid Services." I separate my usage by processing personal documents with a Paid Services key, and using Unpaid Services only for documents that wouldn't cause harm if viewed, such as publicly available technical documents. The terms can change, so please read the latest wording yourself when you use the service. This article reflects what I verified in October 2026.
Another important point comes before choosing an API tier: for documents you don't want anyone else to see, you always have the option not to send them to any service at all and handle everything locally.
How to Organize in Notion: One Page per Document, Transcript Below the Image
In Notion, where everything is saved, I create one page per document and attach the image. Right below the image, I place the transcript inside a toggle so the page doesn't look overly long.
- Keep the image in Notion as the original copy.
- Keep the transcript on the same page for search and automated processing. Also save it to a local folder (so you don't rely entirely on Notion).
- If a page for a similar document already exists, append to it instead of creating a new one. To avoid registering the same document twice, check the document type (an invoice versus a receipt, for example) even when the amounts match.
In the Notion API, the official documentation outlines steps to "create a file upload" and "send the file," which allows you to attach the resulting upload to image blocks and other elements. Free workspaces also have a limit of 5 MiB per file. In my setup, I use this procedure through Claude Code. For getting started with Notion via Claude Code, see Connect Claude Code to Notion: Setting Up Notion MCP; for verifying formatting by reading pages back after writing, see Make the AI Re-read Every Notion Page It Writes (Line Breaks, Garbled Text, Stray Links).
Failures with Filenames Containing Japanese and Other Non-ASCII Characters
In my environment, attempting to upload images with filenames containing non-ASCII characters like Japanese using the curl command failed at times. The same method succeeded on other occasions, so it didn't fail consistently, and I haven't pinpointed the cause. Whenever it fails, I switch to one of two approaches:
- Stop using curl and build the upload using something like Python's httpx
- Create a temporary copy with an alphanumeric-only name before passing it
I also encountered errors due to filenames containing non-ASCII characters like Japanese when using Gemini's file upload feature for OCR. In environments where filenames contain non-ASCII characters like Japanese, the safest approach is to pass a temporary alphanumeric copy from the start.
Record the Decision on Whether to Discard Every Time
Even if you scan documents, paper clutter won't decrease unless you get rid of the physical copies. But if the criteria are vague each time, anxiety prevents you from throwing them away. That's why I decided to record how to handle the physical document whenever I save it. Here are the two points:
- Whether to keep or discard
- If keeping, until when
Writing just "Keep" leaves you wondering when you can throw it away, and paper eventually piles up again. If you specify an expiration month and year, like "Keep until October 2028," all you have to do is review it when that time comes. For items determined by conditions—such as "until the next notice arrives"—write down that condition.
| Example Document | Decision Rationale |
|---|---|
| Appliance warranties | Keep until the warranty expires, then discard |
| Utility bills (paid) | Safe to discard once the amount and breakdown are recorded |
| Instruction manuals | Many are available on the manufacturer's website; check, then discard |
| Contracts and official certificates | Hard to reissue, so set a retention period and keep |
Some tax-related documents have statutory retention periods. However, because the required number of years varies depending on the type of document and your situation, I won't list specific figures in this article. I recommend checking official guidance (such as from tax authorities) for your specific retention requirements and making a habit of deciding and recording a retention period for each document, as shown above.
Summary
- After scanning, convert images to text with OCR instead of feeding the images to an AI. This cuts token use, and the text is searchable.
- When using an API for OCR, verify the terms before sending personal documents, since data handling differs between unpaid and paid tiers.
- In Notion, use one page per document and keep the transcript below the image. If uploads fail due to filenames containing non-ASCII characters like Japanese, pass a temporary alphanumeric copy instead.
- Every time you save, write down whether to keep or discard and until when, preventing paper from piling up.
If you need page or database IDs when using this Notion integration, you can use the Notion ID Finder. Also, for how to write instructions that Claude Code follows every time, see Put Your “House Rules” in CLAUDE.md So You Don't Have to Repeat Them.