Enter your contracted rate and the allowed amount from the remittance.
A denial announces itself. It arrives with a reason code, lands in a work queue, and somebody looks at it. An underpayment does none of that. The claim pays. It appears on the remittance alongside every other paid claim, it reconciles, and nothing anywhere flags that the payer allowed 86 dollars on a code your contract prices at 94.
That is the entire problem. Underpayment detection is not a follow-up activity — there is nothing to follow up on. It only exists if somebody deliberately compares allowed amounts against the fee schedule, code by code. Most practices never do, which is why underpayments typically run for years before anyone notices, and why they are the single largest pool of quietly recoverable revenue in most practices.
The other reason they persist: a contracted rate does not drift back on its own. If the payer has the wrong fee schedule loaded, every claim for that code is underpaid every time until someone raises it. The loss is not a one-off; it is an annuity running in the payer’s favour.
This confusion costs practices real time, so it is worth being precise.
CO-45 is the contractual adjustment — the difference between what you billed and what your contract allows. If you bill 300 dollars for a code contracted at 94, CO-45 writes off 206. That is normal, expected, and appears on essentially every in-network claim. It is not a problem and it is not appealable.
An underpayment is different: the allowed amount itself is below your contracted rate. CO-45 will still appear on that claim and will look completely ordinary — it just writes off a larger amount. Nothing distinguishes the two on the remittance, which is precisely why you have to compare against the fee schedule rather than reading the adjustment codes.
Start with the pattern, not the claim. One underpaid claim is an anecdote; the same code underpaid across 40 claims is a fee schedule problem, and that is what gets fixed. Pull your highest-volume codes, compare the allowed amounts on recent remittances against your contract, and look for codes where the variance is consistent. Consistency is the signal — random variance is usually modifier or MPPR handling, while a fixed gap on every claim is a loaded rate.
Then dispute it as a payment dispute rather than an appeal. You are not arguing about medical necessity or coding; you are asserting that the payer did not honour a contracted rate, and the evidence is the contract itself. Reference the specific rate, the specific claims, and the total. Note that payment dispute windows are often shorter than appeal windows and usually run from the remittance date, so check the contract before assuming you have a year.
Underpayment work usually pairs with the RVU calculator for what Medicare should allow, the sequestration calculator to rule out the 2 percent statutory cut, CO-45 for the contractual adjustment itself, and how to read an ERA for locating the allowed amount on the remittance. For collection benchmarks see the net collection rate calculator.
Underpayment detection and contract variance recovery — we find the money that pays without anyone noticing.
Get Free Practice Audit Revenue Analytics