Internal demo
Ledgerline
Matches incoming supplier invoices against bank transactions and flags the ones a person needs to look at.
- Type
- AI, Automation
- Year
- 2026
- Stack
- Python, FastAPI, OpenAI API, PostgreSQL, Next.js
Interface shown with sample data.
The challenge
Small accounting firms reconcile hundreds of invoices a month by hand, switching between email, PDFs and bank exports. Most matches are obvious; the time goes on finding the few that are not.
Who it’s for
Accountants and bookkeepers at firms with 3 to 30 staff.
Solution and product strategy
- Invoices arriving by email are parsed into structured fields with a model, then validated against rules (GSTIN format, totals, dates).
- A matching step proposes bank transactions for each invoice with a confidence score and the reason for the match.
- Anything below the confidence threshold goes to a review queue; accepted matches are written back to the accounting system.
System architecture
The path a request takes through the system, and what each part is responsible for.
- 01Mail ingestReceives forwarded invoices, stores the original PDF
- 02ExtractorLLM with a JSON schema, retried on validation failure
- 03RulesDeterministic checks the model is never trusted with
- 04MatcherScores candidate transactions, explains each score
- 05Review queueHuman decision on low-confidence items
What we’d measure
This is an internal demo, so there are no client results to report. These are the numbers a real deployment would be judged on.
- Share of invoices auto-matched without edits
- Minutes spent per 100 invoices before vs after
- False matches caught in review
What we learned
- Validation rules did more for accuracy than prompt changes.
- Showing the reason for each match made reviewers trust and correct it faster.
Want something like this for your team?
Tell us what you're trying to do. A senior engineer reads every message and replies personally.