Skip to main content
OPEN SOURCE · MIT

localfiscal

Local-first, private receipt + invoice + ledger for solopreneurs and small businesses — money is exact, amounts are never invented, exports import cleanly.

Open source (MIT) · Local-first sqlite · Exact money (never floats) · Optional local Ollama vision · One-command Docker.

Watch localfiscal in action

Download the demo video

Recorded localfiscal v0.2.0 output, edited as a replay with fictional transactions in a new scratch SQLite database. No bank connection. Locally synthesized Dan narration.

Read the transcript

Localfiscal keeps a receipt and transaction ledger on your own machine. In a fresh scratch database, I add fictional client income and an office expense. No bank account or cloud service is involved. The generated report keeps the currencies separate and represents the amounts as integer minor units. This small example is a local bookkeeping demonstration, not financial or tax advice. Then export the same two transactions as CSV. This records and reports what I supplied; it does not reconcile a bank account. The source and local setup are linked below.

The problem

Solopreneurs and small teams drown in paper and digital receipts, manual categorization, invoice chasing, and painful tax prep. Existing tools are either dated desktop apps, heavy self-hosted platforms, or cloud SaaS that lock you in and exfiltrate your data. And the ones that handle money often do it with floats — so the numbers quietly disagree. localfiscal stays on your machine and gets the boring, important parts right.

A local-first Python CLI + minimal web UI that runs entirely on your machine. Ingest receipts (images/PDFs) with a locale-aware heuristic parser (and optional local Ollama vision) — amounts are stored as exact integer minor units with an explicit currency, and a receipt it cannot read is flagged needs-review rather than given a fabricated amount. Keep a private sqlite ledger, generate invoice PDFs, produce signed income / expense / net reports, and export real CSV (RFC-4180) and OFX/QFX. One-command Docker, non-root, loopback-only by default. Nothing leaves your device unless you explicitly export.

Demo flow

Ingest or add entries, generate invoices on demand, and produce signed reports — everything stays in your local sqlite file.

terminal
# 1. Ingest a receipt (or use the web UI)
localfiscal ingest ~/Downloads/coffee-receipt.jpg
INGESTED: 1 | 2026-06-28 | Demo Cafe | $12.50 | meals
 
# 2. Add income, then list (newest first)
localfiscal add 2026-06-28 "Acme Client" 1200 --income
ADDED: 2 | $1,200.00 | income
localfiscal list-tx --limit 2
2 | 2026-06-28 | Acme Client | $1,200.00 | general | income
1 | 2026-06-28 | Demo Cafe | $12.50 | meals | expense
 
# 3. Invoice + signed report (income / expense / net — never a false total)
localfiscal invoice "Acme Client" 1200 --out invoice.pdf
INVOICE: invoice.pdf
localfiscal report --fmt md
REPORT: data/report-now.md
## USD
- **Income:** $1,200.00
- **Expenses:** $12.50
- **Net:** $1,187.50

Quickstart

Run via Docker (recommended) or install from source. Core has no mandatory external services.

Docker (easiest)
git clone https://github.com/OrionArchitekton/localfiscal
cd localfiscal
docker compose up --build
# open http://127.0.0.1:8080  (binds loopback only)
Install from source (Python 3.11+)
git clone https://github.com/OrionArchitekton/localfiscal
cd localfiscal
python -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'
localfiscal --help
Ingest a receipt + generate report (CLI)
localfiscal ingest receipt.jpg
localfiscal add 2026-06-28 "Acme Co" 1200 --income
localfiscal report --fmt md

Command surface

ingest
Read a receipt image/PDF. A locale-aware parser extracts vendor / amount / date / category into the ledger; an unreadable amount is flagged needs-review, never invented. Optional local Ollama vision with --vision.
add
Manually add a transaction to the private sqlite ledger (--income for income, otherwise expense). Amounts are parsed exactly to integer minor units.
list-tx
List recent transactions from the local ledger (newest first).
invoice
Generate a clean professional invoice PDF for a client.
report
Produce signed income / expense / net reports per currency (Markdown, JSON, or CSV) — all derived from one exact integer source, so they always agree.
export
Export the full ledger as real CSV (RFC-4180) or OFX/QFX for your accountant or accounting software.
health
Quick health check and DB status.

Why it is different

Truly local-first & private

Everything lives in a single sqlite file on your machine. Optional local Ollama vision for better receipt OCR is off by default — with no endpoint configured there is no network call, ever. Data never leaves unless you explicitly export.

Correct & honest about money

Amounts are exact integer minor units with an explicit ISO-4217 currency — never floats. Markdown, JSON, and CSV reports always agree to the cent, and mixed currencies are reported separately instead of summed into a false total.

Honest by construction

A receipt it cannot parse is flagged needs-review, never given an invented amount, and the web upload is path-traversal-safe. The v0.2 "harden & honest" release makes every claim on this page true and tested — exports included.

Solopreneur & SMB friendly

Simple CLI + web. One-command, non-root Docker. Real CSV and OFX/QFX exports accountants actually use. No subscriptions, no vendor lock-in, no data hostage situation.