5 Revenue Problems Hiding in Your Billing Data Right Now
Most practices look at total collections and assume everything is fine. But the billing data tells a more specific story — and it almost always reveals money that was earned, billed, and never collected.
Total collections is a lagging indicator. By the time the number looks bad, the problem has been happening for months. The practices that catch revenue leaks early are the ones looking at the details — not just the total.
Here are five problems we find in almost every practice's billing data when we do a first look. None of them trigger obvious alerts. All of them cost real money.
1. One Payer Is Quietly Underpaying You
Every payer you're contracted with has a fee schedule — a specific reimbursement rate for each CPT code. When a payer pays you less than the contracted rate, it doesn't come back as a denial. It just pays less. No alert, no denial code, no flag.
Payer underpayments are disturbingly common. Contracted rates don't automatically sync to what actually gets paid on every claim. Fee schedule updates, plan-level variations, and simple payer processing errors all result in reimbursements below contract.
What it looks like in your data: You'll see it when you compare what you were paid per unit of a specific CPT code across payers. If one payer is consistently paying $42 for a code you're contracted at $58, something is wrong — and the difference compounds across every claim that code appears on.
Why practices miss it: Because total collections look reasonable. A practice seeing $200K in monthly collections doesn't think to check whether $187K is actually correct — until a billing analyst starts comparing paid amounts to contracted rates line by line.
What to do: Pull a payer-level reimbursement comparison for your top 10–15 CPT codes. Compare what each payer actually paid versus what your contract says they should pay. Even a $5 per-unit variance across 500 monthly claims is $2,500/month — $30,000 per year.
2. You Have a Cluster of Claims at 91–120 Days That Nobody Is Working
AR aging buckets are not self-correcting. Claims don't pay themselves because they've been waiting long enough.
The 91–120 day bucket is where revenue starts to die. Most payers have timely filing limits between 90 and 180 days from the date of service. Claims sitting in that range are approaching or past the threshold where they become uncollectable regardless of whether they were valid claims.
What it looks like in your data: More than 5% of your total outstanding AR in the 90+ day buckets is a warning sign. More than 10% is a problem that has been building for months.
Why practices miss it: Because aging reports are generated but not actively worked. Someone reviews the total, confirms the 0–30 bucket looks normal, and moves on. The 90+ bucket grows quietly until it's too large to recover.
What to do: Run an aging report filtered to 91 days and older. For every claim over $200, assign it to someone who will actually call the payer or check the portal this week. Set a hard rule that no claim reaches 60 days without a follow-up touch.
3. Your Denial Rate Is Higher Than You Think — Because You're Not Counting the Right Way
Many practices calculate their denial rate as denied claims divided by total claims submitted. That number looks fine — maybe 4–6%. But that's not the right calculation.
The more revealing metric is denial rate by dollar value and denial rate by payer. When you look at it that way, you might find that one payer accounts for 40% of your total denied dollars, or that one CPT code has a 30% denial rate that's been quietly absorbing revenue for six months.
What it looks like in your data: A denial report sorted by payer and CPT code, showing denial rates and total denied dollars — not just counts.
Why practices miss it: Because summary-level denial tracking hides the distribution. A 5% denial rate sounds acceptable until you find out that $80K of your $100K in monthly denials comes from one payer denying one procedure code.
What to do: Pull your denials for the last 90 days grouped by denial reason code, payer, and CPT code. Sort by total denied dollars, not count. The top three rows of that report almost always point to a fixable, systematic billing problem — not random bad luck.
4. You're Writing Off Claims That Were Actually Appealable
When a claim gets denied, it either gets reworked, appealed, or written off. The write-off is the fastest path — and the most expensive one if it's used on claims that should have been appealed.
"Contractual adjustment" and "timely filing" denials are often legitimate write-offs. "Medical necessity," "authorization required," and "coding error" denials frequently are not — they're appealable with the right documentation.
What it looks like in your data: A high write-off rate relative to your denial volume, especially on denial reason codes that have strong appeal success rates. If you're writing off medical necessity denials without attempting an appeal, you're leaving money on the table.
Why practices miss it: Because denials get categorized and batched, and write-offs happen at the end of the process without anyone reviewing whether an appeal was viable. In high-volume billing operations, the path of least resistance is the adjustment.
What to do: For the last 60 days of write-offs, pull the associated denial reason codes. Any write-offs coded as medical necessity, authorization issues, or clinical denials warrant a second look. Payer overturn rates on appealed clinical denials typically run 40–60% with the right documentation.
5. A Service You're Regularly Performing Isn't Being Billed
This one is uncomfortable to acknowledge, but it's real: there are services being performed in most practices that are either not billed at all or billed at lower complexity than was documented.
The most common examples:
- Chronic Care Management (CCM) performed but never billed — especially in primary care and internal medicine
- Telehealth visits billed at lower E/M levels than the documentation supports
- Prolonged service add-on codes (99417) not captured when visit time exceeded the threshold
- Transitional Care Management (TCM) never set up despite regular post-hospitalization follow-up
- Annual Wellness Visit (G0439) missed on Medicare patient visits that qualified
What it looks like in your data: The absence of codes you'd expect to see given your patient population. If you have 200 Medicare patients with multiple chronic conditions and zero CCM claims in 12 months, something is missing. If your average E/M level for established patients is 99213 across the board, and your documentation routinely supports 99214, that's systematic undercoding.
Why practices miss it: Because missed charges don't show up anywhere. Denials show up in reports. Underpayments show up (faintly) in reimbursement comparisons. Unbilled services are invisible — they're defined by what's not there.
What to do: Start with your patient population and work backward. What services are you providing that you're not billing? What codes should appear regularly in your CPT mix given your specialty and patient demographics, that you rarely or never see? That gap is your opportunity.
Want us to pull your data and find out which of these five problems apply to your practice? Get a free revenue cycle assessment — we'll show you exactly what's in your numbers.
Need help with your revenue cycle?
Get a free assessment from our team — we'll show you exactly where you're leaving money on the table.
Get a Free Assessment