paperless-telegram-bot

paperless-telegram-bot

Docker app from geiserx's Repository

Overview

Telegram bot for managing your Paperless-NGX document archive. Upload documents by sending files or photos, search your archive, tag documents, and organize your inbox — all from Telegram without accessing the web UI.

Features health check endpoint, user whitelisting, and auto-detection of inbox tags.

Requires a running Paperless-NGX instance and a Telegram bot token.

More info: https://github.com/GeiserX/paperless-telegram-bot

paperless-telegram-bot banner

Your Paperless-ngx archive, run from Telegram.

Release Tests License Docker pulls GitHub stars


paperless-telegram-bot is a Telegram bot for Paperless-ngx, run in Docker. Send a photo or a file from your phone and it lands in your archive; then tag it, file it, search it and get it back, all from the chat. The bot polls Telegram and talks to Paperless over its API, so it needs no public URL, no open port and no VPN on the phone, and Paperless can stay on your LAN.

Features

  • Send a photo or any file up to 20 MB (Telegram's limit for bots) and it is uploaded to Paperless; the reply changes to the document's title once Paperless has finished processing it.
  • Tag it, pick the correspondent and the document type from inline keyboards right after the upload, or create a new tag, correspondent or type without leaving the chat.
  • A file Paperless already has is not stored twice: the bot names the existing document and offers it for download.
  • Type any text to search the archive; results come in pages, each with a Download button. /search does the same.
  • /inbox lists what still carries the inbox tag; Reviewed clears it with one tap, and so does Done after an upload.
  • Get the original file back in the chat, up to 50 MB.
  • /recent shows the latest documents and /stats the archive's counts.
  • Only the Telegram user ids you list can use the bot; everyone else is refused. It refuses to start with an empty list unless you set ALLOW_OPEN_ACCESS=true, which opens it to every Telegram user.
  • Works with Paperless-ngx 2.x and 3.x.

Quick start

docker run -d --name paperless-telegram-bot --restart unless-stopped \
  -e TELEGRAM_BOT_TOKEN=your_bot_token \
  -e PAPERLESS_URL=http://paperless.home:8000 \
  -e PAPERLESS_TOKEN=your_paperless_api_token \
  -e TELEGRAM_ALLOWED_USERS=123456789 \
  drumsergio/paperless-telegram-bot:v0.7.1

The image runs on amd64 and arm64. Without Docker, pip install paperless-telegram-bot (Python 3.11 or newer) gives you the same paperless-bot run; Getting started has the steps.

Get the three values first: the bot token from @BotFather (/newbot), the Paperless API token from your Paperless profile (click your user name, then My Profile, API Auth Token), and your own Telegram user id from @userinfobot. PAPERLESS_URL is the address the bot can reach, which is not always the one in your browser. Use the host's LAN address, or the Paperless container's name when both share a Docker network. When it works the log ends with Bot commands registered with Telegram, and sending /start to your bot in Telegram gets the command list back; Docker Compose, a run from source and what a working start looks like are in Getting started.

Documentation

Everything below is on the site, https://geiserx.github.io/paperless-telegram-bot/.

License

GPL-3.0-or-later

Requirements

Paperless-NGX instance and Telegram bot token from @BotFather

Download Statistics

6,270
Total Downloads

Related apps

Details

Repository
drumsergio/paperless-telegram-bot:latest
Last Updated2026-09-01
First Seen2026-04-06

Runtime arguments

Network
bridge
Privileged
false

Template configuration

Health PortPorttcp

Health check endpoint port

Target
8080
Default
8080
Bot TokenVariable

Telegram bot token from @BotFather

Target
TELEGRAM_BOT_TOKEN
Paperless URLVariable

Paperless-NGX instance URL

Target
PAPERLESS_URL
Default
http://paperless:8000
Paperless TokenVariable

Paperless-NGX API authentication token

Target
PAPERLESS_TOKEN
Allowed UsersVariable

Comma-separated Telegram user IDs (empty = open access)

Target
TELEGRAM_ALLOWED_USERS
Public URLVariable

User-facing Paperless URL for clickable links (defaults to PAPERLESS_URL)

Target
PAPERLESS_PUBLIC_URL
Max ResultsVariable

Maximum search results to display

Target
MAX_SEARCH_RESULTS
Default
10