Why 110% of Medicare does not tell you what a payer contract is worth
A payer can describe an offer in four words: 110% of Medicare. The phrase looks like a price. It is actually a formula with most of its inputs missing.
Which Medicare release? Which locality? Facility or office? Does the percentage apply to every code and modifier in the payer's schedule? Even with those questions answered, the contract is worth something different to a primary-care practice than to an orthopedics group. They do not bill the same mix.
Contract Check is the workbench we built to put those inputs back into the calculation. Its rule: evaluate the offer across the services the practice actually provides, at the volumes it actually bills.
The unweighted average trap
Suppose an offer raises ten services that a practice performs twice a year, then cuts one service it performs four thousand times. An average of the eleven per-code percentages can make the offer look generous. The dollars say the opposite.
The evaluator never averages those percentages. It accumulates both sides in dollars, weighted by the stated annual volume:
$offerWeighted += $offered * $volume;
$medicareWeighted += $reference->medicare * $volume;
$blend = round($offerWeighted / $medicareWeighted * 100.0, 1);
A high-volume service therefore counts for what it costs the practice, not for one row in a spreadsheet. The same mix turns the gap from a chosen Medicare anchor into annual dollars. "Three points below" becomes an estimate of what those three points mean over a year of the entered volume.
A percentage needs a date
"Medicare" is not a permanent price list. CMS publishes new releases, and code amounts move. An agreement paying 110% of a 2023 schedule does not necessarily pay 110% of Medicare today.
For a vintage offer, the workbench prices each line from the selected historical release, then compares those offered dollars with the current release. Vintage drift is the distance between the percentage written in the agreement and the percentage that agreement produces against current Medicare.
The direction is calculated, not assumed. Older rates often trail current rates, but not for every code mix. If a vintage schedule outperforms the current one, the result says so instead of relabeling every historical difference as erosion.
Coverage belongs beside the headline
A clean blended percentage can hide a messy denominator. A code may be carrier-priced, manually priced, absent from a flat offer, or missing from the selected reference schedule. Treating that missing amount as zero invents a price. Dropping the row without saying so makes a partial result look complete.
The evaluator counts a line only when both sides of that comparison exist:
$counted = $offered !== null && $reference->hasMedicare();
The result then puts coverage beside the blend: the share of total stated volume that passed that test. Each excluded line stays in the corridor with the reason it could not be compared.
That makes these two results visibly different:
- 105% of Medicare across 99% of annual volume
- 105% of Medicare across 42% of annual volume
The headline is identical. Its reach is not.
Medicare is a benchmark, not the only benchmark
The workbench also checks an offer against an available state Medicaid fee-for-service schedule. That comparison gets its own weighted blend and coverage figure, and flags comparable lines below the state FFS amount.
This lookup is deliberately specific. Code, modifier, and setting travel
together; a bare code can't answer for every way that service can be billed. Nor
is there a fictional national Medicaid price. When the selected state is
unsupported, the page says the dataset is missing and offers a request form.
Submitting it stores the state, an optional email address, and the source
contract-check — never the contract rows above it.
The corridor is the answer behind the answer
A blended number is useful for screening. Negotiation happens in the rows behind it. The corridor shows the offer, current Medicare, Medicaid FFS when available, both ratios, annual volume, exclusions, flags, and source details for each line.
That is where a reasonable headline turns out to rest on a handful of favorable codes while the high-volume services do worse. It is also where absence stays distinct from zero. A blank flat-schedule rate means "not listed." An explicit zero is a real offered amount, and the result keeps it as zero.
Contract inputs are not stored
Contract terms and utilization mix are sensitive even without patient information. The workbench has no saved analysis record. Codes, volumes, settings, modifiers, and offer terms are processed for the calculation and then discarded — nothing reaches application storage or the page URL. The tradeoff is intentional: there is no analysis history to reopen later because this is a calculator, not a contract repository.
The pattern
A contract percentage is only as honest as its denominator. The rate year, locality, code mix, volume, setting, modifiers, and missing prices all help define that denominator. Hiding any of them can turn a mathematically correct percentage into a misleading answer.
Open Contract Check, enter five to fifty rows manually, or paste a CSV. The useful question is not whether the first page advertises an attractive percentage. It is what the agreement pays across your mix — and what the headline leaves out.