# Local Receipt Extractor

> Source: <https://dev.to/jesroff_rouk_c8dec56cb964/local-receipt-extractor-33bj>
> Published: 2026-10-18 16:13:39+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle](https://dev.to/challenges/hacktoberfest-week2-2026-10-12)*

A small command-line tool that reads receipt and invoice images and returns clean, structured data: vendor, date, total, currency, and expense category.

**Who would pay for it:** freelancers and small-business owners who spend every quarter digging through photos and screenshots of receipts before tax season. A bookkeeper handling several clients' receipts could use it too.

**The problem it solves:** manual data entry is slow and tedious, and receipts contain client names and payment details that people don't want to upload to a cloud service. This tool turns a folder of messy images into structured data, and everything stays on the user's machine.

Example output:

```
{"file": "receipt_01.jpg", "vendor": "Starbucks", "date": "2024-03-12", "total": 8.45, "currency": "USD", "category": "meals"}
```

A tiny script that reads receipt images with an open-weight vision model running **locally via Ollama** and returns structured data: vendor, date, total, currency, and expense category.

No cloud API, no per-page fees, and receipts never leave your machine.

```
# 1. Install Ollama: https://ollama.com
ollama pull qwen2.5vl:7b

# 2. Install dependencies
pip install ollama pydantic
python receipt_extract.py receipt.jpg
python receipt_extract.py ./receipts --csv results.csv
python receipt_extract.py ./receipts --model gemma3:4b
```

Example output (one JSON line per receipt):

```
{"file": "receipt.jpg", "vendor": "Starbucks", "date": "2024-03-12", "total": 8.45, "currency": "USD", "category": "meals"}
```

Usage is one line:

```
python receipt_extract.py ./receipts --csv results.csv
```

The model is a command-line flag (`--model gemma3:4b`), so swapping models needs no code changes.

**Where it fell short:** small local models can misread blurry or unusual receipts. A larger closed model would probably do better on those. For a tool that handles sensitive financial documents, I think the privacy and zero-cost trade is worth it, as long as the output is spot-checked before it goes to an accountant.
