Skip to main content
Expenses to Notion by text message
Own product · Personal finance

One text message and the expense is filed in Notion

Text the bot in English or Russian the way you would text a friend, tap who it was for and tap Confirm. Five steps later the categorized row is in Notion.

22Categories it sorts into
RU/ENType in either language
5Steps, message to saved row
1 dayFrom idea to working bot

Built with Claude Code in 1 day

Telegram chat with two saved transactions and a preview waiting for Confirm
01 / Confirm step

Nothing reaches Notion until you tap Confirm

The bot pulls the amount, the type, the category and the date out of your message and shows them back. One tap saves the row, one tap throws it away.

5steps, message to saved
  1. 1Write in Russian, get Expense €14.50, category Food, date filled in
  2. 2Person, currency and category are on screen before anything is saved
Notion database with the rows the bot wrote and every column filled in
02 / Notion database

Your spending is already a filterable table

Every confirmed message writes one typed row with amount, type, category, date, notes, person and currency. Filter by person or by category without building a spreadsheet first.

22categories to filter by
Telegram chat with the /help reply listing every category and the buttons asking who a transaction is for
03 / Parsing

It picks the category, you pick the person

Twenty-two categories from Food to Taxes are matched against the words in your message, in English or Russian. The only thing the bot asks is who the transaction belongs to.

More screens
Before

Logging a coffee meant opening an app and picking from menus, so the log fell behind within weeks.

After

You text it like a friend and the categorized row is in Notion one tap later.

Under the hood

01Context

Tracking spending by hand means opening an app every time

Logging a purchase by hand means opening a separate app or spreadsheet, then picking a category, a currency and who it was for from a set of menus, for every coffee and every bill. That friction is exactly why a spending log tends to fall behind or stop after a few weeks. The bot logs a transaction from wherever it already gets mentioned: a short message in English or Russian.

02How it works

A message, three taps, a row in Notion

A message like 'spent $45 on lunch' or 'потратил 500 на обед' is the only typing involved. The bot replies with buttons for who it is for, then a currency choice between USD and EUR, then a preview of everything it parsed: amount, type, category, date and notes. Behind that reply, tools/parse_transaction.py matches the message against 22 categories by keyword, checked in order until one fits, and decides expense or income from words like 'spent' and 'paid' against 'received' and 'salary'.

03Constraints

Rule-based parsing, a whitelist, two ways to run it

Category detection is rule-based rather than a model call, so a message that matches no keyword lands in Other instead of a smart guess, and currency is limited to USD and EUR. The bot only answers Telegram user IDs on an explicit whitelist, and re-validates the person and currency server-side even though they arrive from button taps. The same code runs two ways: main.py for a local process, or modal_app.py on Modal, where credentials live as Modal secrets instead of a local .env file.

ANM SOLUTIONS / CONTACT US

Want something like this?

First 30-minute call is free. We scope it, you decide.

Related service · Workflow & Process Automation ›
More cases