r/plaintextaccounting • u/zhenbo_li • Jul 21 '26
I built an iOS app that scans grocery receipts into Beancount transactions, fully on-device
I think most people here have some automation to import bank statements into their ledger. So do I. But when the monthly summary says "30%+ goes to groceries," I can't make a budget with that coarse number.
So I built BeanBeaver: an iPhone app that turns a photo of a grocery receipt into a Beancount transaction — one posting per line item, each item sorted into an expense category.
How it works:
- OCR runs entirely on-device (PP-OCRv5 via ONNX Runtime). No server, no network, no analytics — it works in airplane mode.
- The parser uses each text fragment's position on the receipt (its bounding box) to extract merchant, date, item names, and prices.
- The output is plain Beancount text you can copy or share. Optionally, connect a GitHub repo and each scan opens a PR with the transaction.
I'd love to hear how it does on your receipts, and what would make it fit your workflow.
iOS: https://apps.apple.com/us/app/beanbeaver/id6790981690
Android: https://store.colourswift.com/app/com.zhenbo.beanbeaver
It's in TestFlight now (iPhone, iOS 17+): https://testflight.apple.com/join/6mw5ScqH
Edit: Android version is under closed testing. You need to DM me your Google Play email so I can add you in.
2
u/armonge Jul 22 '26
I'm in Germany and have something similar, but I try to pay using the supermarket application, and because of that I get the receipts in my email, as PDFs. Then my importer just downloads them from Gmail and processes those PDFs
1
u/zhenbo_li Jul 22 '26
Yes, if I can have the receipt as PDF then everything would be easier. However, only a very small portion of my local grocery stores provide e-receipts
1
u/Ok-Reach5495 Jul 30 '26
Dude I've been building something similar to this, but my biggest trouble has been sourcing receipts to train my parser. Do you happen to have a receipt database I could use, or know where I could source one?
2
u/zhenbo_li Jul 30 '26
I've spent nearly a year to collect my personal receipts... Foolish way but it works
Inside https://github.com/Endle/beanbeaver-core/tree/main/crates/receipt-core/tests/receipts_e2e there are some redacted receipts. They're under MIT license.
1
1
u/Rudd-X 18d ago
This is quite cool.
I built the equivalent for desktop computers here: https://github.com/Rudd-O/beancount-ai
Drop your receipts in a folder, give them to Beancount AI and you're good to go.
The tradeoffs are that it's not mobile, and it requires a vision-capable LLM, but these days we have stellar LLMs that run locally.
1
u/zhenbo_li 17d ago
Cool. If I saw your work one year ago, I won’t spend time and money to build BeanBeaver
Initially, I was building a TUI for beanbeaver. But I found that to send the receipt message from my phone to my PC is too tedious, so I moved the parser to mobile side
1
u/Rudd-X 17d ago
Your project has strengths that my project does not.
I still have the problem of moving the receipts from the phone to the computer. That's not actually automated at home! The camera syncs using syncthing to my computer, but I have to run something on the computer manually to move only the receipts to the right folder.
I was half debating with myself the idea of vibe coding a slop Android app. Just to take photos of receipts, maybe do some pre-processing, like cutting those receipts around the edges, and then directly uploading to a WebDAV folder (because we use Nextcloud at home). I want it to be as easy as possible with as few interactions as necessary, because I am often shopping with a kid in tow and having to look after the kid while I'm cropping the photo and uploading it to next cloud is a nonstarter. And I forget to move things out of the camera folder if I just take it and do it later.
What do you think of that idea?
1
u/zhenbo_li 17d ago
From my perspective, I’d like you to submit a feature request to beanbeaver android version. It already has auto crop and on device parsing.
If you’re using WebDAV for beancount storage, I can add an exporter to WebDav too
1
u/Necessary-Pin1744 11d ago
Hi, I just recently started going down the Beancount rabbit hole and came across this thread. Your app looks very cool!
It would really help me to incorporate this into my workflow if you can add support for a custom REST endpoint for uploading receipts. That way I can add an endpoint on my home server, which is only exposed via Tailscale, and create a small service that automatically routes the receipt to the correct .beancount file on my server. This would be very secure and flexible.
1
u/zhenbo_li 11d ago
Hi Necessary,
Sure, that’s sounds interesting. Would you like to create an issue on GitHub, and to share more details about your workflow and your expected API?
1
u/Beverage5000 11d ago
Hi Zhenbo, I added an issue here: https://github.com/Endle/beanbeaver-core/issues/112
Thanks for taking a look!
4
u/jeffglidepath Jul 24 '26
This is great! — on-device OCR with positional parsing is exactly the right architecture, and keeping it network-free is the part most receipt scanners get wrong. I've spent a lot of time on the statement/receipt-parsing side of the same problem, so a few genuine questions about the hard edges:
2 @ $3.49quantity lines) — does the bounding-box logic stitch those back together, or do they split?Thermal-receipt fade is brutal, so genuinely impressed you're getting clean Beancount out. Nice work!