MiminoChange
A Telegram bot for a currency exchange: it collects rates from five financial platforms, finds arbitrage routes and publishes spreads to a channel. Ran for two years.
Stack
- Python
- aiogram
- SQLite
Problem
Routes were found by hand: staff went round the websites of payment systems and exchanges, compared rates and worked out the spread on each destination. Rates moved, so all of it had to be redone from scratch, and the calculations ate a lot of time.
Solution
The bot collects rates from payment systems and exchanges, works out the spreads and publishes a summary in a Telegram channel. A separate flow calculates arbitrage for a specific amount and bank. The exchange's own rates are calculated from a formula, but staff can adjust them by hand from the admin panel when supply and demand call for a different rate than the formula gives.
Key technical decisions
- Some of the sources had no API, so rates had to be read off the pages. The markup changed from time to time, so the lookup is not tied to a single CSS selector and survives those edits.
- Sources differ in data format and in how often they refresh, and some go down. Rates are normalised to a common format before the calculation; otherwise the spread would be computed from figures that aren't comparable.
The media below comes from the product itself, so interface text and any audio are in Russian.
A bot for a currency exchange that tracks live exchange rates and works out spreads for arbitrage. It pulls data through integrations with several financial platforms, calculates routes for a given amount and set of banks, and publishes the spreads in the exchange’s Telegram channel. Rates can also be edited by hand from an admin panel.
Overall spread
In the Spread section the bot collects the current rates of every service involved in a profitable route, through integrations with financial platforms: Binance, Garantex, MOEX, Golden Crown (Zolotaya Korona) and Unistream. In some countries transfers are not available through every service; the bot marks those options separately (the screenshot shows the case of Armenia).

Spread for a specific amount
A separate button calculates arbitrage for a specific amount on the Georgia route. Once the amount is entered, the bot offers a single bank or all of them at once (Sberbank, Tinkoff, Raiffeisen) and shows, per route, the net profit in roubles and per cent for each way of sending (Unistream and Golden Crown). The short summary can be expanded into a detailed one or collapsed.

Adjusting the exchange’s own rate
The bot works out buy and sell rates automatically from a given formula, but they can be corrected by hand from the admin panel.

Results
- The bot ran for two years, for as long as the niche stayed commercially worthwhile.
- The bot, and the calculations published in a shared channel, were used by the exchange's staff and clients, and by people from other exchanges.