cd /news/ai-tools/invoice-sorter-a-private-expense-tra… · home › topics › ai-tools › article
[ARTICLE · art-150566] src=dev.to ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

Invoice Sorter: a private expense tracker for freelancers that runs on a laptop

A developer built Invoice Sorter, a command-line tool that reads a folder of PDF invoices and receipts and outputs a single expenses.csv with vendor, date, total, currency and category. The tool runs entirely on the user's laptop, using pdfplumber for text extraction and a locally served open-weight model (qwen2.5:3b via Ollama) in JSON mode at temperature 0, with Polars writing the CSV, so client financial data never leaves the machine and there is no per-document API cost. The model is swappable through the OLLAMA_MODEL environment variable and the output path is configurable with a --out flag.

by read2 min views8 publishedOct 15, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

Invoice Sorter is a small command-line tool for freelancers. You point it at a folder of PDF invoices and receipts, and it writes one clean expenses.csv with vendor, date, total, currency and category.

The people who would pay for it are freelancers, consultants and small studios who lose a weekend at tax time retyping receipts into a spreadsheet. Their invoices contain client names and amounts, so many of them don't want to upload those to a cloud service. Invoice Sorter does the whole job on their own laptop, so the data never leaves it.

Terminal recording (8 sample invoices in, expenses.csv out, about 45 seconds, all local): https://asciinema.org/a/CWEnTFK4dQxtn78a

Freelancers and solo consultants who would pay for a lightweight bookkeeping helper can use this local invoice sorter to turn text-based PDF invoices and receipts into a tidy expense CSV, without hand-copying vendors, dates, totals, currencies, and categories. It saves time on repetitive expense entry while keeping client and financial documents on their own laptop.

Documents are read locally and sent only to your local Ollama instance, so client data never leaves your laptop. After down a model, processing works offline and has zero per-document API cost. The model is swappable through an environment variable, so you can use the open-weight model that works best for your machine without vendor lock-in. Extraction uses an LLM for extraction, rules as a safety net for common category keywords.

uv sync
ollama pull qwen2.5:3b
uv run make_samples.py
uv

…qwen2.5:3b, an open-weight model, served locally by pdfplumber pulls the text out of each PDF. The model returns structured JSON (vendor, date, total, currency, category) in JSON mode at temperature 0. Polars writes the CSV.OLLAMA_MODEL environment variable and the output file from a --out flag, so trying Llama or Phi is a one-line change.

── more in #ai-tools 4 stories · sorted by recency
── more on @invoice sorter 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/invoice-sorter-a-pri…] indexed:0 read:2min 2026-10-15 · —