DEV Community

Cover image for I Built a Local Bill Scanner So My Friend Stops Typing Invoices Into Google Sheets
Anish Roy
Anish Roy

Posted on

I Built a Local Bill Scanner So My Friend Stops Typing Invoices Into Google Sheets

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

What I Built

My friend Abhik runs a shop. Every invoice and receipt from other shops used to get typed by hand into a Google Sheet. Date, store, items, tax, total.

Now he drops in photos of the bills and presses Scan. Each bill is read on his laptop, shown next to the original photo, and he fixes anything that's off. Only after he approves does it go to the Sheet.

When I showed it to him, this is what he said:

It's really helpful. What amazes me is that all of this runs at zero cost, completely on my own computer. None of my data goes to the cloud or to some unknown company. Everything stays with me.

Code

github.com/pshycodr/invoice-processing-pipeline

How I Built It

Everything runs through Ollama. GLM-OCR or RapidOCR reads the photo, then gemma3:1b turns the text into JSON.

But a 1B model is bad at picking numbers. It kept reading HSN codes as prices. So plain rules now pick the total, date and store, and the model only handles items, category and payment method.

If OCR fails, the bill is marked handwritten, or no items are found, qwen3-vl:4b reads the image directly. Nothing reaches the Sheet without his approval.

The page lets him pick the OCR engine, pick any Ollama model by name, and add his own categories.

Why Does Open Innovation Matter?

These are his suppliers' invoices, with prices and tax numbers. With open models that data never leaves his computer, and each bill costs nothing.

Same idea as a cache with a slow path. The cheap OCR plus small model handles most bills, the vision model only runs on a miss, and he checks the final answer.

hacktoberfest #ollama #opensource

Top comments (0)