A practice's money, in columns
A medical practice's bank account is unusually messy for its size. Money arrives from insurers in batched deposits that bear no resemblance to the individual claims behind them, from card terminals in daily settlements net of fees, and from patients directly in small amounts. Going out are supplies, drugs and consumables, equipment finance, indemnity insurance, rent, and payroll for clinical and admin staff.
All of it is printed in a PDF that no spreadsheet can read. FlowParse converts the statement with AI — every transaction with its date, description, signed amount and running balance — and checks the arithmetic against the balance the bank printed, so nothing is silently missing before you start.
What you get is the thing practice bookkeeping actually needs: a categorised, sortable table of what the practice earned, what it spent, and where the money came from — from any bank, with no template to configure.
The batched insurer deposit problem
The single hardest thing about practice accounting is that an insurer does not pay you per patient. It pays you a lump sum covering many claims at once, often with adjustments, denials and clawbacks netted off inside it — and the bank statement shows only the total that landed.
That means the deposit in your account almost never equals what your practice management system says you billed. Reconciling the two is the work, and it is impossible while the deposits are trapped in a PDF and the claims live in another system.
Converting the statement gives you one half of that reconciliation as clean data: every payer deposit, dated, with the payer identifiable from the description and the amount as a real number. Sitting next to your remittance advice, the gap between billed and banked stops being a mystery and becomes a list of differences you can actually work through.
What FlowParse pulls from a practice statement
Extraction is by meaning rather than by template, so it works with whichever bank the practice uses: every transaction's date and value date, the full description including any payer or terminal reference, the signed amount, the running balance, and the counterparty where the statement names one.
Long descriptions matter here more than in most businesses, because that is where the payer name, the remittance reference and the terminal identifier hide. Descriptions that wrap across multiple lines are joined back into a single field rather than being truncated, so the reference you need to match a deposit is still there.
Every amount exports as a typed number with the correct sign, so income and costs total in one formula rather than needing to be cleaned first.
How to convert a practice bank statement
Upload the statements
Drop in one or many PDF statements from any bank — digital or scanned.
Let AI extract them
Every transaction is read with its date, description, signed amount and balance.
Check the balance
Opening balance plus transactions is checked against the closing balance the bank printed.
Export and categorise
Download clean Excel or CSV — or an accounting-ready file for QuickBooks or Xero.
Card terminals, fees and the daily settlement
Patient card payments do not reach the account one by one. The terminal provider batches them and settles daily or weekly, usually net of the processing fee — so the amount that lands is smaller than the amount patients paid, and the difference is a cost that never appears as its own transaction.
That fee is quietly one of the more significant overheads in a busy practice, and because it is netted off rather than charged separately, plenty of practices never total it. As structured rows, the settlements are a column, and comparing them to the takings your system recorded is what reveals the real cost of card acceptance.
Where the provider does charge fees separately, those land as their own transactions and can be categorised straight into a merchant-fees line rather than being lost in the noise.
Supplies, drugs, equipment and indemnity
Practice costs are distinctive and worth separating properly. Consumables and drugs are a recurring supply cost that moves with patient volume. Equipment is typically financed, which means the payment is part interest and part capital repayment and should not be expensed whole. Professional indemnity insurance is a large annual or monthly commitment that sits in a category of its own.
In a structured statement each of those becomes a filter rather than a guess. Total spend by supplier, by month, and per category is a pivot table — and the cost per patient or per session, which is the number that actually tells you whether the practice is working, becomes computable.
Categorising transactions once and reusing the rules month after month turns this from an exercise into a routine.
Clinical and admin payroll
Staff cost is the largest line in most practices, and it is rarely one line. Salaried admin staff, employed nurses, sessional or locum clinicians and associates on a percentage share all leave the account differently, and lumping them into a single wages figure hides the thing you most need to see.
With payments as structured rows, staff cost separates by recipient and by pattern. A locum paid irregularly looks nothing like a salaried nurse paid monthly, and once they are distinguishable, cost per session and cost per clinician are numbers you can produce rather than estimate.
That is also the basis of the check nobody enjoys but everybody needs: that what left the bank matches what payroll said it would.
Reconciling the bank against the practice system
Every practice runs a practice management or billing system, and that system's view of what was earned rarely matches the bank's view of what was received. Timing accounts for some of it — claims paid weeks later — and adjustments, denials and fees account for the rest.
FlowParse does not replace that system and does not connect to it. What it does is turn the bank's side into data of the same quality, so the comparison can happen at all. Reconciliation between billed and banked stops being a manual read-through and becomes a matching exercise on two structured lists.
The result is that a shortfall gets a name: this payer, this batch, this amount, this month — rather than a vague sense that collections are behind.
Patient privacy: what this tool is and is not
This needs saying plainly. FlowParse processes bank statements — financial records showing money in and out of the practice account. It is not a clinical system, it does not claim HIPAA compliance, and it does not sign a business associate agreement. Do not upload clinical records, patient charts or anything containing protected health information.
A bank statement will name payers, terminals and suppliers, and it may name an individual who paid you directly. That is financial data, and it is handled as such: uploads run over TLS, processing is EU-hosted, the original PDF is deleted immediately after processing, and documents are never used to train AI models.
If your compliance position requires a signed BAA for any document you send to a vendor, this tool is not the right place for that document — and we would rather tell you that than let you assume otherwise.
Cash flow when your payers are slow
A practice can be busy, profitable and short of cash at the same time, because the work happens now and the insurer pays later. That gap is a cash-flow problem, and it is invisible in a profit figure.
Structured bank data makes the real rhythm visible: money in by week, money out by week, and the balance that results. Once payer deposits and outgoing costs are columns, you can see how long the account actually funds the practice between payment runs.
That is the number that determines whether an equipment purchase is affordable this quarter or next — and it comes from the bank, which is the only source that knows what actually happened.
A year of statements in one pass
Practice accounting tends to happen in a rush before a year end or a tax deadline, which is exactly when converting twelve PDFs one at a time is least appealing.
Batch processing takes up to 100 statements at once and merges them into a single sheet, with duplicate detection for overlapping periods and a source-file reference on every row — so a full year, or several accounts, arrives as one sortable dataset.
Practices running more than one account — a main account, a deposit account, a partner drawings account — get them consolidated into the same table rather than compared by eye.
What your accountant actually wants
Accountants who work with practices ask for the same thing every year: the bank statements, as data, categorised, with nothing missing. What they usually get is a folder of PDFs and a spreadsheet somebody typed in a hurry.
Handing over a converted, balance-checked, categorised export changes the conversation. The accountant spends their time on the judgement calls — how to treat the equipment finance, what is capital and what is repair — instead of on data entry you are paying professional rates for.
It also shortens the year end, because the questions that normally arrive as a long list of queries have already been answered by the data.
Straight into QuickBooks or Xero
Where the practice runs accounting software, the converted statement can go straight in. FlowParse produces real bank-feed files — QBO, QFX and OFX — with a transaction ID per row, so a re-import does not double-post, and a Xero-ready CSV with the columns Xero expects.
That matters most for the accounts a bank feed does not cover: an older account, a second bank, a period before the practice was set up on software. Those are exactly the gaps that otherwise get typed in by hand.
Scanned and posted statements too
Plenty of practices still receive posted statements, and older years often exist only as scans in a filing cabinet. Those documents count just as much when a tax return or a valuation depends on them.
OCR runs first on scanned and photographed statements, then the AI structures the recognised text and flags low-confidence figures for a quick check — so a posted statement becomes the same clean rows as a downloaded PDF.
Numbers you can build accounts on
Around 98% field-level accuracy on standard layouts, with every low-confidence figure highlighted in an editable preview before anything exports.
More importantly, the statement proves itself. Opening balance plus every transaction should equal the closing balance the bank printed, and FlowParse checks it on every statement. A missing or duplicated row is caught arithmetically rather than being discovered months later when the accounts will not tie out. That is what validation means here: evidence, not a confident-looking table.
Denials, adjustments and clawbacks
Insurers do not only pay. They deny, they adjust downwards, and they claw back money already paid when a claim is reviewed months later. A clawback typically arrives not as a demand for payment but as a deduction inside the next deposit — which means the practice pays it without anyone ever consciously agreeing to.
That is the mechanism by which real money leaves a practice unnoticed. The deposit was simply smaller than expected, and unless someone was expecting a specific number, nothing looks wrong.
Structured deposits are what make that expectation checkable. When each payer's deposits are a dated series with amounts, a batch that lands materially below the pattern is visible immediately, and can be traced back to the remittance that explains it — while there is still time to appeal.
Groups, multiple sites and shared costs
As practices consolidate into groups, the finances get harder rather than easier. Each site has its own income and its own local costs, while central costs — management, insurance, group software — sit above them and have to be allocated somehow.
Bank data is where the truth about that lives, and it is usually spread across several accounts. Converting them all into one dataset with a source-file column per account gives you site-level income and cost side by side, and central spend as its own visible layer.
That is what makes the uncomfortable comparison possible: which site actually carries the group, and which one is being subsidised by the others.
Who this is for
Practice managers who reconcile payer deposits and would like the bank side to be data, bookkeepers and accountants handling several practices, and clinicians running a private practice who would rather not spend an evening a month typing a statement into a spreadsheet.
If the practice's numbers currently live in a folder of PDFs and a system that disagrees with them, this is the step that makes the two comparable.
Convert your practice's bank statements
Upload a statement and get clean, categorised, balance-checked rows — payer deposits, card settlements, supplies and payroll, ready for your books.
