Browse / Support and bookkeeping
Papra
Minimal document archive for receipts and invoices: email intake, OCR, tagging rules, API, CLI, and 100+ named env vars.
Papra is an AGPL document management platform built for storing and finding receipts, warranties, and invoices: upload or forward email to a generated intake address, extract text with OCR or a hosted extractor, auto-tag with rules or an LLM, and query it all through a bearer-token API, a CLI, or webhooks. Self-hosting is free; papra.app sells managed plans from $7.50 a month.
Alternative to Dext, Hubdoc
- we want every receipt and supplier invoice forwarded to one address, OCR'd, tagged, and searchable before month-end without paying per user
- we want our agent to file documents and pull the ones tagged for the accountant through an API key rather than a shared drive
- AGPL-3.0
- Archive, not ledger: no amounts, no double-entry; pair with an accounting listing
- Email intake needs OwlRelay or a catch-all domain wired to a webhook
- Managed Free plan is 512MB and 3 members
Last activity Sep 3, 2026. Fit: adaptable 2, operable 3.
Editions
Free (self-hosted) · Free open source
- Clone
git clone https://github.com/papra-hq/papra - ImageContainer
Managed Free · Free closed source
- HostedOpen the hosted app
Plus · $8 per month, annual ($9 monthly) closed source
- HostedOpen the hosted app
Pro · $25 per month, annual ($30 monthly) closed source
- HostedOpen the hosted app
Adaptable: what is yours to change
Make it yours
Config only24 things to edit
Everything is env vars, documented at docs.papra.app/self-hosting/configuration. An SMB sets AUTH_SECRET, AUTH_IS_REGISTRATION_ENABLED, DOCUMENT_STORAGE_DRIVER (filesystem, S3, Azure), INTAKE_EMAILS_IS_ENABLED plus a driver, DOCUMENTS_OCR_LANGUAGES or CONTENT_EXTRACTION_STRATEGY, AI_IS_ENABLED with one provider key, AUTO_TAGGING_ENABLED, and EMAILS_DRIVER/SMTP_*. Tagging rules, organizations, and API keys are created in the app.
- Env vars
AUTH_SECRETAUTH_IS_REGISTRATION_ENABLEDAUTH_FIRST_USER_AS_ADMINDOCUMENT_STORAGE_DRIVERDOCUMENT_STORAGE_FILESYSTEM_ROOTDOCUMENT_STORAGE_S3_BUCKET_NAMEINTAKE_EMAILS_IS_ENABLEDINTAKE_EMAILS_DRIVERINTAKE_EMAILS_CATCH_ALL_DOMAINOWLRELAY_API_KEYDOCUMENTS_OCR_LANGUAGESCONTENT_EXTRACTION_STRATEGYAI_IS_ENABLEDAI_DEFAULT_MODELANTHROPIC_API_KEYOPENAI_API_KEYOLLAMA_BASE_URLAUTO_TAGGING_ENABLEDAUTO_TAGGING_MODELEMAILS_DRIVERSMTP_HOSTWEBHOOK_URL_ALLOWED_HOSTNAMES- Config files
docker-compose (env block)apps/papra-server/.env (optional)- Prompt files
- none
- Accounts you need
- an email intake provider (OwlRelay) or your own catch-all domainoptional: S3-compatible storage, an LLM provider for auto-tagging
Source
- github.com/papra-hq/papra
- AGPL-3.0 license
- Last commit Sep 3, 2026
- 5,268 stars
Operable: what an agent can drive
Interface
OfficialAPIpublished by the builderremote or local
How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.
Reach
Partial coverage. 8 of 10 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Upload, list, and delete documents | Reachable | API: create document, list documents, get file content, delete by ID |
| Full-text search | Reachable | API document listing and search with filters; CLI also searches |
| Tag documents and run tagging rules | Reachable | API: create tag, associate tags, apply a tagging rule to all existing documents |
| Set custom properties on documents | Reachable | API: define and set custom property values |
| Manage organizations | Reachable | API: list, create, update, delete organizations |
| Ingest by forwarding email | Reachable | INTAKE_EMAILS_* env vars and OwlRelay driver; the address is generated per organization, agent sends mail to it |
| Ingest from a watched folder | Reachable | README: folder ingestion; CLI documented at docs.papra.app/resources/cli |
| Extract text and auto-tag with an LLM | Reachable | DOCUMENTS_CONTENT_EXTRACTION_ENABLED, AI_IS_ENABLED, AUTO_TAGGING_ENABLED run server-side on ingest |
| Share documents externally | Undetermined | sharing is a product feature; no sharing endpoint on the fetched API page |
| Register webhooks | Undetermined | webhooks exist (WEBHOOK_* env) but the API page omits webhook endpoints |
Code stack
- Languages
- TypeScript
- Frameworks
- SolidJSHonoDrizzleBetter Auth
- Package manager
- pnpm
- Database
- SQLite / libSQL (Turso in production)
- Hosting target
- Docker (ghcr.io/papra-hq/papra)Fly.io
- Built
- Human-written (recorded, never ranked)
Model stack
- Providers
- AnthropicOpenAIMistralDeepSeekOpenRouterOllamaLM StudiovLLMCocore (all optional)
- Models
- none
- Keys you need
ANTHROPIC_API_KEYOPENAI_API_KEYMISTRAL_API_KEYDOCLING_API_KEYAZURE_DI_API_KEY- Prompts live in
- none
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | README: docker run ghcr.io/papra-hq/papra; SolidJS client and Hono server | 95% |
| executionModel | AI_IS_ENABLED and AUTO_TAGGING_* are optional bounded steps in a deterministic pipeline | 80% |
| operability | docs.papra.app/resources/api-endpoints: bearer token; documents, tags, tagging rules, custom properties, organizations, API keys | 90% |
| effort | docs.papra.app/self-hosting/configuration lists every env var by name | 95% |
| editions | papra.app/pricing: self-host free under AGPLv3; Plus $9 ($7.5 annual), Pro $30 ($25 annual), Enterprise | 90% |
| active | gh api: pushed 2026-09-03, 5268 stars | – |
| reach | 85% |
Open questions
- Webhook and sharing endpoints in the API
- SDK package name and whether an MCP server is planned
Sources
- github.com/papra-hq/papra sourcing:support-bookkeeping:curated
- docs.papra.app/ sourcing:support-bookkeeping:curated
- papra.app/pricing analysis