FlowParse
Tool 13 August 2026 15 min read

Practice income reconciliation

The booking system says what a practice billed. The bank says what actually arrived. Between those two figures sits every contractual write-off, denial, and patient balance a practice manager eventually has to explain — read directly from the statements and remittances, not estimated from memory.

FlowParse
flowparse.io
flowparse.iono sound needed
0:00 / 0:00

Two figures, rarely equal

Every practice has both numbers close at hand. The billed total sits in the practice management system, added up automatically as claims and invoices go out. The banked total sits in the account, growing as deposits actually clear. Nobody in the practice would claim the two are the same figure — and yet very few practices can say, with a sourced number rather than a feeling, exactly how large the gap between them currently is.

That gap is not a mistake. Contractual write-offs, claim denials, partial payments and ordinary timing lag all open it, every single billing cycle, for reasons that are individually mundane and collectively significant. This page is about closing that gap with a number, not a guess — reading the bank statements and remittance documents directly, and matching them against what was billed.

Why the gap exists in the first place

A claim goes out for the full billed rate. What comes back is rarely that number, for reasons that are entirely ordinary in healthcare billing rather than signs of anything wrong.

Contractual adjustment

The payer's contracted rate is lower than the billed rate — the difference is a write-off, not an error, but it still has to be accounted for.

Partial payment

The payer covers part of the claim, leaving a patient responsibility or a secondary-payer balance still outstanding.

Denial

The claim is rejected outright, for a coding issue, a coverage question, or missing documentation — and the expected deposit simply never arrives.

Timing lag

A claim billed this month is often paid weeks or months later, so a snapshot of any single period shows plenty of billed amounts with no deposit yet — not necessarily a problem, just not yet resolved.

None of the four is avoidable, and none should be. The problem is not that a gap exists — it is that most practices only find out how large it has become when someone finally sits down to compare the two totals by hand, usually months after the fact, once the gap has had time to grow quietly.

FlowParse
flowparse.io

The three documents involved

DocumentShows
Bank statementWhat actually landed in the account — the ground truth for cash, regardless of what was billed
Remittance adviceHow a specific payer applied a payment — contractual adjustment, patient responsibility, denial reason, per claim
Billing recordWhat was claimed or invoiced — the starting figure the other two are measured against

Each document alone tells only part of the story. The bank statement shows the deposit but not what it was for. The remittance explains a specific payment but has no view of the account balance around it. The billing record shows intent but not outcome. Reconciliation is the act of reading all three and lining them up — the deposit, the remittance line that explains it, and the claim it was meant to settle.

FlowParse
flowparse.io

What gets read from each document

Every deposit's date, amount and description from the bank statement, exactly as printed.

Every payment line on a remittance advice — claim reference, billed amount, allowed amount, adjustment, patient responsibility, paid amount.

Patient and claim identifiers, wherever the document states them, so a specific line can be traced back to a specific billed claim.

The payer name and the account, so amounts from different payers landing in the same account never blur together.

Every line is read, not just the ones that look reconcilable at a glance — deciding which deposits match which claims is a matching step done afterward, on a complete table, rather than a judgment made while reading the document.

FlowParse
flowparse.io

What does not get found

Why a claim was denied. The denial code is on the remittance if the payer included one; the underlying cause is a question for the payer or the biller.

Whether a contracted rate was applied correctly. That needs the payer contract, not just the remittance.

A payment that has not been deposited yet. The reconciliation reflects what has actually cleared the bank, not what is in transit.

Coding or documentation errors on the original claim. Those are billing questions, not something visible in a bank statement or remittance.

FlowParse
flowparse.io

One week, one payer

A single payer, one week of remittances, twelve claims — the pattern that repeats at every scale.

OutcomeClaimsAmount
Paid in full at contracted rate84,220.00
Paid with contractual adjustment2610.00
Patient responsibility remaining1180.00
Denied1340.00

Twelve claims, four outcomes, all readable directly from the remittance that came in that week — the one denial is the line worth acting on, since it is the only outcome in the table that represents money genuinely at risk rather than money accounted for, even if not yet fully collected.

FlowParse
flowparse.io

Multiple payers, one account

A single operating account almost never receives money from a single source. Insurer payments from several payers, patient card payments through a processor, and the occasional direct patient check all land in the same account, on the same statement, often within the same day.

Reading the account without separating by payer produces a total that grows or shrinks without explanation. Reading it with each deposit tagged to the payer or source it came from — using the remittance where one exists, the payout description where it does not — turns the same account into a breakdown that shows exactly which payer is running behind and by how much.

FlowParse
flowparse.io

A realistic weekly routine

1

Gather the week's remittances and statement

Every payer that paid this week, plus the bank statement covering the same period.

2

Read every line

Claim reference, billed amount, adjustment, paid amount — from each remittance, not just the summary total.

3

Match deposits to remittances

Confirm each bank deposit is explained by a remittance total, so nothing lands unexplained.

4

Flag denials and unmatched claims

Anything billed with no corresponding payment this cycle, surfaced for follow-up rather than lost in the total.

