Case study · Workflow analysis · Process automation · Tool building

From a shoebox of receipts to a live cost tracker

A house build produces receipts in four places at once: email, WhatsApp, paper and phone photos. This project maps that mess, routes everything through one intake, uses AI to read each receipt, keeps a person in the loop for review, and publishes the result as the dashboard below.

The process, before and after

The problem was not reading receipts. It was that they arrived through four channels, none of them searchable, and nothing joined them to the build budget until someone sat down with a spreadsheet.

Before

4 sourcesEmailed invoices, WhatsApp images, paper slips, camera roll
→
Find itSearch inboxes and chats when a total is needed
→
RetypeCopy supplier, date and amounts into a spreadsheet
→
Guess the phaseAllocate to a build phase from memory
→
Total upBudget check happens rarely, if at all

After

1 intakeEverything goes to one Gmail address and is forwarded to Make
→
ExtractMake sends each attachment to a Cloudflare Worker, where an AI vision model reads supplier, date, total and a suggested phase
→
CheckMissing or implausible totals and duplicates flagged automatically
→
ReviewRow lands in Notion as Needs review; a person approves or corrects it
→
PublishApproved rows feed this dashboard and score the AI against the corrected values
Manual pain pointAutomatedHuman decision

What the mapping showed

  • The bottleneck was intake, not data entry: four channels meant no single list to work from. Normalising them to one inbox removed the searching step entirely.
  • Phase allocation is the judgement call. AI suggests it, but approval stays with a person, so the dashboard only ever shows reviewed figures.
  • Every correction is data. Comparing what the AI read with what was approved gives a running accuracy score, which is how a model choice gets justified.
  • Only the amount actually paid is tracked. Fewer fields means fewer misreads to correct, and the total is what the budget is measured against.

Live dashboard

Read live from Notion through the Worker and cached for a few minutes. Only approved receipts are counted.

Showing generated sample data. The live figures appear here once the Notion connection is switched on.

Spend by build phase

Show as table

Spend by trade

Show as table

Spend by month

Show as table

Top suppliers

Show as table

Intake pipeline

Try it

Upload a receipt and watch it go through the same pipeline. The image itself is never stored: only the extracted fields are saved, in a separate sandbox table that is never added to the real ledger. Please don't upload anything with personal details you'd rather keep private.

Model

Pipeline trace

  1. Shrunk in your browser and sent to the Worker
  2. The AI model reads the receipt and returns structured fields
  3. Total, duplicates and confidence checked
  4. Row written to the Notion sandbox

Model comparison

Every extraction is logged with its provider, time and cost. Once a receipt is approved, the AI's reading is scored against the corrected values for supplier, date and total. The live pipeline runs on Cloudflare's free Workers AI; Claude is next, run on the same receipts for a like-for-like comparison.

ProviderModelReceipts readFields right first timeAvg timeAvg confidenceCost per 100

How it's built

Each tool does the job it is best at, and everything runs on free plans: Make for the workflow, a Cloudflare Worker for the AI and the site, Notion for the data and the review.

Intake

Gmail

Receipts from email, WhatsApp, paper scans and photos all go to one address. A filter forwards them to Make, and the subject line records where each one came from.

Workflow

Make

Receives each email, splits out the attachments, sends them to the Worker, and writes the result to Notion as a receipt awaiting review. About 4 credits per receipt.

AI

Workers AI

Llama 3.2 Vision reads photos; PDFs are converted to text first. Runs inside Cloudflare's free daily allowance. The Worker also matches supplier and phase and flags duplicates.

Data

Notion

Receipts, Suppliers, Build phases and an Extraction runs log, linked by relations. Review happens here: a status field gates what reaches the site.

Site

Cloudflare Workers

Serves this page, keeps every key as a secret, and caches the dashboard at the edge. Originals never leave your Gmail: each Notion row links straight to its email.

Next

Claude

A second provider behind the same interface. It plugs into the demo and the comparison without changing the workflow.