For most Ukrainian businesses, the end of the day still includes a quiet, repetitive ritual: someone opens the Monobank statement, opens the order list, and matches one against the other line by line. It works — until volume grows. At a few dozen transactions a day the manual approach costs an hour. At a few hundred it costs accuracy, and accuracy is exactly what reconciliation exists to protect.
The business problem
Manual reconciliation creates three predictable failure points. Payments get marked as received when they were not, because a tired operator misread a reference. Orders sit unfulfilled because a confirmed transfer was never linked to them. And finance teams lose the audit trail — when a discrepancy surfaces a week later, nobody can reconstruct what happened. Every one of these has a direct cost: refunds, support tickets, and delayed shipments that erode customer trust.
The solution: an automated reconciliation workflow
Monobank exposes a well-documented API and webhook system. n8n, a self-hostable automation platform, can listen to that data and do the matching that a person was doing by hand — every transaction, in seconds, with a full log. The result is a workflow that never gets tired and never skips a line.
The logic is straightforward: receive each incoming payment, find the order it belongs to, update the order status, and flag anything that does not match cleanly for human review. The machine handles the 95% that follow the rules; your team handles only the exceptions.
Concrete steps
1. Connect the Monobank API. Generate a personal or merchant token in the Monobank API console and register a webhook pointing at your n8n instance. From that point, every transaction posts to n8n in real time — no polling, no delay.
2. Normalize the incoming data. Add a Function node that extracts the amount, timestamp, and the payment comment or reference field. This is where your matching key lives — most businesses encode the order number into the payment description.
3. Match against your order source. Use an HTTP Request or database node to query your store — OpenCart, a Laravel application, or WooCommerce — for an open order matching the amount and reference. n8n handles the lookup and comparison in a single branch.
4. Update and notify. On a confirmed match, write the order status back via your store's API and post a confirmation to Telegram or email. On a mismatch — wrong amount, missing order, duplicate payment — route the transaction to a separate queue and alert finance. Nothing is silently dropped.
5. Log everything. Append each decision to Google Sheets or a database table. This gives you the audit trail manual reconciliation never had, and it makes month-end close a query instead of an investigation.
Why it holds up
This is not a fragile script. Run on a self-hosted n8n instance, the workflow keeps your financial data inside your own infrastructure, scales from ten transactions to ten thousand without code changes, and degrades safely — when something does not match, a human is asked, not bypassed. We have built reconciliation flows like this for Ukrainian merchants on OpenCart and Laravel, and the pattern consistently removes hours of daily manual work while reducing errors.
Ready to automate your payment reconciliation?
If your team still matches bank statements by hand, that time is better spent elsewhere. MaxiMoruM designs and deploys n8n automation integrated with Monobank, LiqPay, and your existing store — from the first webhook to a fully logged reconciliation pipeline.
Talk to our team at https://maximorum.com/
Automating Monobank payment reconciliation with n8n
D