5

Total by payer

A running figure per payer, not just a single blended account balance.

6

Compare against last week

A payer whose collections suddenly drop is usually the first sign of a contract or claims issue worth a call.

FlowParse
flowparse.io

The cost of doing it by hand

For a practice handling a few hundred claims a month across half a dozen payers, manually cross-referencing remittances against bank deposits commonly takes several hours a week — more whenever a payer's remittance format changes without warning.

ApproachTypical time per weekWhere it goes wrong
Fully manual3-6 hoursDenials sit unnoticed until someone happens to look
Spreadsheet template, manual entry2-4 hoursStill relies on someone reading each remittance correctly
Document reader plus a templateUnder an hourRequires the payer list and template set up once first

The hours saved are real, but the larger cost of doing this by hand is what a denial sitting unnoticed for two months actually costs — many payers set a filing deadline for a resubmission or appeal, and a denial found on week one has time to be corrected in a way a denial found on week eight often does not.

FlowParse
flowparse.io

What changes

Denials found within days, not months

A claim with no matching deposit is visible the same week it should have been paid, while a resubmission or appeal is still possible.

A payer-by-payer view

One blended account balance becomes a breakdown of exactly which payer is running behind.

A sourced number for the gap

Billed minus banked becomes a specific figure, traceable to the claims and deposits behind it, not a general impression.

Time back for the actual practice

The reading work shrinks from hours to minutes, freeing time for patients and follow-up calls that need a person.

Scenario: the silent underpayment

A payer quietly starts applying a lower contracted rate than the practice's agreement specifies — not a denial, not a rejected claim, just a payment that is consistently a little smaller than expected on a category of visits that used to pay in full.

Read one remittance at a time, this is nearly invisible — the payment looks plausible on its own, and nothing about a single underpaid claim stands out enough to investigate. Read across a month of remittances from the same payer, the pattern is a visible, repeated gap between the billed rate and the paid rate on the same procedure code, appearing consistently rather than once.

Because every remittance line is read and kept, not just the week's total, spotting that pattern is a matter of grouping by procedure code and payer — exactly the kind of comparison that a single manually-checked remittance can never surface on its own.

FlowParse
flowparse.io

Scenario: the timing lag that looks like a shortfall

A practice manager compares this month's billed total against this month's bank deposits and finds a large gap — a number that looks alarming until the timing is accounted for. A meaningful share of what was billed this month will not be paid until next month or the month after, simply because that is how long the payer's claims cycle takes.

Without a claim-level view, that lag is indistinguishable from an actual collections problem — both produce the same headline gap between billed and banked. With claim-level matching, the same gap breaks down into claims still genuinely in the payer's normal cycle, and claims old enough that the lag is no longer a reasonable explanation.

That distinction is the entire point of tracking claims individually rather than only comparing monthly totals — a healthy pipeline and a real problem produce the same top-line number, and only the underlying detail tells them apart.

FlowParse
flowparse.io

Why the routine differs slightly by specialty

A high-volume primary care practice and a lower-volume specialty practice run the same underlying reconciliation, but the balance of effort within it shifts. Primary care generates more claims of smaller individual value, so the routine leans harder on the automated matching step simply to keep pace with volume — a single denial is rarely worth much on its own, and the value comes from catching the pattern across many small claims.

A specialty practice with fewer, higher-value claims can afford — and often benefits from — a closer individual look at each remittance, since a single denied or underpaid claim represents a meaningfully larger sum. The nine-step method stays the same either way; what changes is how much weight falls on step six, comparing against last week, versus a slower, closer read of each individual claim.

FlowParse
flowparse.io

Neither pattern changes what gets read from a remittance or how a deposit gets matched — only how much of the resulting table warrants a second look before the week is considered closed. A practice that grows to add a second specialty often finds it worth revisiting that balance explicitly, rather than assuming the original weighting still fits a mix of claims that has since changed.

Revisiting it costs little — a short conversation about which payers and which claim types actually deserve the closer look, updated once and then left alone until the mix shifts again, rather than a decision anyone has to keep re-litigating from scratch every single quarter, or worse, never actually revisiting at all until something — a missed denial, a slow payer, a frustrated staff member — forces the question sooner or later, usually at a moment less convenient than a calm, deliberate review would have been.

What this does not replace

Not a billing service

It reads what the bank and remittances state after a claim has been processed. Submitting, coding, and correcting claims remains billing work.

Not a denial-management system

It surfaces a denial the same week the remittance arrives. Appealing it, resubmitting it, or calling the payer is still a human task.

Not a practice management system

This is the reconciliation layer, not scheduling, charting, or the claims pipeline itself.

Not a rate-validation service

It reads what was paid, not what the contract says should have been paid — comparing the two against a payer contract is a separate check.

For the mechanics of matching individual remittance lines to claims, see payer remittance matching. For turning this into a repeatable weekly habit, see how to reconcile insurer payments.

FlowParse
flowparse.io

Frequently asked questions

See your own gap this week

Read a week of remittances and the bank statement that covers it, and compare the two totals honestly.

Keep reading