cd /news/ai-tools/localledger-ai-open-source-bookkeepi… · home › topics › ai-tools › article
[ARTICLE · art-151331] src=dev.to ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

LocalLedger AI: Open-Source Bookkeeping with Human-Verified AI

A developer built LocalLedger AI, an open-source, MIT-licensed bookkeeping assistant that reads receipts locally and requires human confirmation before any amount enters the ledger. The FastAPI/SQLite and React application uses PyMuPDF and Tesseract for extraction, with optional local LLM suggestions via Ollama that are accepted only when they quote text actually present on the receipt and fill fields the deterministic parser left blank. Its test suite passed 71 tests with 1 skipped on the developer's machine.

by read3 min views3 publishedOct 16, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle. LocalLedger AI is a bookkeeping assistant for freelancers and small businesses. It imports receipts, reads them locally on the computer where it runs, and requires a person to confirm every amount before it becomes part of the ledger.

It also creates invoices, records payments that have already been received, and exports CSV files.

The target user is a freelancer who keeps receipt photos in a folder and tracks expenses in a spreadsheet but does not want those documents sent to a hosted model. A bookkeeper managing a client's monthly records would benefit for the same reason.

Names, addresses, and prices stay on the local machine. The application does not connect to a bank or collect card payments. It maintains records; it does not file taxes or decide which expenses are tax-deductible.

There is no public website because local operation is a core part of the product. The screenshots below, when added, will use a fictional Northwind Supplies receipt rather than real customer documents.

The demonstration covers the following workflow:

The same workflow is available in scripts/run_demo.py. It uses a temporary data directory and does not call a commercial AI API. On my development machine, the script completed with the local model disabled. PDF text extraction and manual review were sufficient for the demonstration.

Repository: LocalLedger AI on GitHub License: MIT

The README covers setup, Tesseract OCR, and Ollama. Original documents and the SQLite database remain outside the source tree.

The backend uses FastAPI and SQLite, while the frontend uses React. Monetary values are stored as integer minor units, and invoice totals are calculated on the server from the line items.

Text-based PDFs are processed using PyMuPDF. Photos and scanned documents can be processed using Tesseract when it is installed. A deterministic parser then looks for the vendor, date, currency, amounts, and reference number.

Missing or ambiguous fields remain empty. A missing date is not replaced with today's date, and a currency is not inferred from the computer's location.

Ollama provides optional support for running an open-weight language model locally. It communicates only through the loopback interface unless that restriction is explicitly disabled, and there is no hosted-model fallback.

A model-generated suggestion is accepted only when it quotes text that actually appears on the receipt and fills a field that the deterministic parser left blank. The suggestion is still marked for review. Human approval is required before an expense becomes a ledger record.

The core test suite completed with 71 tests passed and 1 skipped on my development machine. The skipped test covers image OCR because Tesseract was not installed in that environment. The demonstration used Python 3.12.

A receipt is a poor candidate for unnecessary third-party data processing. It can contain a person's name, address, tax details, and even fragments of account information.

Sending every receipt to a hosted API can introduce recurring costs and expose sensitive business information to an external service. LocalLedger AI avoids per-document API fees and can still function on a laptop without a language model installed.

When a model is installed, it can be changed through Settings without replacing the ledger. Changes in model pricing or the retirement of a hosted service do not take the user's bookkeeping records with them.

The most important design decision is limiting what the model is allowed to do.

If a receipt does not state the date, the date remains blank. If the subtotal, tax, and total disagree, the discrepancy is shown rather than silently corrected. The model is not asked to invent missing values. This makes local AI useful without treating its output as automatically trustworthy.

The project was built using Cursor. The DevRelay session will be added once the session has been saved and made public.

── more in #ai-tools 4 stories · sorted by recency
── more on @localledger ai 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/localledger-ai-open-…] indexed:0 read:3min 2026-10-16 · —