DEV Community

Cover image for Pocket Audit: A $19 Private Expense Audit for Freelancers
ARCHON STRATAGEM
ARCHON STRATAGEM

Posted on

Pocket Audit: A $19 Private Expense Audit for Freelancers

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission ๐Ÿ’ธ

Pocket Audit: A $19 Private Expense Audit for Freelancers

Tags: #devchallenge #hf26challenge

Drop in a bank CSV. Find duplicate charges, recurring subscriptions, and fee creep โ€” without uploading your financial data anywhere.

Links: Repository ยท Demo video
Built: October 12โ€“18, 2026, for the Hacktoberfest Week 2 "Side Hustle" challenge
Stack: Python (stdlib only) ยท Qwen3-1.7B open-weight model via llama-server ยท zero third-party services


The problem

A freelancer has six months of bank transactions and no time to read them. Somewhere in there: a design tool they're paying for twice under two different merchant names, a SaaS subscription that crept from $15 to $20 a month, a recurring charge for something they stopped using months ago.

The existing fixes all ask for too much trust. Expense apps want a live bank connection or a full transaction-history upload to somebody's cloud. You're supposed to hand over the single most revealing document you own โ€” income, clients, software stack, travel, all of it โ€” just to find a forgotten $12 subscription.

I wanted the audit without the surrender.

Who would pay for it

Freelancers, consultants, creators โ€” anyone whose business runs through one checking account and a stack of SaaS tools. Not people who love budgeting software. People who want one question answered: where is my money leaking?

The price is $19, once. Not monthly โ€” the product helps you kill recurring costs, so becoming one would be a joke. The math that sells it: one forgotten $12/month subscription is $144 a year. Pocket Audit pays for itself in under two months off a single find, and the audit itself takes minutes.

What I built

Pocket Audit is a local-first web app. You choose a bank CSV from your device, confirm the column mapping, and it runs the full audit on your machine:

  1. Import โ€” the file never leaves the device. No bank login, no account, no upload.
  2. Normalize โ€” every bank format maps into one canonical transaction record (plain bank dates, signed amounts in integer minor units, ISO currency codes).
  3. Detect โ€” a deterministic rules engine finds exact duplicates, recurring charges, price creep, and service overlaps.
  4. Explain โ€” a compact open-weight model (Qwen3-1.7B, running locally through llama-server) cleans up messy merchant names and writes plain-English explanations. It never touches the math.
  5. Report โ€” a dashboard with one honest headline: potential savings from high-confidence findings only, every flag traceable to its transactions, every flag dismissible.

The whole thing runs on a 4GB phone. I know, because that's the hardware I built it against.

Demo

I seeded a year of freelancer checking activity with believable mess: ADOBE*CREATIVECLD 800-833-6687next toAdobe Inc.`, two overlapping design subscriptions, a software bill that rose mid-year, a dead tool still billing.

Pocket Audit's verdict: $184/year in potential savings โ€” $96 in likely duplicate subscriptions, $48 in a recurring price increase, $40 in charges flagged for review (kept out of the high-confidence headline โ€” the report won't spend money it can't prove). Each finding opens to the exact transactions behind it. Nothing in the headline I can't prove from the CSV.

(See the demo video linked above for the full run: import โ†’ mapping โ†’ findings โ†’ report, end to end, on-device.)

How it works

The architecture has one non-negotiable principle: the model is never allowed to invent a financial finding.

Every duplicate, recurring pattern, price increase, and dollar total is computed by deterministic code from the imported CSV โ€” duplicate windows (ยฑ$0.01, 0โ€“3 days), recurring cadence bands (28โ€“31 day median, ยฑ5 days, 3+ occurrences), price-creep thresholds (โ‰ฅ10% or $3, confirmed twice). The local model gets a narrow, fenced job: normalize a merchant string, pick a category from a 16-item allowlist, return strict JSON. Its output is validated like hostile input โ€” schema, enum, string guards, a grounding check that rejects merchant names not present in the description โ€” and anything below 0.75 confidence goes to "Needs review."

Bank CSVs can't prove you don't use a service, so Pocket Audit never says "zombie subscription" or "cancel this." It says "recurring charge to review," with Keep / Ignore / Not recurring controls. Every correction becomes a local alias, so the product gets smarter on your device without your data going anywhere.

Multi-currency is handled without fantasy conversions: native and settled amounts stored side by side, recurrence grouped by merchant + billing currency + account, and a hard rule โ€” price creep means the native amount rose. If only the settled USD moved, the report says your cost moved with exchange rates. It will not accuse a merchant of raising prices when FX did it.

Why open innovation matters

This section isn't decoration. Open weights are the reason the product can exist at all.

A cloud-AI version of Pocket Audit would send merchant descriptions, dates, and amounts to a hosted inference provider on every import, recategorization, and report. That's a privacy tradeoff demanded before the product delivers value โ€” for financial data, that's disqualifying for most buyers.

Running a compact open-weight model locally removes the tradeoff and rewrites the unit economics. A hosted API bills per audit; at a $19 one-time price, those per-use costs eventually eat the business. Local inference has no per-audit vendor bill, so the one-time price is structurally sound instead of subsidized. The product doesn't need to become a subscription to survive โ€” which matters, because its entire pitch is helping you escape subscriptions.

And the model stays mine to choose: a smaller quantized build for constrained devices, swaps as local runtimes improve, no vendor pricing page that can move under me. Open innovation here isn't a badge. It's the privacy story and the business model.

What I learned from a first user

Honest answer: at publish time, the first stranger hasn't run it yet. I built and verified it against seeded data this week, and the next step is putting it in front of one Phoenix freelancer with the question "would you pay $19 for this?" โ€” then reporting back what they said, including the no. I'll update this section when that happens.

What I would build next

More bank format coverage, the local-alias learning loop wired into the UI (corrections already save locally), a packaged mobile build, and the optional offline FX rate pack for travelers. The detection engine is the moat; everything else is distribution.

Try it yourself

bash
git clone https://github.com/archonstratagemai-lab/pocket-audit
cd pocket-audit
python3 server.py

open http://localhost:8000 โ€” try the sample CSV first, no real data needed

Top comments (0)