Self-Hosting Paperless-ngx on Raspberry Pi: Scan, OCR, and Archive Shop Paperwork
Between receipts, machine manuals, warranty paperwork, and project invoices, a maker shop generates a steady stream of paper that's genuinely useful to keep — until you actually need to find one specific document eight months later. Paperless-ngx is an open-source document management system that scans, OCRs, tags, and indexes paperwork so it's searchable by content rather than by whatever folder you filed it in, and it runs comfortably on a Raspberry Pi 4 or 5. This guide covers installing it, setting up a scanning workflow, and getting the automatic tagging working so incoming documents sort themselves.
What Paperless-ngx Actually Does
You feed it a scanned document (PDF or image), and it runs OCR (via Tesseract) to extract the text content, applies your configured tagging rules to auto-classify it (correspondent, document type, tags), and stores both the original file and a searchable, indexed version in its database. The payoff is full-text search across every document you've ever fed it — search for "Anycubic warranty" or an invoice number and get the actual document back, rather than remembering which folder you filed it under three years ago.
Installing on a Raspberry Pi
Paperless-ngx ships official Docker images with an ARM64 build, so a Pi 4 or Pi 5 running the 64-bit version of Raspberry Pi OS is the right target — the 32-bit OS is not supported. Docker Compose is the recommended install path since Paperless-ngx is actually a small stack: the webserver/OCR app itself, a PostgreSQL database, and Redis for the task queue.
sudo apt update && sudo apt install -y docker.io docker-compose-plugin sudo usermod -aG docker $USER mkdir -p ~/paperless && cd ~/paperless curl -sL https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docker/compose/docker-compose.sqlite.yml -o docker-compose.yml curl -sL https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docker/compose/.env.example -o .envEdit .env to set PAPERLESS_TIME_ZONE, PAPERLESS_OCR_LANGUAGE (defaults to English; add others if you scan documents in more than one language), and a strong PAPERLESS_SECRET_KEY. The SQLite-based compose file is the lighter-weight option and works fine for a single-user home archive; move to the PostgreSQL compose variant if you expect a large document volume or multiple concurrent users.
docker compose up -d docker compose exec webserver python3 manage.py createsuperuserOnce running, the web UI is available at http://<pi-ip>:8000, and the superuser account you just created gets you into the admin interface to configure tags, document types, and correspondents.
Getting Documents In: Scan Workflow
Paperless-ngx watches a "consume" folder — anything dropped into it is automatically picked up, OCR'd, and filed within a minute or two. There are a few practical ways to get documents into that folder:
- A network scanner with scan-to-folder or scan-to-email — point it at the consume directory over SMB, or set up a dedicated mailbox that Paperless-ngx polls (it has a built-in mail import module) and email scans to yourself
- A phone scanning app — apps that export directly to a shared folder or email work well for quick receipt capture; the OCR step in Paperless-ngx handles the cleanup, so a slightly crooked phone photo of a receipt is usually fine
- A flatbed or sheet-fed scanner connected to another machine on the network, saving directly to a Samba share mapped to the Pi's consume folder
Automatic Tagging Rules
The real time-saver is setting up matching rules once so future documents sort themselves. In Settings → Tags, Correspondents, and Document Types, each entry supports a matching algorithm (any word, all words, exact match, or regex) applied against the OCR'd text — so a rule like "any document containing 'Anycubic' gets tagged Correspondent: Anycubic and Document Type: Warranty/Manual" runs automatically on every future scan without you touching it. Set these up for your recurring correspondents (your bank, your main hardware suppliers, utility companies) early, since it's the difference between an archive that stays organized and one that becomes another pile.
Rule ExampleMatching TextResult CNC/laser supplier invoicesVendor name in document bodyAuto-tag Correspondent + Document Type: Invoice Machine manuals"user manual" or "instruction manual"Auto-tag Document Type: Manual Warranty cards"warranty" + purchase date pattern (regex)Auto-tag Document Type: Warranty, with expiration reminders via a custom fieldRetention and Original Files
Paperless-ngx keeps the original uploaded file alongside its processed, searchable-text version by default — worth confirming this setting hasn't been changed if you plan to shred paper originals after scanning, since you want confidence the digital copy is the full, unmodified source document. Back up the media and data Docker volumes (originals, thumbnails, and the database) as part of your regular Pi backup routine; this is the one self-hosted service on a maker's Pi where losing the underlying files actually matters, since a corrupted database is recoverable but a lost original scan generally isn't.
Storage Planning
OCR'd PDFs with embedded text layers are modest in size — a typical single-page scan runs a few hundred KB to low single-digit MB depending on scan resolution and whether it's color or black-and-white. A Pi with a decent microSD card handles a home archive of a few thousand documents without issue, but consider booting from an external SSD (see this site's NVMe/SSD boot guide for Pi 5) if you're scanning in bulk or archiving high-resolution color originals — the write endurance and speed of an SSD is a better fit for a database-backed service like this than an SD card long-term.
Accessing It Remotely
Put Paperless-ngx behind Tailscale or a reverse proxy with authentication if you want to reach your document archive from outside your home network — this is genuinely useful for looking up a receipt or manual while you're actually at the store or the supplier's counter. Don't expose it directly to the public internet without a proper reverse proxy and strong authentication in front of it; it's holding scanned copies of potentially sensitive paperwork (financial documents, IDs used for warranty claims), and that's not something to leave lightly protected.
Paperless-ngx turns the pile of paperwork every maker shop accumulates into something you can actually search instead of just store, and running it on a spare Raspberry Pi means the whole archive lives on hardware you already own rather than a subscription cloud service. The setup investment is mostly in the tagging rules — get those right early and the system does the filing work for you from then on.