A denial announces itself. It appears on a report, someone is assigned to it, and eventually it is either fixed or written off with a reason. An underpayment does none of that. The payer allows $92 on a code your contract says should allow $104, the poster sees a payment and a contractual adjustment, the claim closes as paid, and the $12 is gone. Multiply by every 99214 for a year and it is a biller's salary. In audits, underpayments are the leak practices are most surprised by, because nothing in the normal workflow ever points at them.

April is the right time to look. Payers load new fee schedules in January and the first quarter of remittances is now complete enough to compare. This is the check we run for every billing client each quarter, and it can be done in a practice with a spreadsheet and a patient afternoon.

Key takeaways

  • You cannot find an underpayment without knowing the correct payment. Put your top five contracts into a table of your top 30 to 50 codes with the 2026 contracted allowed amount.
  • Sort the repriced sample by difference. Every line for one code short by the same percentage is a systematic error; random shortfalls usually are not underpayments.
  • Rule out sequestration, multiple procedure reductions, bilateral and assistant modifiers, and NPP rates before you escalate, or you lose credibility for the real findings.
  • Systematic errors get fixed systematically. Send provider relations one spreadsheet and the contract page, and ask for a reprocessing project, not claim-by-claim appeals.

Step one: have the contracts in a usable form

You cannot detect an underpayment without knowing what the correct payment is. That sounds obvious, and yet in a majority of the practices we audit the contracted fee schedules are PDFs in a drawer, or the contract says "120 percent of the current Medicare fee schedule" and nobody has calculated what that is for 2026.

For each of your top five payers by revenue, produce a table of the codes you bill most (usually 30 to 50 codes cover 80 percent of volume) with the contracted allowed amount for 2026. For percentage-of-Medicare contracts, calculate from the 2026 Medicare Physician Fee Schedule for your locality: the 2026 conversion factor is $33.40 for most clinicians, and the relative value units for each code are in the CMS fee schedule lookup. Note whether the contract references the current year's Medicare schedule or a fixed year; a contract pegged to 2023 Medicare rates pays differently from one that floats.

The arithmetic for a percent-of-Medicare contract, with illustrative numbers: take the code's work, practice expense and malpractice RVUs, multiply each by the geographic practice cost index for your locality, add them, multiply by the 2026 conversion factor of $33.40, then multiply by the contract percentage. If the locality-adjusted total RVU for a code came to 3.60, the Medicare allowed would be about $120.24 and a 120 percent contract would allow about $144.29. The CMS lookup tool does the first part for you by locality; you only need to apply the percentage. Do it once per code per payer and save the sheet with the year in the file name.

Step two: pull the sample

For each payer, export paid claim lines for dates of service January 1 to March 31, 2026 with CPT, modifiers, units, billed, allowed, paid and the adjustment codes. Filter to the codes in your table. If the volume is large, take every fifth line. You want at least twenty lines per code for your top ten codes.

Use the allowed amount, not the paid amount. Paid varies with deductibles and coinsurance; allowed is what the contract governs. If your system does not export allowed, compute it as paid plus patient responsibility, and check a few by hand against the remittance.

Step three: reprice and compare

Add a column for the contracted allowed amount and a column for the difference. Sort by difference. What you will see falls into a few groups:

PatternWhat it usually meansAction
Every line for one code is short by the same percentageWrong fee schedule loaded by the payer, or a contract amendment not appliedSystematic error; escalate to provider relations with the spreadsheet and contract page
Lines for one code are short only when billed with another codeMultiple procedure reduction or a bundling editCheck whether the contract allows the reduction; many do
Lines are short only with a particular modifierModifier reduction (for example, modifier 25 or assistant surgeon modifiers)Compare to the contract's modifier policy; appeal if not permitted
Random lines short by random amountsCoordination of benefits, patient plan variations, or posting errorsReview individually; usually not an underpayment
Lines paid at the facility rate in an office settingPlace of service error on your claim, or payer mapping errorCheck your claim first
Lines short only for one rendering providerProvider loaded at the wrong rate tier, or credentialed as an NPP by mistakeCheck the payer's provider file; this is a credentialing fix

The reductions that are legitimate

