One reading process, every clinic's bank account
A multi-location dental or veterinary group doesn't have one bank relationship — it has as many as it has locations, often more, since a single clinic can carry an operating account, a payroll account and a merchant deposit account all at once. Every one of those accounts is at whatever bank the clinic happened to use before joining the platform, in whatever statement format that bank produces.
This tool reads every one of those statements the same way, regardless of bank or format, and turns them into the structured, location-tagged transaction data your portfolio reporting depends on — whether that's a monthly roll-up, a board reporting package, or an add-on acquisition underwriting.
Think of it as the layer that sits between raw, disorganized bank statements and everything else your platform needs from that data — the roll-up, the add-back schedule, the intercompany elimination. All of those downstream steps depend on having the underlying transaction data gathered and structured consistently first.
Why this matters now
As DSO and VSO platforms keep acquiring, the number of distinct bank relationships in a single portfolio only grows — every new location brings its own bank, its own account structure, and often its own statement layout. A reading process that only works reliably with a handful of major banks breaks down exactly where it matters most: a small community bank a founding doctor has used for twenty years, still holding the location's legacy accounts during the first several months after an acquisition closes.
This isn't a hypothetical edge case — it's the normal state of a growing platform. Between legacy accounts still transitioning after an acquisition and new accounts opened as part of the platform's standard banking setup, most active portfolios are managing meaningfully more distinct bank relationships than their location count alone would suggest.
What kinds of accounts it reads
Operating accounts
The primary clinical revenue and expense account for a location.
Payroll accounts
Separate accounts many locations use specifically for payroll disbursements.
Merchant deposit accounts
Accounts receiving card, insurance EFT, or patient financing deposits.
Some clinics maintain additional accounts beyond these three — a savings or reserve account, or a dedicated account for a specific vendor relationship. Those get read the same way as any other account, simply tagged with whatever account type best describes them, rather than requiring a fixed, closed list of categories to fit into.
What fields get extracted
| Field | Example |
|---|---|
| Transaction date, amount, description | 08/14/2026, $4,215.00, ACH deposit |
| Account number and type | Operating — ending 4471 |
| Recurring transfer pattern | Monthly transfer to MSO account |
| Statement period and running balance | 08/01/2026–08/31/2026, $61,204.18 |
These four fields cover what most portfolio reporting workflows need as a baseline. Beyond them, the reading also captures secondary detail present on the statement itself — a check number, a wire reference, or a memo line — which often turns out to matter when tracing a specific transaction back to its source during a later review.
How it works
Upload your clinic statements
Any bank, any account type, in any combination.
Automatic extraction
Each statement read according to its own printed structure.
Confidence review
Low-confidence fields flagged for manual review.
Download
Excel, CSV or JSON, tagged by location and account type.
Most uploads move through all four steps in a couple of minutes per statement, with the confidence review step being the only one that genuinely needs a person's attention.
A month of mixed clinic statements, processed
A regional veterinary group uploads a month's worth of statements from nine clinics: five community banks, two regional banks, and two major national banks. The group's controller previously spent a full day each month manually keying figures from each of these into a shared spreadsheet before the roll-up could even begin.
| Bank type | Statements | Result |
|---|---|---|
| Community banks | 13 | All fields read with high confidence |
| Regional banks | 5 | One low-resolution scan flagged for review |
| National banks | 4 | All fields read with high confidence |
All twenty-two statements ended up in the same structured output, tagged by clinic and account type, regardless of which bank issued the original document — the group's finance team never had to build or maintain a separate template for any one bank's statement layout.
A portfolio-wide monthly gather, at scale
A larger dental platform with thirty-one locations runs its monthly gather across sixty-eight bank accounts — operating, payroll, and merchant deposit accounts spread across nineteen different banks, ranging from single-branch community institutions to major national chains.
| Metric | Before | With FlowParse |
|---|---|---|
| Time to gather and structure all 68 accounts | About a week of staff time | Under a day, mostly review |
| Statements requiring a manual re-key | Nearly all of them | Only the handful flagged for low confidence |
| Templates maintained per bank | None consistently maintained — mostly ad hoc | None needed — reading works from each statement's own layout |
The platform's finance team didn't need to onboard any new bank connections or maintain a growing list of format exceptions as new locations joined — the same reading process simply absorbed each new bank as it appeared in the portfolio.
What used to be a dedicated weekly task for one staff member, spread across the month as statements trickled in, became a batch upload the finance team could complete in a single sitting, freeing that person's time for the actual analysis the roll-up was meant to support.
What precision looks like across many banks
Field accuracy on a clean, machine-generated PDF statement from a major national bank typically sits near the top of the range regardless of which bank issued it. A scanned or photographed statement from a smaller institution can introduce more variability — depending on scan quality, the accuracy can be slightly lower, and that's precisely where the confidence scoring on each field earns its keep, flagging exactly the handful of fields worth a second look rather than treating the whole statement as suspect.
Across a typical portfolio mixing dozens of banks and both machine-generated and scanned documents, overall field accuracy still lands around 99% — the confidence flagging is what makes that number meaningful in practice, by directing review attention to the small share of fields that actually need it.
Precision also holds steady over time, not just across banks — a location that switches banks, or a bank that changes its statement layout in a system upgrade, doesn't require your finance team to notice and adapt, since the reading isn't tied to a specific layout in the first place.
Output formats
Excel for direct review and manual work, CSV for import into most accounting and reporting tools, and JSON for direct API integrations. All three carry the same fields, organized for whichever workflow fits your team.
You can download the same result in more than one format from a single processing run — useful when your controller wants an Excel file for review while your accounting system needs the same data as CSV, without processing the statements twice to get both.
Manual vs. automatic
| Task | Manual | With FlowParse |
|---|---|---|
| 22 clinic statements, mixed banks | Several hours of manual data entry | A few minutes, with flagged items for review |
| Distinguishing account types | Manual sorting, statement by statement | Automatic, based on each statement's structure |
| Handling an unfamiliar bank's layout | A new template built or a manual workaround | Read the same way as any other bank |
The gap widens further with each additional bank a portfolio adds — a manual process typically needs a new template or a new set of workaround rules every time an unfamiliar bank's statement shows up, while the automatic process simply reads it the same way it reads every other bank, with no incremental setup required.
From five clinics to five hundred
The same reading process works whether you're a five-location startup platform closing its first quarterly reconciliation or a national group managing several hundred locations across dozens of banks — review effort scales with the flagged exceptions, not with the raw volume of statements processed.
Common situations this handles
A newly acquired clinic that's still on its legacy bank account from before the deal closed — its statements are read the same way as any other location's, with no need to wait for the account to be migrated onto the platform's standard banking setup first. A location that switches banks partway through the year, arriving in a completely different statement layout — read without a gap in that location's data, since extraction doesn't depend on a fixed template tied to one bank. A clinic with a merchant deposit account receiving a mix of insurance EFT payments and patient financing deposits — both deposit types are read and tagged distinctly, rather than treated as one undifferentiated revenue stream.
In each case, the value isn't a special-purpose feature built for that specific situation — it's that the same general reading process handles all of them without requiring your finance team to build a workaround.
A location that only recently opened, with just one or two months of statement history, is read the same way as a location with years of history — there's no minimum volume of prior data needed before the reading process produces useful, structured output for a new practice.
Who uses this
DSO/VSO controllers
Structure every location's bank data without re-keying statements by hand.
PE sponsor finance teams
Consistent, location-tagged data behind the portfolio reporting package.
Outside accounting firms
Apply the same reading process consistently across multiple portfolio clients.
M&A and integration teams
Fold a newly acquired location's legacy statements into the roll-up from month one.
Each of these roles tends to touch clinic bank statements at a different point in the process — an integration team pulling a newly acquired location's history in its first weeks on the platform, a controller gathering the same locations' statements every month afterward, and an outside accounting firm reviewing the whole set periodically. The same reading process serves all three without requiring a different tool or a different setup for each.
Integrating this into your monthly workflow
For a platform gathering statements from dozens of clinics every month, uploading each one through the web interface manually isn't always the fastest path. The API lets you send statements directly from wherever they land — a shared inbox, a document management system, a folder your clinics upload to — and get structured, location-tagged data back automatically, without a person needing to touch every individual document.
This integration uses the exact same reading engine as the web interface, with the same confidence flagging on every field — the volume doesn't change the reliability of the result, only how the documents get in and the structured data gets out.
Most platforms start with the manual web upload while confirming fit, then move to the API once their monthly volume makes automation worthwhile — there's no need to commit to the integration path before you've seen the reading quality on your own real statements.
What this doesn't do
Doesn't consolidate the financials
Reads and structures location-level bank data; the actual consolidation and elimination entries stay with your accounting team.
Doesn't decide EBITDA add-backs
Surfaces flagged transactions for review; the judgment on what counts as an add-back is yours.
Doesn't replace your PMS or ERP
Feeds structured data into whatever system already runs your clinical and accounting operations.
This scope is deliberate: reading and structuring bank statements reliably is something that can be automated with a high degree of confidence, regardless of how many banks or locations are involved. Deciding how a platform's financials should be consolidated, and which transactions belong in an adjusted EBITDA figure, are judgment calls that depend on context — your MSA terms, your accounting policies, your specific deal structure — that stay with your controller or accounting firm, who have the full context this tool intentionally doesn't try to replace.
Security
Uploaded statements are processed encrypted and not shared with third parties. Full detail is on the security page.
Your clinic bank data is never used to train AI models or shared with third parties.
This matters more than usual for a DSO or VSO platform, since a location's bank statements often carry more than routine business transactions — owner compensation patterns, related-party arrangements, and patient financing detail that no third party outside your own finance team should have any reason to see.
