← All work

PRODUCT · SNAPSPENSE

Every receipt, matched to the statement — before anyone asks.

SnapSpense is a travel expense manager for people whose assistant files the report. Dump your phone's receipt photos after the trip; AI reads them, code reconciles them against the card statement, and what comes out is a report that's ready to work.

  • Django 5
  • PostgreSQL 16
  • Celery + Redis
  • Claude (vision AI)
  • Cloudflare Tunnel

7/7receipts read correctly on its first real trip — including iPhone HEIC photos

82 → 10unmatched charges after trip segments taught it when you were actually traveling

0statement rows ever sent to the AI — reconciliation is pure code

100%of accounts on mandatory two-factor, behind a tunnel with no open ports

A SnapSpense trip report in its warm thermal-paper theme: two receipt photos read by AI with vendor, amount, and category filled in, both stamped MATCHED against the card statement, and a banner flagging a hotel charge that has no receipt
A real report (demo data): both receipts read by AI and stamped matched against the statement — and one hotel charge flagged automatically because no receipt ever arrived for it.

From photo dump to filed report

  1. Dump the photos

    Drag in everything — JPEG, PNG, iPhone HEIC, PDFs. Photos are auto-rotated, cleaned up, and near-duplicates go to a review queue instead of being silently deleted.

  2. AI reads every receipt

    Vendor, date, totals, tax, tip, card digits, line items — plus a plain-English description. Every field carries a confidence score; anything uncertain is underlined in amber and stays unconfirmed until a human says so.

  3. Upload the card statement

    A CSV import with a column-mapping wizard that guesses from your headers and remembers each card's format. Overlapping statements de-duplicate themselves.

  4. The matcher does the math

    Exact amounts first, then tip-tolerant matching for meals, then vendor similarity. Charges with no receipt get surfaced instead of forgotten — dismiss them, expense them, or attach the photo you missed.

  5. Your assistant takes it from there

    A read-only working view with per-line comments, versioned downloads, and a clear lifecycle — draft, submitted, entered, reimbursed — with an audit trail on every move.

A SnapSpense report right after upload: both receipts extracted by AI with amber dotted underlines marking unconfirmed fields, no statement charges matched yet
Right after the photo dump: AI has filled in every field, amber underlines mark what a human hasn't confirmed yet.
SnapSpense statement column-mapping wizard showing a preview of the uploaded CSV and dropdowns for date, description, and amount columns, pre-filled by smart guessing
The one-time statement wizard: it previews your card's CSV, guesses the columns, and saves the mapping as a profile — future uploads are one click.

The details that make it actually work

Companion grouping

The itemized check and the card slip are one dinner, not two expenses. Multiple photos of the same purchase group themselves as supporting documents.

Trip segments

One report can hold a month of weekly trips. The missed-expense detector only looks near actual travel dates — with grace days for rideshares, whose tips re-date the charge.

Vendor alias learning

"SQ *BLUE BTL COF" becomes "Blue Bottle Coffee" once, then forever. The app learns your merchants instead of making you re-explain them.

Your statement never touches the AI.

Only receipt images are sent for extraction. The card statement — and everything else about your finances — is processed entirely by our own code on our own server. That's a design decision, not a settings toggle.

Drowning in someone's shoebox of receipts?

We build tools shaped like the way you actually work.

Book a call