Not every difference is an underpayment, and a practice that sends a payer a list of legitimate reductions loses credibility for the real ones. Common reductions to rule out before you escalate:

  1. Medicare sequestration: a 2 percent reduction to the Medicare payment after the deductible and coinsurance, in place since 2013. It shows on the remit as CO-253. It applies to Medicare, not to commercial contracts unless the contract specifically says so.
  2. Multiple procedure payment reduction: the second and subsequent procedures on the same day are typically paid at 50 percent for surgery and reduced for imaging and therapy services. Most contracts follow Medicare's rules here.
  3. Bilateral procedures: modifier 50 typically pays at 150 percent of the single-side rate, not 200.
  4. Assistant at surgery: modifiers 80, 81, 82 and AS pay a percentage of the primary surgeon's fee.
  5. Non-physician practitioner rates: Medicare pays nurse practitioners and physician assistants at 85 percent of the physician fee schedule when billing under their own NPI. Many commercial contracts do the same, and some do not; check yours.
  6. Timely filing and late-claim penalties in some Medicaid programs.

Build these into the spreadsheet as expected adjustments so they fall out of the variance column automatically. Once the legitimate reductions are modeled, what remains is short and worth reading line by line.

Getting a systematic error fixed

When you find a code paid short by the same percentage across dozens of lines, you have a systematic error and the payer can fix it systematically. Do not appeal claim by claim. Send the provider relations representative a spreadsheet with claim numbers, dates of service, CPT, expected allowed, actual allowed and the difference, plus the page of the contract or amendment that sets the rate. Ask for a project to reprocess all affected claims, not just the ones on your list. Follow up in writing every two weeks and note the dates. Send the spreadsheet through the payer's secure channel, not plain email, because it carries patient identifiers.

Whether the payer reprocesses without a fight depends on the payer. In our experience the ones that loaded the wrong schedule usually fix it once shown, because they have a contract and the contract is clear. The ones that applied a reduction their policy allows but the contract does not are slower and sometimes require the contract dispute process. Read the dispute clause before you need it, and involve counsel if the dollars justify it.

A worked example

An orthopedic practice repriced Q1 2026 for its second-largest commercial payer. The 99213 and 99214 lines matched the contract. The 20610 (large joint injection) lines were short by 18 percent on every claim where 20610 was billed with an E/M and modifier 25, and correct when billed alone. The contract permitted a multiple procedure reduction on surgical codes but was silent on reducing a procedure when billed with an E/M. The practice sent 64 lines totaling about $2,900 in variance with the contract page attached. The payer's response cited its own reimbursement policy; the practice's response cited the contract clause that the contract governs where it conflicts with policy. As of this writing the matter is with the payer's contract team. The practice has also confirmed that modifier 25 is documented properly on every one of those visits, because the argument is only as good as the notes behind it.

The same review turned up a second finding the practice had not expected: one of its physician assistants was being paid at 85 percent of the physician rate by a payer whose contract set NPP rates at 100 percent. Every line for that provider was short by the same 15 percent, on every code, since her effective date in November. That was a provider file error on the payer's side, fixed with one call to credentialing and a reprocessing request, and it would never have appeared on a denial report.

Questions we hear

Our practice management system has a contract module. Is that enough?

If the contracts are loaded and maintained, yes, it makes this a report instead of a spreadsheet. In most practices the module was set up once and never updated, so the expected amounts are years old. Check the effective dates on the loaded schedules.

How far back can we recover?

Depends on the contract and state law. Many contracts set a window of 12 to 24 months for provider payment disputes. Some states have prompt pay laws with interest on late or underpaid claims. Ask counsel about your state and read the contract.

Is this something an outside audit finds?

It is one of the first things. The RCM audit reprices a sample from each of your top payers against your contracts, and practices on Revelrex medical billing get the variance check every quarter as part of the service.

What to do this month

  1. Build the expected-allowed table for your top five payers and top 30 to 50 codes, with the 2026 rates and the contract page reference for each.
  2. Export first-quarter paid lines for those codes with allowed amounts and modifiers, and reprice them.
  3. Model the legitimate reductions in the sheet, then sort what remains by difference and by provider.
  4. For each systematic pattern, send one spreadsheet and the contract page to provider relations through a secure channel and ask for a reprocessing project.
  5. Put the variance check on the calendar for the second week of July, October and January.