How to Read an EOB and Catch Insurance Underpayments: The 6-Line Audit That Finds the Money You're Writing Off

You read an explanation of benefits by checking six fields in order: billed amount, allowed amount, adjustment (CARC) codes, paid amount, patient responsibility, and the check or EFT total.

You catch underpayments by comparing the allowed amount on every line against your contracted fee schedule for that CPT code. When the two don't match, the payer underpaid you.

That's the mechanic. The part nobody tells you is that most underpayments don't look like errors - they look like normal contractual adjustments. A CO-45 write-off is invisible by design.

Your EHR posts it, your balance zeroes out, and the claim disappears into "paid."

So the money you lose isn't sitting in your aging report where you'd eventually find it.

It's already been written off with your own hand.

Below is the audit that surfaces it, the five underpayment patterns I see most in behavioral health, and the exact appeal sequence that gets the money back.

What is an explanation of benefits for a therapist, and how is it different from an ERA?

An explanation of benefits is the payer's line-by-line accounting of how it adjudicated a claim: what you billed, what the plan allows, what it paid, and what the client owes. It is not a bill and not a payment.

Here's the distinction that trips up new practice owners. The EOB is the version the payer mails to your client. The version that comes to you is technically a remittance advice - a paper RA, or an electronic remittance advice (ERA) delivered as an X12 835 file straight into your EHR: same adjudication data, different recipient.

That matters operationally. If you only ever look at the payment summary inside SimplePractice or TheraNest, you're seeing your EHR's interpretation of the 835 file, not the raw remittance.

Clients call you about the EOB in their mailbox.

You're troubleshooting from the ERA. When those two describe the same session differently, the client's copy is usually the one causing the panic, and you need both open to answer.

Both documents carry the same standardized adjustment codes. Claim Adjustment Reason Codes (CARCs) and Remittance Advice Remark Codes (RARCs) are maintained by the ANSI-accredited X12 committee and required under HIPAA for electronic transactions, which is why a CO-45 from Aetna means exactly what a CO-45 from Blue Cross means.

Note: code list versions update three times per year

How to read an explanation of benefits line by line

Work the six fields in this order. Every service line, every time.

Step 1: Note the Billed Amount.

What you charged. If this is wrong, everything downstream is wrong - check that your fee schedule in your EHR matches what you intended to bill.

Step 2: Note the Allowed Amount

The maximum the plan will recognize for that CPT code under your contract. This is the single most important number on the page, and the one almost nobody verifies.

Step 3: Note the Adjustment codes

The CARC and group code pairing. CO means contractual obligation (you write it off). PR means patient responsibility (you bill the client). OA means other adjustment (read it carefully). The group code, not the number, decides who owes the money.

Step 4: Note The Paid amount

What the payer sent you. It should equal the allowed amount minus deductible, copay, and coinsurance.

Step 5: Note The Patient responsibility

PR-1 is deductible, PR-2 is coinsurance, PR-3 is copay. Add these to the paid amount. They should reconcile to the allowed amount.

Step 6: Note the Check or EFT total

Reconcile the remittance total against the deposit that actually hit your bank. Payers sometimes recoup prior overpayments inside a current check without a separate notice, and if you skip this step you'll never find out why the deposit is short.

Note: If Steps 4 and 5 don't add up to Step 2, stop and investigate. That gap is either a math error or a rule you don't know about yet.

How do you spot an insurance underpayment on an EOB?

You spot it by having something to compare the allowed amount to. Without your contracted rate in front of you, every payment looks correct.

These are the five patterns I see most often in behavioral health:

The stale fee schedule

The payer processed your claim against last year's rate, or against a rate from before your contract amendment. This is the most common underpayment and the easiest to win, because your contract is the whole argument.

Silent downcoding

You billed 90837 (53+ minutes) and the payer paid it at the 90834 (38–52 minutes) rate without denying anything. The line still reads "paid." Check the procedure code on the remittance against the code you submitted — they aren't always the same.

Wrong license-level rate

A payer loads an LPC or LMFT at the associate or pre-licensed rate, or pays a group's clinician at a rate tied to the wrong NPI. This one repeats on every claim until you catch it, which is why a single audit can uncover months of loss.

Duplicate patient responsibility

The payer applies a deductible that the client already satisfied, or applies both a copay and coinsurance to the same session. You collect from the client, the client disputes it, and you eat the difference.

Bundling that shouldn't apply

CO-97 says the benefit is included in payment for another service. On an interactive complexity add-on (90785) or a crisis code, that bundling is frequently wrong for behavioral health.

Across the behavioral health practices HireGaynell supports, about 1 in 14 paid service lines pays below the contracted rate, and the first full 90-day EOB audit we run for a new solo-practice client recovers an average of $2,380.

That money was never in dispute. It was just never checked.

The claims that never paid at all are a separate problem with its own cadence - that's the aging AR follow-up system I run weekly. Underpayments hide in the opposite place: in claims your books already call closed.

What does CO-45 mean on a therapy EOB, and when is it actually wrong?

