Automation · 04
Maki Finance Tracker
A personal finance bot on Telegram, built as one Make scenario. Expenses and income are logged with a short message or a receipt photo, and the bot summarises spending by day, week or month, so logging a purchase takes seconds instead of opening an app.
- Stack
- Make
- Telegram
- Supabase
- OpenAI
01 / 03
Image 1 of 3: Make scenario for the Telegram finance bot: router and its routes
The chats are my own test entries.
Overview
The problem. Spending apps take too many taps, so small expenses go unrecorded. I wanted to log a transaction in a few seconds from a chat I already use, including straight from a receipt.
What I built. I built the Make scenario behind the bot. A router handles typed entries like "Food lunch 150", commands such as /today, /week, /month, /search, /edit and /undo, and receipt photos. Photos are read by OpenAI into a strict JSON schema, only a readable peso total becomes an expense, and every record lives in Supabase.
Why it helps. Every expense is logged from the chat in seconds, and summaries are one command away.
System flow
- Every message or photo to the bot runs the scenario immediately. Nodes: Telegram Bot · Watch Updates. Next: Route the message.
- 11 routes: transaction text, /start and /help, /today, /week, /month, /categories, /search, /notes, /undo, /edit and receipt photos. Nodes: Router. Next: Typed transaction, Summaries & search, Fix the last entry, Read the receipt, Bot reply.
- "Food Resto 250" is matched by pattern, its category looked up and the row saved. Nodes: Tools · Set multiple variables; Supabase · Search Rows (categories); Supabase · Create a Row (transactions). Next: Bot reply./today, /week, /month and /categories read summaries; /search lists matches. Nodes: Supabase · Search Rows ×5; Tools · Set variable; Tools · Text aggregator. Next: Bot reply./notes adds a note, /edit changes and /undo deletes the latest transaction. Nodes: Text parser · Match pattern ×2; Supabase · Search Rows ×4; Supabase · Upsert a Record ×2; Supabase · Delete Rows; Tools · Set multiple variables. Next: Bot reply.Skips photos already recorded, then OpenAI reads merchant, total, currency and date into a strict JSON schema. Nodes: Supabase · Make an API Call; Telegram Bot · Download a File; OpenAI · Create a Model Response; Router. Next: Save a valid PHP total, Bot reply.
- Only a readable peso total is saved, with a matched category. Nodes: Supabase · Make an API Call; Tools · Set multiple variables; Supabase · Create a Row. Next: Bot reply.
- Every route answers in the chat, including AI and database errors (nothing is saved then). Nodes: Telegram Bot · Send a Text Message or a Reply ×14. End of flow.