{"slug": "localledger-ai-open-source-bookkeeping-with-human-verified-ai", "title": "LocalLedger AI: Open-Source Bookkeeping with Human-Verified AI", "summary": "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.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle](https://dev.to/challenges/hacktoberfest-week2-2026-10-12).*\n\nLocalLedger 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.\n\nIt also creates invoices, records payments that have already been received, and exports CSV files.\n\nThe 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.\n\nNames, 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.\n\nThere 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.\n\nThe demonstration covers the following workflow:\n\nThe 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.\n\n**Repository:** [LocalLedger AI on GitHub](https://github.com/Abishethvarman/LocalLedger.AI)\n\n**License:** MIT\n\nThe README covers setup, Tesseract OCR, and Ollama. Original documents and the SQLite database remain outside the source tree.\n\nThe 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.\n\nText-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.\n\nMissing 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.\n\nOllama 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.\n\nA 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.\n\nThe 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.\n\nA 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.\n\nSending 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.\n\nWhen 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.\n\nThe most important design decision is limiting what the model is allowed to do.\n\nIf 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.\n\nThis makes local AI useful without treating its output as automatically trustworthy.\n\nThe project was built using Cursor. The DevRelay session will be added once the session has been saved and made public.", "url": "https://wpnews.pro/news/localledger-ai-open-source-bookkeeping-with-human-verified-ai", "canonical_source": "https://dev.to/abishethvarman/localledger-ai-open-source-bookkeeping-with-human-verified-ai-ioa", "published_at": "2026-10-16 12:09:20+00:00", "updated_at": "2026-10-16 12:14:59.761334+00:00", "lang": "en", "topics": ["ai-tools", "ai-products", "large-language-models", "developer-tools"], "entities": ["LocalLedger AI", "Ollama", "Tesseract", "PyMuPDF", "FastAPI", "SQLite", "React", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/localledger-ai-open-source-bookkeeping-with-human-verified-ai", "markdown": "https://wpnews.pro/news/localledger-ai-open-source-bookkeeping-with-human-verified-ai.md", "text": "https://wpnews.pro/news/localledger-ai-open-source-bookkeeping-with-human-verified-ai.txt", "jsonld": "https://wpnews.pro/news/localledger-ai-open-source-bookkeeping-with-human-verified-ai.jsonld"}}