This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle.
What I Built
Meet BillGuard AI, an invoice auditor designed for freelancers and small businesses that want to spend less time checking bills manually.
Invoices arrive as PDFs, screenshots, and photos. Important fields can be difficult to read, GSTINs can be mistyped, and subtotals, taxes, and totals don't always add up.
BillGuard AI extracts invoice details and checks them using deterministic Python rules.
It extracts:
- Vendor name, invoice number, and date
- GSTIN and expense category
- Subtotal, tax, and final total
It then flags missing fields, invalid GSTIN formats, and arithmetic mismatches. Users can review the results in a dashboard and export them to CSV.
The goal is simple: make invoice review less tedious without pretending that AI extraction is automatically correct.
Demo
Live application: https://billguard-ai-ke9v.onrender.com/
Source code: https://github.com/Aarya0706/billguard-ai
The application is deployed on Render. The hosted demo uses a configured Gemini endpoint, so availability depends on the provider's API quota.
How I Built It
The application uses Python, FastAPI, PyMuPDF, Pillow, and a lightweight HTML/CSS/JavaScript dashboard.
The extraction pipeline works in two stages:
- A vision model reads invoice images or PDF pages and returns structured fields.
- Python normalizes the extracted values and applies deterministic validation rules.
I separated extraction from validation deliberately. A language model can misread a digit or confuse a subtotal with a final payable amount, so arithmetic checks should not depend on the model's own judgment.
The app supports different OpenAI-compatible vision endpoints. It is designed to run with the open-weight Qwen2.5-VL model through Ollama for local inference, or with a hosted provider when easier access is needed. The public deployment currently uses Gemini.
I also added automated tests for image processing, multi-page PDFs, malformed model responses, validation, rate limits, fallback models, and API errors. My latest local test run passed all 29 tests.
Why Does Open Innovation Matter?
Invoices can contain client names, addresses, tax identifiers, and financial details. Where that information is processed matters.
An open-weight model gives users a choice that a hosted-only application cannot offer: run inference on their own computer instead of sending every invoice to an external AI service.
With a local model configured through Ollama, invoice images can stay on the user's machine, and inference does not incur a per-request API charge after the model has been downloaded. The trade-off is that local models need storage and computing resources.
The hosted option makes the app easier to access, but invoice images are sent to the configured provider and usage limits can apply.
I also wanted to avoid locking the project to one model provider. A model can be replaced without redesigning the invoice validation pipeline.
For a small business, that flexibility matters: it offers a path toward privacy, predictable costs, and control over how the tool works.
What Could Someone Pay For?
The initial audience is freelancers, independent consultants, and small businesses that receive invoices regularly.
A potential paid version could offer larger batches, searchable invoice history, vendor-wise expense summaries, and accounting-friendly exports.
These are ideas to validate with users, not features or customer demand I am claiming to have proven yet.
Prize Categories
Best Use of Render — the application is deployed on Render, which hosts the public web app and its FastAPI backend.

Top comments (0)