Bulgarian accounting firm · 10-15 people · bookkeeping for 100+ client companies
Hands-Free Bank Statement Retrieval
Skip a single bank account and the month closes on partial data. This firm carried that exposure twice a month: three bank portals covering 70+ client companies, with a 2FA prompt at every login. Today no one pulls a statement manually.

- Industry
- Accounting & Bookkeeping
- Function
- Finance & Accounting
- Region
- Bulgaria
- Duration
- 6 weeks
- Team
- 3 people
Results
- 70+
- client companies handled twice a month
- All accounts at all banks, no one involved.
- 3
- bank portals driven by RPA
- Copes with 2FA by SMS and by app.
- ~25 h
- of manual effort returned each month
- About 300 hours over a year.
01
The challenge
The firm is a Bulgarian accounting and financial-management practice. Its team of 10-15 keeps the books for over 100 client companies.
The closing ran twice a month. Before each one, a person had to work through three banks' online portals, ProCredit Bank, UniCredit Bulbank and UBB, going company profile by company profile for over 70 companies. Each login triggered 2FA: an SMS code or a confirmation in an app. Then came the account-by-account routine. Open the account, download the statement and the balance, rename the file to the firm's naming rule, save it in the correct SharePoint folder.
The real price of the manual routine
- Hours. Every run cost 5-6 hours per large bank, plus 1-2 hours for the small one.
- Dependence on a few people. Only the handful of staff who held the banking credentials and got the codes could do the work. When they were on holiday or off sick, the closing waited.
- Gaps in the data. Skip one account and the closing rested on partial data. Nobody knew until the figures failed to reconcile.
- Growth with a ceiling. Each new client company meant more manual hours, so growing the business meant hiring.
- No API option. For this use case the banks provide no statement API. The only route in is the web portal a human would use.
02
What we did
We delivered a robot that collects statements with no one watching, running on a self-hosted n8n platform. It reaches the banks with RPA through their online portals, not through an API.
An RPA engine we built into n8n
We did not license a separate RPA product for each robot. We wrote browser automation connectors of our own, and they run natively in n8n workers, built on the long-term-support release of Playwright. The library holds over 50 custom activities and can drive any application that runs in a browser. The browser acts like a real person: human-like typing, pacing and navigation. There is no per-robot RPA licence and no separate robot runtime, and capacity grows with the n8n workers.
A configuration file the accountants control
Each bank account is one Excel row: the bank, the company profile exactly as the portal names it, the company ID, the account, the authentication method, who owns the credential, the destination path and an on/off switch. A new account, a new company or an entire new client means adding a row. No change request needed.
Two routes through 2FA
| 2FA type | What the robot does |
|---|---|
| One-time SMS code | We capture the code automatically and hand it to the robot via a webhook, and the login finishes by itself |
| Approval in a banking app | The credential owner gets a form that takes one click to answer. The robot waits, then carries on. Approval remains with the access owner |
Designed to look like an ordinary user to the bank
- Sessions grouped by credential. Every company profile under one credential at a bank is processed in one session. Logins are not repeated and nothing gets locked out.
- A dedicated sub-automation for each bank handles navigation, login, choosing the company and account, and the download. Each one is built from the same activity library.
Files land where the next robot looks for them
The robot downloads statements and balances in PDF and Excel and converts them where a bank's export format needs it. It renames each file to the firm's rule and uploads it via the Microsoft Graph API into SharePoint folders organised by date. Credentials are kept in an encrypted store.
- Scheduled runs happen on the 5th and the 15th of every month. An authenticated link starts an extra run on demand.
- Any single account can be turned off without affecting the rest.
Stack
| Layer | Tools |
|---|---|
| Orchestration | Self-hosted n8n running in worker mode |
| RPA | Our Playwright-based n8n nodes with 50+ activities |
| 2FA | SMS codes caught by webhook, one-click forms for app approvals, data tables in n8n |
| Document storage | Microsoft SharePoint and the Microsoft Graph API |
| Configuration and security | Configuration in Excel, encrypted store for credentials |
03
The outcome
| Manual | Automated | |
|---|---|---|
| Time to collect statements for one closing | 11-14 hours in three portals | Runs unattended |
| Who is needed | Credential holders only | No one |
| Adding a bank account | One more manual step on every run | A single row in the configuration |
| Naming and filing | Done manually | Same rule applied every time |
- Twice a month, statements for 70+ companies at 3 banks are collected with no one at the keyboard.
- Roughly 25 hours of manual effort gone every month, close to 300 hours over a year.
- The closing no longer waits for whoever is in the office with the codes.
- Every file is named and stored under a single rule. It feeds the robot that reconciles the bank accounts that runs next, and that robot could not work without it.
- A new bank account takes one configuration row, not developer hours.
- An engine the firm can reuse. The same 50+ activities can automate any other portal or web app the firm relies on.
What teams usually overlook
Banks redesign their portals with no warning. Without monitoring and a maintenance plan, a robot just stops, and no one finds out until closing day. Both are part of what we build from the start.
Built with
The platforms and tools this engagement runs on.
More case studies
Similar problems, measured the same way.

Accounting practice · Bulgaria · 10-15 people, bookkeeping for 100+ client companies
Bank Statements That Reconcile and Post Themselves
- of transactions reconciled and posted automatically
- ~90%
- of transactions reconciled and posted automatically
- statement formats from Bulgarian banks
- 5
- statement formats from Bulgarian banks

Bulgarian accounting practice · 10-15 people · bookkeeping for 100+ companies
AI That Reads and Posts Accounting Invoices
- of documents go through uncorrected
- 97%
- of documents go through uncorrected
- less data entry every year
- 576 h
- less data entry every year

Accounting and advisory practice · Bulgaria · major clients in pharma, healthcare and R&D, some US-listed
On-Premise RPA for Bank Statement Entry
- working days returned each month
- ~9
- working days returned each month
- statement lines keyed in by the robot
- 200-300
- statement lines keyed in by the robot


