GroceryTrack
An AI receipt scanner I designed, built, and shipped — a working web MVP in a single day, the iOS app in the App Store about 1.5 months later, and the Android app on Google Play after that.
Point your camera at a grocery receipt and get clean, categorized spending insights instantly. No manual entry, no per-store templates — just a multimodal LLM doing the work an OCR pipeline used to take months to build.
to a live web MVP
parsed in under 7 months
at a $74 average basket
unplanned Canadian base
Scratching my own itch.
On March 13, 2026 I got annoyed enough at my grocery receipts to do something about it. On March 14, the first web version of GroceryTrack was live. I wanted answers to embarrassingly simple questions: how much do I actually spend on groceries each month? Is Costco really cheaper for the things I buy? Did egg prices go up, or does it just feel that way?
Budgeting apps can't answer these. They see a single line — COSTCO $187.43 — and stop. The interesting data lives inside the receipt: the items, quantities, and unit prices. For years the only way to get it was manual entry into a spreadsheet, which I tried and abandoned twice.
OCR finally works — because it stopped being OCR.
Receipt digitization isn't new, but traditional OCR pipelines were brittle. Every store formats receipts differently, thermal paper fades, and items are abbreviated past recognition — ORG BNLS SKNLS CKN BRST, anyone? Building per-store templates was the old approach, and it never scaled.
Multimodal LLMs changed the economics overnight. A model that can read and reason about a crumpled receipt photo — inferring that string is organic boneless skinless chicken breast and filing it under poultry — turns a months-long parsing project into a well-crafted prompt. That was the unlock that made a one-day MVP possible.
A personal itch that sits on a trillion-dollar market.
Groceries are the largest recurring household expense — over $1T spent in the U.S. each year — and the least visible at the item level. Budgets track the trip (COSTCO $187.43), never the cart. Three forces make now the moment: grocery is moving online fast, emailed receipts are already the default, and modern models finally read messy receipts line by line, accurately and at near-zero cost.
market, 2026 · +10.5% CAGR
groceries online · +7.3% YoY
2025 → 2035
2025–35 · up from 7.5%
Grocery is moving online
E-grocery is now 20.5% of U.S. grocery sales, up from ~15% — and climbing every quarter.
Receipts went digital
Emailed receipts are the default. The data exists — it's just trapped in inboxes and PDFs.
AI makes it reliable
Modern models read messy, varied receipts line by line — accurately, instantly, at near-zero cost.
One prompt, one image in, structured JSON out.
GroceryTrack sends the receipt photo directly to Gemini's multimodal API — no separate OCR step, no text-extraction pipeline, no per-store templates. One image in; store name, date, line items with quantities and prices, and item categories out, as validated JSON.
The entire "parsing engine" that would have taken months to build in 2020 is a model call plus careful prompting and output validation. The rest of the app — capture, storage, analytics, auth — is conventional, fast, and boring on purpose, so the one novel part could ship the same day.
How the pieces fit.
Flutter on iOS and Android for fast prototyping, a Next.js web app, Firebase as the backend, Gemini as the parsing engine, and an MCP server so AI assistants can read the data directly.
In October I rewrote the iOS app natively in SwiftUI. v2 is in beta and ships as an update to the same App Store app, with the same database, API and analytics, so nothing changes for the backend. Android stays on Flutter.
Across 63 receipts and 792 line items from 12 users, just 17 items needed correcting. The engine is excellent at the unit level — header fields like date and merchant are the weak spot, 4–5× more error-prone, and the focus to close.
The capabilities that made it real.
Scan & extract
Snap a receipt and AI pulls every item and price in seconds — no manual entry, no per-store setup.
Spending insights
Track household grocery spend by store, category, and time — the picture bank statements never give you.
Nutrition + stores
Nutrition facts on what you buy, across all the major chains it already recognizes.
MCP server
An MCP endpoint so AI assistants can read your grocery data directly and answer questions about it.
See it in action.
Full walkthroughs recorded on real devices — scanning a receipt, reviewing the extracted items, and exploring the spending insights. The iOS demo is v2, the native SwiftUI app; the Android demo is the Flutter app from Google Play.

The data, animated.
Short visualizations built from GroceryTrack's own usage data — how the product grew, what got scanned, and where the users turned up.
What 1,245 receipts taught me.
The hard part used to be the parser. In the LLM era, the hard part is everything around it — and the whole thing fits in a day.
Building in the LLM era.
What surprised me wasn't the technology — it was how much the center of gravity moved. The thing that would once have been a multi-month engineering project (the parser) became a prompt. The thing I assumed would be easy (distribution, retention, the unexpected Canadians) became where the real learning was.
The lesson I keep: when a model collapses the hard technical core of a product to near-zero, the leverage shifts to taste, speed, and listening to real users. Ship the boring 90% well, let the model do the magic 10%, and pay attention to who actually shows up.
Seven months in, I rewrote the iOS app in SwiftUI in about a day with an agent. The native build is less than half the size, builds 3x faster in CI and runs on 4 dependencies instead of 43. It changed my mind about cross-platform frameworks: Native or Hybrid?
For where the product stands now, read the founder update: Seven Months of GroceryTrack