Skip to content
Firmspace
Back to blog

From Bank Statement to Paid Invoice: Reconciliation in the CRM

Money arrives in the bank account, invoices live in the CRM, and between the two there is usually a person with a statement and a lot of patience. In Firmspace this gap is closed by the «Bank & cash» section: it keeps bank accounts and cash boxes with their movements, and every movement can be tied to the invoice or the expense it belongs to.

The statement can be pulled straight from the bank. In the monobank card you paste the token from your account at api.monobank.ua — sole traders use the same place — and the CRM shows your bank accounts, from which you pick the ones to keep. After that the «Sync» button fetches the statement, and incoming payments are matched against customer invoices and expenses. The same section imports a CSV file from the bank: movements are added to the journal and rows that were already imported are skipped.

Duplicate protection is not cosmetic here. Every row carries the bank's own identifier, and the writing path is shared by the CSV import and the API sync: importing the same statement twice adds nothing the second time. That is what makes frequent syncing safe — the journal does not grow with copies of the same payment.

Matching works on three levels, and the levels differ on purpose. The strongest is the invoice number found in the payment purpose: such a movement is linked to the invoice straight away. Next comes the same amount with a date within two weeks of the invoice — a confident guess, and it is recorded too. If only the amount matches, the CRM does not decide for you: the pair stays as a hint that a human confirms. Incoming money is matched against customer invoices, outgoing money against expenses.

An honest note: this matching is a rule, not a neural network. The rules are predictable by design — the number in the purpose, the amount, the date — and that is exactly what makes the result explainable: for every link you can say why it appeared. Artificial intelligence in this section does a different job, the one it is actually good at: answering questions in ordinary words.

That is where the AI assistant comes in. Ask which invoices are still open, who owes you, how much is overdue — and instead of a report with fifteen columns you get a short answer: how many invoices are unpaid and overdue, for which amounts, and the totals per currency. The list behind that answer shows the invoice number, the customer, the total, how much is still open, the due date and how many days overdue it is.

Money received is the next step. The assistant prepares the mark that the invoice is paid — in full or partially, if only part of the amount arrived — together with the date the money came in, because that date decides which month the payment falls into on the charts. The action is not silent: it runs after your confirmation, exactly like the rest of the assistant's work.

There is a voice route to the same data. Say «open the accounting section and show unpaid invoices» and you land on the right tab with the filter already applied — handy when you are going through the numbers with an accountant or a partner and do not want to click through the menu.

Banking data is handled simply: the bank token is stored encrypted and is never returned to the browser, and the account is shown with only the last four digits of the IBAN instead of the full number. The technical side of the sync is hidden as well: monobank returns a statement in windows of at most 31 days and 500 rows, so a long period is split into windows and stitched back together on the server. If the token is wrong or the bank asks to wait because of the request limit, the section says so in plain language instead of failing silently.

The boundaries are worth stating too. The CRM records movements and links them; it does not move money and does not replace the bank. A weak match stays a suggestion until a human confirms it, and the first statement after connecting is worth checking against the bank's own cabinet. The assistant, in turn, answers about money only from what actually stands in the CRM — it does not guess figures it cannot see.

The practical result: the question «has this invoice been paid?» stops being a search through a banking app and becomes a question you can ask out loud, with the answer already linked to the invoice in the CRM.

Let us automate your next process together.

Describe a recurring workflow to us. Together we will check whether and how it can be automated sensibly.