{"slug": "local-receipt-extractor", "title": "Local Receipt Extractor", "summary": "A developer built a command-line tool that extracts structured data—vendor, date, total, currency, and expense category—from receipt and invoice images using an open-weight vision model (qwen2.5vl:7b by default) run locally through Ollama. The tool outputs one JSON line per receipt, supports batch processing to CSV, and lets users swap models via a flag such as --model gemma3:4b, keeping sensitive financial documents off cloud services. The developer notes small local models can misread blurry or unusual receipts and recommends spot-checking output before handing it to an accountant.", "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\nA small command-line tool that reads receipt and invoice images and returns clean, structured data: vendor, date, total, currency, and expense category.\n\n**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.\n\n**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.\n\nExample output:\n\n```\n{\"file\": \"receipt_01.jpg\", \"vendor\": \"Starbucks\", \"date\": \"2024-03-12\", \"total\": 8.45, \"currency\": \"USD\", \"category\": \"meals\"}\n```\n\nA 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.\n\nNo cloud API, no per-page fees, and receipts never leave your machine.\n\n```\n# 1. Install Ollama: https://ollama.com\nollama pull qwen2.5vl:7b\n\n# 2. Install dependencies\npip install ollama pydantic\npython receipt_extract.py receipt.jpg\npython receipt_extract.py ./receipts --csv results.csv\npython receipt_extract.py ./receipts --model gemma3:4b\n```\n\nExample output (one JSON line per receipt):\n\n```\n{\"file\": \"receipt.jpg\", \"vendor\": \"Starbucks\", \"date\": \"2024-03-12\", \"total\": 8.45, \"currency\": \"USD\", \"category\": \"meals\"}\n```\n\nUsage is one line:\n\n```\npython receipt_extract.py ./receipts --csv results.csv\n```\n\nThe model is a command-line flag (`--model gemma3:4b`), so swapping models needs no code changes.\n\n**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.", "url": "https://wpnews.pro/news/local-receipt-extractor", "canonical_source": "https://dev.to/jesroff_rouk_c8dec56cb964/local-receipt-extractor-33bj", "published_at": "2026-10-18 16:13:39+00:00", "updated_at": "2026-10-18 16:17:54.643897+00:00", "lang": "en", "topics": ["ai-tools", "computer-vision", "ai-products", "developer-tools"], "entities": ["Ollama", "qwen2.5vl", "gemma3", "Hacktoberfest"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/local-receipt-extractor", "markdown": "https://wpnews.pro/news/local-receipt-extractor.md", "text": "https://wpnews.pro/news/local-receipt-extractor.txt", "jsonld": "https://wpnews.pro/news/local-receipt-extractor.jsonld"}}