CO-45 means the charge exceeds the fee schedule, maximum allowable, or contracted fee arrangement. The CO group code assigns that difference to you as a contractual write-off, and you cannot bill the client for it - doing so is balance billing and a contract violation.

So CO-45 is normal. It appears on nearly every in-network claim you file.

It's wrong when the allowed amount it's calculated from is wrong. CO-45 tells you the payer applied a fee schedule. It never tells you whether it applied your fee schedule.

That's the trap: the code looks like a settled contractual fact, so practices post it without a second glance, and a rate-loading error can run for a year before anyone notices.

Pull your executed fee schedule for your top eight CPT codes - 90791, 90832, 90834, 90837, 90846, 90847, 90853, 90785 - and keep it beside you when you post payments.

If your payer contract has an annual escalator or you renegotiated, confirm the effective date the payer has on file, not the one in your email.

For Medicare specifically, you can check the locality-adjusted allowed amount yourself with the CMS Physician Fee Schedule Look-Up Tool before you ever call.

That's also the fastest sanity check on whether the 75% payment rate applies correctly, which matters most for clinicians who went through Medicare enrollment as LPCs and LMFTs.

How do you appeal an underpaid claim?

An underpayment appeal is a different animal from a denial appeal. You aren't arguing medical necessity. You're arguing arithmetic against a contract, which is a much easier argument to win.

Step 1: Document the gap

Print the remittance line and your contracted rate for that CPT code side by side. Note the date of service, claim number, member ID, and the exact dollar difference.

Step 2: Group by pattern

If the same rate error hits 40 claims, don't file 40 appeals. Build one provider-relations inquiry listing every affected claim. Rate-loading errors get fixed at the configuration level and reprocessed in bulk.

Step 3: Call provider relations, not member services

Member services can't see your contract. Ask specifically: "What fee schedule version and effective date processed this claim?" Log the date, time, representative name, and reference number.

Step 4: Submit in writing within the window

For Original Medicare, you have 120 days from receipt of the initial determination to request a redetermination, and CMS presumes you received the notice five calendar days after its date (CMS, First Level of Appeal). Commercial payer reconsideration windows are shorter and vary by contract - most land between 90 and 180 days.

Step 5: Request reprocessing, not reconsideration, where the payer allows it

Many commercial payers resolve rate errors through a claim adjustment request that skips the formal appeals queue entirely and turns around in 30 to 45 days instead of 60 to 90.

Step 6: Track to payment

An appeal isn't resolved when you file it. Put a 30-day tickler on every one and reconcile the corrected remittance when it arrives.

When a claim was denied outright rather than underpaid, the evidence and the sequence change - I've broken that path down separately in the guide to appealing a denied insurance claim.

How often should you audit EOBs in a private practice?

Spot-check five claims per payer every month. Run a full audit quarterly. That cadence costs a solo practice about 90 minutes a quarter and catches rate errors within one billing cycle instead of one fiscal year.

Prioritize by volume, not by dollar size. A $9 underpayment on your highest-volume code across 300 sessions outruns a $180 error you'll only ever see once.

Prevention does more than recovery here. Accurate benefit verification kills the duplicate-deductible and wrong-copay categories before a claim ever goes out, which is why my insurance benefit verification checklist captures deductible status and license-specific network status rather than just confirming the policy is active.

Keeping your CAQH ProView profile attested and your provider enrollment records current prevents the credentialing-side rate errors that show up months later as quiet underpayments.

Who should actually do this work?

Not you, at 9 p.m., between notes.

EOB auditing is pattern-recognition work that rewards repetition.

Whoever does it needs to know your contracted rates, read CARC and RARC pairings fluently, and hold payer conversations without escalating.

That's a trained behavioral health operations role, whether it sits with an in-house biller or an outsourced specialist working under a business associate agreement. If you're weighing that decision, the mental health virtual assistant guide breaks down what the role covers and what it costs.

What you should never do is delegate posting without delegating verification. A biller who posts CO-45 adjustments without a fee schedule in hand is faster at losing your money.

Conclusion

In my experience running billing for behavioral health practices, the most expensive habit I see isn't chasing the wrong denials - it's trusting the allowed amount.

Practice owners fight hard for claims that pay zero and accept without question the ones that pay something, and the underpayments are always larger in aggregate than the denials.

Pull your contracted fee schedule, put it next to your last 20 remittances, and check six numbers. You will find money there, and you will find it every quarter until you fix the configuration causing it.

If your EOBs are stacking up unread and you suspect you've been writing off revenue that was contractually yours, that's precisely the work HireGaynell handles inside billing and administrative support for behavioral health practices - fee schedule audits, remittance posting, appeals, and payer follow-up, run on a fixed cadence so it stops depending on your evenings.

Start with a free consultation and bring one payer's last 90 days.

Previous
Previous

CPT Codes Every Therapy Practice Should Know in 2026: 90837 vs 90834, Add-Ons, and the Modifiers That Sink Claims

Next
Next

Good Faith Estimates for Therapists: The 6-Step Self-Pay Workflow That Survives a $400 Dispute (2026)