A photo of a receipt becomes a line of spending
Photograph the receipt, send it to the bot: the amount, the category and the place are already in a table.
What the scenario looks like
- Execute + Data
- LLM
Expense tracking does not fail on discipline, it fails on friction: to record a purchase you open an app, pick a category, type an amount. Photographing a receipt takes two seconds, and that is where the human part ends.
What is inside
- Receipt photo — the entry; the image arrives attached to the message.
- What is on the receipt — the model reads the photo and fills the fields: place, amount, date, category. There is no separate recognition node at all.
- Spending row stores what was parsed. Its Document field is deliberately empty: a value arriving on the input port wins over the field, and the parser already hands over an object with the right keys. Nothing between the model and the table can mix fields up.
- Confirmation tells the person what was recorded.
Always answer with a confirmation: without one there is no sign that the bot read the amount wrong, and you find out a month later while going through the numbers.
What to set up for yourself
- The categories are written in the description of the
categoryfield. List your own and the model starts sorting into them. No separate reference table is needed. - The collection. Replace
REPLACE_MEwith your own id. - The model must accept images. Not every model in the list does, and if the photo never reaches it the answer will be confident and invented.
What to connect
A collection under Tables and a Telegram bot. No external services: the receipt is not stored anywhere, only four fields go into the database.
The other half of the pair is “How much did I spend”: it reads the same collection and answers questions about it.