GroshMeister: шість місяців роботи над власним фінансовим застосунком, але найбільшим викликом виявилася не програмна частина.
Влад Войтович Провідний PR-експерт Vodafone Ukraine. У вільний час пише код і робить власний інді-проєкт GroshMeister
Як і багато інших, я прагну мати свої фінанси під контролем. Проте, як і багато людей, я не завжди справлявся з цим належним чином.
У monobank є відмінна статистика, але лише для його власних користувачів. Однак у мене є ще й готівка, картка іншого банку, позичені кошти та трохи валюти, які не враховуються разом. Кожен з цих елементів існує окремо, і жоден додаток не може їх об'єднати. Я пробував користуватися Excel, але це швидко набридло — не через складність, а через нудьгу. Також тестував різні програми, зокрема Saldo, але жодна з них не стала зручною для мене.
Приблизно в січні в мене виникла думка: скільки ж насправді знадобиться часу, щоб впоратися з цим самостійно?
З'ясувалося, що коду - шість місяців. А решта...
На початку я щиро спробував знайти готове рішення.
Український сектор особистих фінансів активно розвивається. Наприклад, Saldo Finance пропонує можливість роботи в режимі ФОП, а Midni має функцію синхронізації з monobank, але тільки за підпискою, яка коштує 83 ₴ на місяць. Також на ринку представлені Monefy та 1Money, які взагалі не підтримують синхронізацію і вимагають ручного введення даних.
Вони не були поганими, просто жоден з них не виконував те, що мені потрібно: щоб усі борги, готівка, різні валюти і бюджети були зібрані в одному місці та підсумовувалися в одну загальну суму. Крім того, зізнаюся, у мене був ще один стимул – мені було цікаво, чи зможу впоратися з цим завданням.
31 січня я здійснив свій перший коміт.
Перший місяць пройшов незвично легко.
Щоб не залишати інтриги, ось деталі: серверна частина реалізована на Node.js з використанням MongoDB, а мобільний додаток створено за допомогою React Native.
monobank має відкритий API - і це, як зʼясувалось пізніше, для України рідкість. Причому в двох варіантах: персональний токен, який будь-хто бере собі в особистому кабінеті, і корпоративний - для продуктів. Я взяв другий: з ним людина розплатилась карткою, і за секунду операція вже в застосунку.
Далі - автокатегоризація. У кожної транзакції є MCC-код, чотири цифри, які означають тип торгової точки: 5812 - ресторани, 5411 - продуктові, 5541 - заправки. Пишеш таблицю відповідностей, і додаток сам розкладає витрати по категоріях. За лютий я зробив основу: рахунки, транзакції, категорії, темну тему, вхід через Google.
Так, я користувався AI. Трохи вайбкодингу в розумних межах - архітектуру, бекенд й рішення тримав за собою, рутину віддавав. Це помітно прискорює, але має неочевидний побічний ефект: код зʼявляється швидше, ніж ти встигаєш його зрозуміти. Половина моїх найдовших багів - саме звідти.
А далі настало щось захоплююче.
Найдорожчі помилки не обов'язково пов'язані з "неправильним кодом".
Найдорожчими виявились помилки, де кожен фрагмент коду виглядав правильним окремо. Один з таких випадків приніс мені тестувальник: він натискав на категорію в аналітиці, бачив зверху напис "5 операцій", а під ним не було жодних даних. Дві частини програми описували той самий фільтр трохи по-різному, і для системи це були два окремих запити. Виправлення вимагало всього кілька рядків коду, але пошук проблеми зайняв значно більше часу.
Були й інші: дві копії React в одному застосунку, модальні вікна на iOS, які щоразу зʼїдали пʼяту частину власної висоти. І щоразу виявлялось, що система не помиляється - вона робить рівно те, що я їй сказав.
Але найскладнішим моментом виявилося не написання коду.
Бар'єр номер один: один банк надає інформацію, в той час як інші утримуються від цього.
monobank — це особливий випадок, і саме з нього розпочалася історія додатку. Той самий персональний токен: просто заходиш у свій особистий кабінет, отримуєш його, і за лічені хвилини можеш переглядати свої операції. Всі ці можливості абсолютно безкоштовні, без потреби у юридичних особах чи паперових документах. В Україні це досі залишається практично унікальною пропозицією.
Спробуйте повторити те ж саме з ПриватБанком. Хоча у них є API, він розділений на два: один призначений для бізнесу, а інший, відповідно до стандартів відкритого банкінгу, доступний лише для ліцензованих компаній. Для звичайного користувача, який бажає відстежувати свої витрати, жоден з цих варіантів не підходить. Таку ж ситуацію спостерігаємо і з Ощадбанком, Райффайзеном та УкрСибом. Таким чином, якщо ваша зарплата не надходить на рахунок в monobank, ви не зможете програмно отримати свої транзакції. Єдиний вихід - завантажити файл виписки. Саме так я і зробив для ПриватБанку: з кінця вересня GroshMeister навчився читати виписки з Приват24 - один файл, в якому зібрані всі операції в додатку, причому повторний імпорт не створює дублікатів. Але це все ще лише файл, який потрібно завантажувати вручну, а не жива синхронізація. Технічно це не є складним процесом: банк вже має ці дані, і вони відображаються у вашому додатку. Проблема не у технічній можливості, а в тому, кому надаються доступи.
Тому monobank у моєму додатку працює автоматично, ПриватБанк - через файл виписки, а решта - вручну.
Бар'єр номер два: Apple висловила відмову.
29 липня я надіслав свою заявку до App Store. Вже наступного дня отримав відмову.
Правило 5.1.1(ix) зазначає, що програми, що працюють у фінансовій сфері або мають справу з чутливими даними користувачів, повинні бути представлені юридичною особою, яка надає ці послуги, а не індивідуальним розробником. Статус фізичної особи-підприємця не є прийнятним — для Apple це також вважається індивідуальним підприємцем, в той час як необхідна компанія, що має міжнародний номер D-U-N-S.
Я подав апеляцію, але 2 серпня вона була остаточно відхилена. Код уже написано, білд зібрано, і він досі зберігається в їхній системі, готовий до повторної подачі. Проте для того, щоб надіслати його, мені потрібно зареєструвати ТОВ.
Це правило, врешті-решт, має сенс з точки зору забезпечення безпеки користувача. Але мене більше вразило інше: до моменту, коли система відмовляє, ви навіть не підозрюєте про це. На жодному з етапів розробки вам не повідомлять: "до речі, з цим функціоналом ви як фізична особа не зможете пройти". Ви дізнаєтеся про цю деталь лише після завершення всіх робіт.
На платформі Google Play не було необхідності для юридичних осіб. Існує свій механізм перевірки - мінімум два тижні закритого тестування з участю щонайменше дванадцяти тестувальників. Після завершення цього етапу, 3 серпня, я подав заявку на публікацію, яка була затверджена 7-го числа, а в той же день реліз пройшов перевірку всього за годину.
Apple відмовила протягом доби. Google погодився через чотири дні.
Бар'єр третій: відкритий банкінг, який поки що не приносить результатів.
Тут повинна з’явитися позитивна новина. Офіційно вона дійсно така.
В Україні запущено відкритий банкінг - це коли банки зобовʼязані за вашою згодою віддавати ваші дані стороннім сервісам через стандартизований інтерфейс. Технічні вимоги до банківських API набрали чинності 1 серпня 2026-го, і НБУ обіцяв, що банки будуть готові протягом серпня-вересня.
Звучить як "проблема з попереднього розділу вирішена". Я теж так подумав, поки не почитав документи.
По-перше, глибина історії: не більше ніж 31 день від дати запиту. monobank дає зібрати рік, і саме рік робить перший запуск осмисленим: людина ставить застосунок, щоб побачити свої витрати, а не порожній екран і напис "зачекайте місяць, поки назбирається".
По-друге, вартість входу на цей ринок є подібною до корпоративних процедур: необхідно пройти авторизацію в Національному банку України, отримати кваліфікований сертифікат і забезпечити страхування відповідальності на суму 110 тисяч євро. Також потрібна юридична особа. Знову ж таки.
Результат видно в реєстрі НБУ: станом на кінець серпня читати дані з рахунків мали право лише три компанії на всю країну.
Не стверджую, що регулятор діє неправильно: фінансова сфера – це та область, де експерименти часто закінчуються не найкращим чином. Але давайте будемо відвертими. Відкритий банкінг в Україні – це не "тепер усі розробники можуть отримати доступ до банківських даних". Це насправді "доступ отримають лише ті, хто має товариство з обмеженою відповідальністю та страховку на суму 110 тисяч євро".
Я за цим пильно слідкую і сподіваюсь, що з часом барʼєр знизиться. Але прямо зараз для одного розробника з ноутбуком це ту мач.
Який результат?
Додаток активно функціонує та доступний у Google Play з 7 серпня, а для користувачів iPhone наразі доступний лише через TestFlight для бета-тестування. Він здійснює моніторинг транзакцій з monobank у режимі реального часу, автоматично класифікує їх за категоріями, розпізнає повернення коштів (наприклад, скасування замовлення в Glovo не вважається доходом, а є зменшенням витрат у категорії "Їжа на замовлення"). Додаток також обчислює борги між користувачами у стилі Splitwise, управляє бюджетами та відображає загальну суму активів у вибраній валюті.
Експорт у форматі CSV я реалізував на прохання одного з користувачів, який бажав вивантажити свої дані для подальшого аналізу за допомогою штучного інтелекту. Це справді чудова ідея, і я сам не подумав би про це. (Маленький спойлер - ми плануємо розвинути цю функціональність до повноцінного MCP найближчим часом.) У вересні також з'явилася функція прогнозування статку: додаток аналізує середні показники за останні шість місяців і прогнозує, якою буде ваша фінансова ситуація через рік, якщо не вносити змін. Наприкінці вересня ми також додали можливість імпорту виписок з ПриватБанку.
У публічному релізі найбільш важливими виявилися звіти про помилки. Без них половина виправлень могла б і не з'явитися: користувачі взаємодіють з додатком по-іншому, ніж його розробники, і помічають ті нюанси, які вже стали непомітними для тих, хто працює над проектом.
Висновок, до якого я не готувався
Я починав це як технічну задачу. Умів робити бекенд, хотів розібратись із мобільною розробкою, було цікаво, чи витягну сам.
Виявилося, що написання коду - це лише початок. Реалізація автокатегоризації, ідентифікація переказів, робота з кількома валютами та забезпечення живої синхронізації з банківськими системами - це всього лише питання часу. Таку роботу можна виконати за вечори та вихідні, а з використанням штучного інтелекту - ще швидше.
Отримати доступ до даних, що вже належать користувачу, і право відобразити їх у додатку — це питання не лише програмування. У цьому процесі відіграють ключову роль інші учасники: банк, який надає API, поки інші залишаються осторонь, платформа, яка потребує юридичну особу, та регулятори, які формально відкривають ринок, але встановлюють вимогу страховки на рівні 110 тисяч євро.
Отже, наступного разу, коли ви натрапите на ще один фінансовий додаток, який виглядає "практично ідеальним, але все ж не зовсім" – пам'ятайте: автор, ймовірно, усвідомлює його недоліки навіть краще, ніж ви. І багато з цих недоліків можуть бути не його рішенням.
Мені цікаво дізнатися вашу думку з цього приводу. Особливо, якщо ви також мали досвід роботи з банківськими даними в Україні — поділіться, будь ласка, як це відбулося.