Skip to content
FonteumThe Graph
DataResearchCare CompareThe DifferAttestAPI
See the proof
  • Data
  • Research
  • Care Compare
  • The Differ
  • Attest
  • API
See the proof
  1. All studies
  2. /Same procedure, different price: Medicare Part B charge variation, 2024
FINANCIAL DISTRESS · ISSUE 072
cms-medicare-physician-serviceOriginal Research

Same procedure, different price: Medicare Part B charge variation, 2024

For the same Medicare Part B procedure, in the same care setting, providers bill wildly different amounts: across 997 high-volume procedure-and-setting groups in 2024, the 90th-percentile provider charged a median 3.6× what the 10th-percentile provider charged for the identical service. For a hip replacement, billed by 8,164 surgeons, the spread reaches 16×.

BY FONTEUM RESEARCH BUREAU · JUNE 14, 2026 · 10 MIN READ · ASSERTED VIA SLSA L3REVIEWED BY DR. JENNIFER MONTECILLO, MDSNAPSHOT 2026-06-14 · DOI 10.5072/fonteum/medicare-part-b-procedure-price-variation-2026 · LAST UPDATED JUNE 14, 2026
CMS Medicare Physician & Other Practitioners · 2026-06-14
Reviewed by Dr. Jennifer Montecillo, MD, non-practicing medical reviewer. Gullas College of Medicine, 2019. Non-practicing medical reviewer focused on source interpretation, terminology, and limitations language. About our reviewers →
Reproduce this study →
Same procedure: 90th- vs 10th-percentile provider charge ratio, 2024cms-medicare-physician-service · 2026-06
27130 Hip replacement (facility)
16.3
29827 Rotator cuff repair (facility)
15.8
66984 Cataract removal (facility)
4.7
70450 Head CT (facility)
4
99214 Office visit, established
2.6
Built on CMS Medicare Physician & Other Practitioners · snapshot 2026-06-14 · reproducible · re-derive the figures yourself
Key findings
3.6×
median ratio between the 90th- and 10th-percentile provider's submitted charge for the same procedure in the same setting, across 997 high-volume Part B groups in 2024
cms-medicare-physician-service · CMS
715 of 997
high-volume procedure-and-setting groups where the 90th-percentile provider billed at least 3× the 10th-percentile provider for the same code — and 995 of 997 ran at least 2×
cms-medicare-physician-service · CMS
16.3×
the spread for a total hip replacement (CPT 27130), billed by 8,164 surgeons in the facility setting — $1,007 at the 10th-percentile provider vs $16,370 at the 90th, for the identical procedure
cms-medicare-physician-service · CMS
3.4×
the national service-weighted submitted-charge-to-Medicare-allowed multiple for non-drug Part B services — $352.2B billed against $103.1B allowed across 1.2M providers
cms-medicare-physician-service · CMS
On this page
How wide is the spreadWhat it looks like on the most common servicesThe widest-variation proceduresCharges, allowed amounts, and which gap is whichHow to read these numbersMethodologyLimitationsSources

A HCPCS code fixes two things and leaves a third loose. Medicare assigns each outpatient and physician service a HCPCS code — the Healthcare Common Procedure Coding System identifier — and sets a single administratively determined allowed amount for it under the Physician Fee Schedule. The code is fixed; the allowed amount is fixed. What a provider charges for that same code is not. Each practice sets its own list price, and those prices diverge far more than the clinical sameness of the code would suggest.

This study measures that divergence for Part B. It aggregates the CMS Medicare Physician & Other Practitioners by Provider and Service public-use file — one row per provider per HCPCS code per care setting — and, for every high-volume procedure, computes the spread of submitted charges across providers: the 10th percentile, the median, the 90th percentile, and the ratio between them. It is the outpatient, provider-level companion to the inpatient DRG charge-variation study, which measures the same dispersion across hospitals for inpatient stays. Here the unit is narrower — one provider, one code, one setting — but the question is the same: for one procedure, how far apart do providers price it?

How wide is the spread

Across 997 high-volume procedure-and-setting groups in 2024, the 90th-percentile provider billed a median of 3.6× what the 10th-percentile provider billed for the identical code in the same setting. The "high-volume" universe is every code-and-setting cell reported by at least 1,000 providers — 997 cells covering 8.76 million of the 9.0 million non-drug billing records in the file — so each percentile rests on a large, stable set of providers rather than a handful of outliers.

The middle of that distribution is high and tight: the 25th-percentile group spreads 2.9×, the 75th-percentile group spreads 4.6×, and 715 of the 997 groups (72%) carry a spread of at least 3×. At the floor, 995 of 997 groups (99.8%) run at least 2×. Wide provider-to-provider variation is not confined to a few exotic procedures — it is the standing condition of nearly every common service Medicare covers, from a routine office visit to a major joint replacement.

The HCPCS code is fixed and so is what Medicare allows for it. What a provider charges for it is not — for the same procedure, in the same setting, the dearest bill a median 3.6× the cheapest.

What it looks like on the most common services

Take the services Medicare pays for most often, and the spread holds across all of them, tightening for routine visits and widening for procedures. Each row below is the same code in its dominant care setting, priced across thousands of providers: the 10th-percentile provider's average charge, the median, the 90th, the 90/10 ratio, and how far the median charge sits above Medicare's allowed amount.

HCPCSDescriptionSettingProviders10th pctileMedian90th pctile90/10Charge ÷ allowed
99214Established office visit, moderateOffice450,513$160$255$4162.6×2.1×
99213Established office visit, lowOffice420,108$110$178$2952.7×2.1×
99204New office visit, moderateOffice210,166$239$368$5852.4×2.3×
99223Initial hospital care, highFacility140,863$316$497$9152.9×3.0×
99215Established office visit, highOffice127,124$225$379$6372.8×2.2×
G0439Annual wellness visit, subsequentOffice106,701$163$260$4072.5×2.1×
93000Routine ECG, 12-leadOffice68,322$32$58$1063.4×4.2×
70450CT scan, head/brain, no contrastFacility19,414$123$182$4854.0×4.8×
66984Cataract removal w/ lensFacility10,370$970$2,000$4,5154.7×3.8×

Established office visits — the workhorse of Part B — are the tightest cluster, at 2.4× to 2.8×. The most common single service, an established-patient visit at a moderate level of decision-making (CPT 99214), is billed by 450,513 providers, who price it from $160 at the 10th percentile to $416 at the 90th — a 2.6× spread for what is, by definition of the code, the same encounter. Move from visits to discrete procedures and the spread widens: a routine ECG runs 3.4×, a head CT 4.0×, and a cataract removal 4.7×, each across thousands of providers billing the identical code.

The widest-variation procedures

Rank the same universe by spread instead of volume, and orthopedic and spine surgery rise to the top. These are facility-setting procedures with a stable reporting base; we hold the 10th percentile above $50 so that a handful of nominal component-only charges cannot manufacture the ratio.

HCPCSDescriptionSettingProviders10th pctileMedian90th pctile90/10
29828Biceps tenodesis, arthroscopicFacility1,081$787$3,103$16,00020.3×
29824Distal clavicle excision, arthroscopicFacility1,247$660$2,313$11,17516.9×
29823Shoulder debridement, arthroscopicFacility1,715$578$2,287$9,58516.6×
27130Hip replacement, totalFacility8,164$1,007$4,212$16,37016.3×
29827Rotator cuff repair, arthroscopicFacility3,374$1,000$3,575$15,78215.8×
63048Spine laminectomy, additional segmentFacility2,722$213$740$3,29815.5×
23472Total shoulder replacementFacility4,023$1,092$4,440$16,51315.1×
29826Shoulder decompression, arthroscopicFacility2,425$261$1,150$3,87914.9×

A total hip replacement (CPT 27130) is the clearest case because it is both common and dear: 8,164 surgeons bill it, and they bill it from $1,007 at the 10th percentile to $16,370 at the 90th — a 16.3× spread for the same coded operation. The clinical content of the code is the same; the list price is not. Arthroscopic shoulder work clusters even higher, from 15× to 20×, on smaller but still substantial provider bases.

Device-inclusive implant codes run higher still, because the device acquisition cost is folded into the submitted charge rather than billed separately. A spinal neurostimulator generator (CPT 63685) ran $796 at the 10th-percentile provider and $72,203 at the 90th — a 90.7× spread — and a subcutaneous cardiac rhythm monitor (CPT 33285) spanned 93.9×. These are excluded from the table above because the spread reflects bundled hardware cost, not procedure-pricing discretion.

Charges, allowed amounts, and which gap is which

Two different gaps live in this file, and they are easy to confuse. The first is the charge-to-allowed gap — how far above Medicare's allowed amount a provider's charge sits. Service-weighted across every non-drug Part B line in 2024, providers submitted $352.2 billion in charges against $103.1 billion that Medicare allowed — a 3.4× multiple. (Medicare then paid roughly 78% of the allowed amount, with the remainder falling to beneficiary coinsurance and deductibles.) The second gap, this study's subject, is the provider-to-provider spread on the same code.

The charge-to-allowed multiple itself varies by service, because providers mark up some codes more aggressively than others — the right-hand column of the common-services table makes that visible. A routine office visit carries a 2.1× charge-to-allowed multiple; a 12-lead ECG a 4.2×; a head CT a 4.8×. Neither multiple is what a patient or Medicare pays — Medicare pays its allowed amount — but together with the provider-to-provider spread they show submitted charges behaving as a markup policy decoupled from both cost and reimbursement.

How to read these numbers

The percentile columns and the charge-to-allowed column answer different questions, so read them in order:

  1. The percentile columns (10th / median / 90th) are computed across providers for one code in one setting. Each provider contributes one observation — its own average submitted charge for that code — and a provider that billed the code five times counts the same as one that billed it five thousand times. This is deliberate: the question is how providers differ in pricing, not how many services each delivered.
  2. The 90/10 ratio is the spread in a single number. A ratio of 4.0× means the provider at the 90th percentile of charges billed four times what the provider at the 10th percentile billed for the identical code in the same setting.
  3. The charge-to-allowed multiple is a different axis entirely — service-weighted, comparing submitted charges to Medicare's allowed amount — and is included only to separate it from the spread, not as this study's finding.

A high spread on a code does not name any provider as overpriced or underpriced. It says that the same federally defined unit of care carries radically different list prices depending only on who bills it.

Methodology

Every figure is a direct aggregation over one public, read-only Postgres table: medicare_physician_service, built from the CMS Medicare Physician & Other Practitioners — by Provider and Service public-use file. The table carries one row per provider (npi) × HCPCS code (hcpcs_code) × place of service (place_of_service) × program year (data_year); it is public, read-only. The snapshot used here was ingested 2026-06-14 and covers program year 2024, the most recent annual release — 9,781,673 rows across 1,207,473 providers and 6,471 codes.

The program year is resolved as max(data_year) at query time, never hard-coded, so the figures advance when CMS publishes the next file. Drug codes (hcpcs_drug_indicator = true) are excluded throughout, because a drug's charge tracks its acquisition cost rather than procedure-pricing discretion. Charge percentiles are computed with percentile_cont over avg_submitted_charge, grouped by code and place of service, across the providers reporting that cell — one provider, one observation, unweighted. The setting is pinned into the grain because facility-versus-office billing and global-versus-professional-component splits otherwise inflate the spread (cataract removal pools to roughly 35× across settings but is 4.7× within the facility setting). The high-volume universe is restricted to cells with at least 1,000 reporting providers (997 cells) so each percentile is stable. The charge-to-allowed multiple, by contrast, is service-weighted — sum(submitted × services) / sum(allowed × services) — to reproduce the national per-service ratio.

CMS suppresses any provider-code cell with fewer than 11 beneficiaries; those rows are absent from the file and are excluded rather than imputed. The exact SQL is in the reproducibility block below, and the source-provenance contract is documented in the provenance methodology. Methodology version: medicare-physician-service/v1.

Limitations

  • Medicare fee-for-service only. The file covers traditional Medicare Part B services billed under the Physician Fee Schedule. It excludes Medicare Advantage, Medicaid, and commercial claims, so the spread describes Medicare-billed activity, not every payer.
  • Charges are list prices, not transactions. Average submitted charges are what providers billed, never what Medicare or a patient paid. The spread is a spread in markup policy, not in what care cost or what was collected.
  • Provider averages, not per-service percentiles. Each provider contributes one averaged observation per code-and-setting cell. The spread is across providers, so it understates the full range an individual claim might carry within a high-volume practice.
  • Within-code clinical variation is not fully controlled. A single HCPCS code fixes the procedure, but residual differences in patient complexity, modifiers, and regional input costs contribute to the spread alongside fee-schedule markup. The figures bound the variation; they do not attribute all of it to pricing discretion.
  • Setting pinned, but two settings only. The file distinguishes facility from office (non-facility) place of service. Pinning the setting removes the largest confound, but device-inclusive and component-split codes still carry wide bundled-cost tails, which is why implant codes are reported separately.
  • Suppressed small cells. Provider-code combinations under 11 beneficiaries are withheld by CMS and excluded, which slightly narrows the observed spread among low-volume providers.
  • One program year, one snapshot. The figures are point-in-time: program year 2024, snapshot 2026-06-14. The Physician Fee Schedule and HCPCS definitions are revised annually, so they are not directly comparable across years without re-basing.
  • A pricing-transparency signal, not a quality signal. These figures describe how providers price a code, never how well any provider performs. No provider is ranked, scored, or named in this study.

Sources

  • CMS — Medicare Physician & Other Practitioners by Provider and Service — the Part B physician public-use file, program year 2024, the sole source for this study.
  • CMS — Medicare Physician & Other Practitioners methodology — CMS's own definition of submitted charges, allowed amounts, payment, and the small-cell suppression rule.
  • CMS — Physician Fee Schedule — the official source for how Medicare's allowed amount per HCPCS code is set.
  • CMS — HCPCS Release & Code Sets — the procedure-coding system that defines each billable code.

The inpatient counterpart sits in the DRG charge-variation study and the national per-code DRG cost reference; for how Medicare's drug spending varies, see the most expensive Part D drugs and the prescribers behind half of Medicare's drug bill.

Frequently asked questions

Why do providers charge different amounts for the same Part B procedure?
Submitted charges are list prices each provider sets on its own fee schedule — there is no national price for what a provider bills. Across 997 high-volume procedure-and-setting groups in 2024, the 90th-percentile provider billed a median 3.6× what the 10th-percentile provider billed for the identical code. The charge reflects each practice's markup, not the cost of care or what Medicare allows.
Does the patient or Medicare pay these different charges?
No. Medicare pays its own administratively set allowed amount regardless of what a provider charges, so the wide charge spread does not change Medicare's payment. Charges still matter: they anchor out-of-network and self-pay bills, and they are the list price an uninsured patient is first billed before any discount is applied.
Which Part B procedure has the widest provider-to-provider charge spread?
Among high-volume codes with a stable base, orthopedic surgery leads: a total hip replacement (CPT 27130) ran $1,007 at the 10th-percentile surgeon and $16,370 at the 90th in 2024 — a 16.3× spread across 8,164 surgeons. Arthroscopic shoulder procedures cluster just as high, from 15× to 20×.
How much does a Medicare office visit vary across providers?
For an established-patient office visit at a moderate level (CPT 99214) — the single most common Part B service, billed by 450,513 providers in 2024 — the 10th-percentile provider billed $160, the median $255, and the 90th-percentile $416. That is a 2.6× spread. Routine office visits are among the tightest-priced services Medicare covers.
Is this the same as the gap between charges and what Medicare pays?
No — they are two different gaps. The charge-to-allowed gap is how far one provider's charge sits above Medicare's allowed amount: 3.4× on average across all non-drug Part B services in 2024. This study measures the provider-to-provider spread: how far providers differ from each other on the same code in the same setting.
Why does this study pin the place of service?
The same code is billed differently in a facility than in an office, and global-versus-professional-component splits widen the gap further. Pooling settings inflates the spread — cataract removal looks like 35× pooled but is 4.7× within the facility setting. We treat each provider-code-setting cell as one observation so the spread reflects pricing, not setting mix.
What program year and source does this cover?
Calendar year 2024, the most recent annual release of the CMS Medicare Physician & Other Practitioners by Provider and Service public-use file, snapshotted 2026-06-14. The query resolves the latest available data_year at run time, so the figures advance automatically when CMS publishes the next annual file.

Who uses this data

The source data behind this study is public

Compliance teams, journalists, and researchers work from the same federal source families cited above — queried by NPI or facility identifier through Fonteum’s open dataset pages and API. Every figure traces to a frozen, downloadable snapshot you can reproduce yourself.

Browse CMS Medicare Physician & Other Practitioners→Query the API →How we built this →

Datasets used

CMS Medicare Physician & Other Practitioners→

Reproducibility

Every claim, reproducible

The SQL+
medicare-part-b-procedure-price-variation-2026.sql
-- Medicare Part B PROCEDURE price variation — fully reproducible query.
--
-- Question: for the SAME outpatient/physician procedure (HCPCS code), in the
-- SAME care setting, how widely do providers differ in what they bill? We
-- measure the provider-to-provider spread of average submitted charge — the
-- 10th / median / 90th percentile across providers and the 90/10 ratio — plus
-- the per-procedure submitted-charge-to-Medicare-allowed multiple.
--
-- This is the OUTPATIENT / Part B companion to the inpatient DRG charge-
-- variation study: there the unit is a hospital × MS-DRG; here it is a
-- provider (NPI) × HCPCS code × place of service.
--
-- Source:
--   public.medicare_physician_service — CMS "Medicare Physician & Other
--     Practitioners — by Provider and Service" public-use file. One row per
--     provider (NPI) × HCPCS code × place of service × data_year. public, read-only. Snapshot ingested 2026-06-14; program year 2024 (the
--     most recent annual release). 9,781,673 rows · 1,207,473 providers ·
--     6,471 HCPCS codes · 2 places of service (F = facility, O = office /
--     non-facility). License: US-Government-Works (17 U.S.C. §105).
--
-- Grain note: each row is one provider's AVERAGE submitted charge for that
-- code in that setting. CMS suppresses any provider-code cell with fewer than
-- 11 beneficiaries; those rows are absent from the file — never imputed.
-- avg_submitted_charge is a provider average, not a per-claim figure.
--
-- One observation = one (NPI, HCPCS, place_of_service) cell. We pin place of
-- service into the grain because facility vs office (non-facility) billing
-- and global-vs-professional-component splits otherwise inflate the spread
-- (e.g. cataract removal pools to 35x across settings but is 4.7x within the
-- facility setting). Percentiles are computed ACROSS PROVIDERS, unweighted —
-- the question is dispersion across providers, not the per-service average.
--
-- Drug codes (hcpcs_drug_indicator = true) are excluded throughout — a drug's
-- charge tracks its acquisition cost, not procedure pricing discretion.
--
-- High-volume universe: code × setting cells billed by >=1,000 providers
-- (997 cells, 8.76M of 9.0M non-drug rows) so each percentile is stable.
--
-- "Most recent program year" is resolved at query time, never hard-coded.

WITH latest AS (
  SELECT max(data_year) AS yr FROM public.medicare_physician_service
),
base AS (
  SELECT npi,
         hcpcs_code,
         hcpcs_description,
         place_of_service,
         avg_submitted_charge::numeric    AS sc,   -- provider avg submitted charge
         avg_medicare_allowed_amt::numeric AS al   -- provider avg Medicare allowed amt
  FROM public.medicare_physician_service
  WHERE data_year = (SELECT yr FROM latest)
    AND hcpcs_drug_indicator = false               -- procedures only, not drugs
    AND avg_submitted_charge IS NOT NULL
    AND avg_medicare_allowed_amt IS NOT NULL
),
per_cell AS (
  SELECT
    hcpcs_code,
    place_of_service,
    max(hcpcs_description)                                          AS descr,
    count(*)                                                        AS providers,
    round(percentile_cont(0.1) WITHIN GROUP (ORDER BY sc)::numeric) AS p10,
    round(percentile_cont(0.5) WITHIN GROUP (ORDER BY sc)::numeric) AS median_charge,
    round(percentile_cont(0.9) WITHIN GROUP (ORDER BY sc)::numeric) AS p90,
    round((percentile_cont(0.9) WITHIN GROUP (ORDER BY sc)
          / nullif(percentile_cont(0.1) WITHIN GROUP (ORDER BY sc), 0))::numeric, 1)
                                                                    AS p90_p10_ratio,
    round((percentile_cont(0.5) WITHIN GROUP (ORDER BY sc)
          / nullif(percentile_cont(0.5) WITHIN GROUP (ORDER BY al), 0))::numeric, 1)
                                                                    AS charge_to_allowed
  FROM base
  GROUP BY hcpcs_code, place_of_service
),
hi_vol AS (                                  -- the 997-cell high-volume universe
  SELECT * FROM per_cell WHERE providers >= 1000
)

-- ============================================================================
-- (1) Headline: how wide is the spread across the high-volume universe?
--     The median cell's 90/10 charge ratio is the lead figure (3.60x).
-- ============================================================================
SELECT
  count(*)                                                               AS cells_qualifying,
  round(percentile_cont(0.25) WITHIN GROUP (ORDER BY p90_p10_ratio), 2)  AS p25_ratio,
  round(percentile_cont(0.5)  WITHIN GROUP (ORDER BY p90_p10_ratio), 2)  AS median_ratio,
  round(percentile_cont(0.75) WITHIN GROUP (ORDER BY p90_p10_ratio), 2)  AS p75_ratio,
  count(*) FILTER (WHERE p90_p10_ratio >= 2)                             AS cells_ge_2x,
  count(*) FILTER (WHERE p90_p10_ratio >= 3)                             AS cells_ge_3x,
  count(*) FILTER (WHERE p90_p10_ratio >= 5)                             AS cells_ge_5x
FROM hi_vol;
--  cells p25  median p75  ge_2x ge_3x ge_5x
--  997   2.91 3.60   4.60 995   715   199

-- ============================================================================
-- (2) The spread on the most COMMON services — same code + setting, priced
--     across providers. (Ranked by provider count; the study's first table.)
-- ============================================================================
SELECT hcpcs_code, place_of_service, descr, providers,
       p10, median_charge, p90, p90_p10_ratio, charge_to_allowed
FROM hi_vol
WHERE (hcpcs_code, place_of_service) IN
      (('99214','O'),('99213','O'),('99204','O'),('99223','F'),('99215','O'),
       ('G0439','O'),('93000','O'),('70450','F'),('66984','F'))
ORDER BY providers DESC;
--  99214 O Established office visit, moderate   450,513  160   255   416  2.6  2.1
--  99213 O Established office visit, low        420,108  110   178   295  2.7  2.1
--  99204 O New office visit, moderate           210,166  239   368   585  2.4  2.3
--  99223 F Initial hospital care, high          140,863  316   497   915  2.9  3.0
--  99215 O Established office visit, high        127,124  225   379   637  2.8  2.2
--  G0439 O Annual wellness visit, subsequent     106,701  163   260   407  2.5  2.1
--  93000 O Routine ECG, 12-lead                   68,322   32    58   106  3.4  4.2
--  70450 F CT scan, head/brain, no contrast       19,414  123   182   485  4.0  4.8
--  66984 F Cataract removal w/ lens               10,370  970  2000  4515  4.7  3.8

-- ============================================================================
-- (3) The WIDEST-variation procedures — same universe, ranked by 90/10 ratio,
--     restricted to non-drug CPT codes with a non-trivial 10th percentile
--     (p10 >= 50) so a handful of nominal component-only charges cannot blow
--     up the ratio.
-- ============================================================================
SELECT hcpcs_code, place_of_service, descr, providers, p10, median_charge, p90, p90_p10_ratio
FROM hi_vol
WHERE hcpcs_code ~ '^[0-9]'        -- numeric CPT (drops misc/unclassified "J"-style codes)
  AND p10 >= 50
ORDER BY p90_p10_ratio DESC
LIMIT 8;
--  29828 F Biceps tenodesis, arthroscopic           1,081   787  3103  16000  20.3
--  29824 F Distal clavicle excision, arthroscopic   1,247   660  2313  11175  16.9
--  29823 F Shoulder debridement, arthroscopic       1,715   578  2287   9585  16.6
--  27130 F Hip replacement, total                   8,164  1007  4212  16370  16.3
--  29827 F Rotator cuff repair, arthroscopic        3,374  1000  3575  15782  15.8
--  63048 F Spine laminectomy, additional segment    2,722   213   740   3298  15.5
--  23472 F Total shoulder replacement               4,023  1092  4440  16513  15.1
--  29826 F Shoulder decompression, arthroscopic     2,425   261  1150   3879  14.9

-- ============================================================================
-- (3b) Device-inclusive implant codes run higher still — the device
--      acquisition cost is folded into the submitted charge.
-- ============================================================================
SELECT hcpcs_code, place_of_service, descr, providers, p10, median_charge, p90, p90_p10_ratio
FROM hi_vol
WHERE hcpcs_code IN ('63685','33285')
ORDER BY p90_p10_ratio DESC;
--  33285 F Insertion of cardiac rhythm monitor        1,424  188  345  17673  93.9
--  63685 F Spinal neurostimulator generator/receiver  1,202  796 2243  72203  90.7

-- ============================================================================
-- (4) The OTHER gap — national submitted-charge-to-Medicare-allowed multiple
--     (a different axis: charge-vs-allowed, service-weighted across every
--     non-drug Part B line). Included to separate it from the provider-to-
--     provider spread above.
-- ============================================================================
SELECT
  round(sum(avg_submitted_charge   * total_services)
      / nullif(sum(avg_medicare_allowed_amt * total_services), 0), 2) AS sw_submitted_to_allowed,
  round(sum(avg_medicare_allowed_amt * total_services)
      / nullif(sum(avg_medicare_payment_amt * total_services), 0), 2) AS sw_allowed_to_paid,
  count(DISTINCT npi)                                                 AS providers,
  round(sum(total_services))                                          AS services,
  round(sum(avg_submitted_charge    * total_services) / 1e9, 1)       AS submitted_billions,
  round(sum(avg_medicare_allowed_amt * total_services) / 1e9, 1)      AS allowed_billions
FROM public.medicare_physician_service
WHERE data_year = (SELECT yr FROM latest)
  AND hcpcs_drug_indicator = false
  AND avg_submitted_charge IS NOT NULL
  AND avg_medicare_allowed_amt IS NOT NULL;
--  sw_submitted_to_allowed sw_allowed_to_paid providers  services       submitted_B allowed_B
--  3.41                    1.28               1,207,305  1,605,743,071  352.2       103.1
The snapshot+
dataset_idcms-medicare-physician-service
snapshot_date2026-06-14
sha256509dc7ce4cd02d8dd160d50d33ce5d942cd120ea306ff1eb2b6ece4f59cb2c23
doi10.5072/fonteum/medicare-part-b-procedure-price-variation-2026
slsa_provenance_url
The JOINs+
program year: data_year = max(data_year) in medicare_physician_service  -- resolved at query time, = 2024
procedures only: hcpcs_drug_indicator = false  -- a drug's charge tracks acquisition cost, not pricing discretion
matchable cells: avg_submitted_charge IS NOT NULL AND avg_medicare_allowed_amt IS NOT NULL  -- CMS suppresses any provider-code cell under 11 beneficiaries; never imputed
one observation = one (npi, hcpcs_code, place_of_service) cell  -- setting pinned into the grain so facility-vs-office billing does not inflate the spread
spread universe: code x setting cells with >=1,000 reporting providers  -- 997 cells, so percentiles are stable not handful-of-providers
charge spread: percentile_cont(0.1 / 0.5 / 0.9) of avg_submitted_charge across providers, per cell  -- one provider = one observation, unweighted
p90/p10 ratio = percentile_cont(0.9) / percentile_cont(0.1), per cell; median across the 997 = 3.60
submitted-to-allowed multiple = sum(submitted*services) / sum(allowed*services), service-weighted across all non-drug lines = 3.41
The pipeline version+
git_sha
slsa_provenance
methodology_versionmedicare-physician-service/v1

Reproduce this

Run the exact query against the frozen 2026-06-14.

-- Medicare Part B PROCEDURE price variation — fully reproducible query. -- -- Question: for the SAME outpatient/physician procedure (HCPCS code), in the -- SAME care setting, how widely do providers differ in what they bill? We -- measure the provider-to-provider spread of average submitted charge — the -- 10th / median / 90th percentile across providers and the 90/10 ratio — plus -- the per-procedure submitted-charge-to-Medicare-allowed multiple. -- -- This is the OUTPATIENT / Part B companion to the inpatient DRG charge- -- variation study: there the unit is a hospital × MS-DRG; here it is a -- provider (NPI) × HCPCS code × place of service. -- -- Source: -- public.medicare_physician_service — CMS "Medicare Physician & Other -- Practitioners — by Provider and Service" public-use file. One row per -- provider (NPI) × HCPCS code × place of service × data_year. public, read-only. Snapshot ingested 2026-06-14; program year 2024 (the -- most recent annual release). 9,781,673 rows · 1,207,473 providers · -- 6,471 HCPCS codes · 2 places of service (F = facility, O = office / -- non-facility). License: US-Government-Works (17 U.S.C. §105). -- -- Grain note: each row is one provider's AVERAGE submitted charge for that -- code in that setting. CMS suppresses any provider-code cell with fewer than -- 11 beneficiaries; those rows are absent from the file — never imputed. -- avg_submitted_charge is a provider average, not a per-claim figure. -- -- One observation = one (NPI, HCPCS, place_of_service) cell. We pin place of -- service into the grain because facility vs office (non-facility) billing -- and global-vs-professional-component splits otherwise inflate the spread -- (e.g. cataract removal pools to 35x across settings but is 4.7x within the -- facility setting). Percentiles are computed ACROSS PROVIDERS, unweighted — -- the question is dispersion across providers, not the per-service average. -- -- Drug codes (hcpcs_drug_indicator = true) are excluded throughout — a drug's -- charge tracks its acquisition cost, not procedure pricing discretion. -- -- High-volume universe: code × setting cells billed by >=1,000 providers -- (997 cells, 8.76M of 9.0M non-drug rows) so each percentile is stable. -- -- "Most recent program year" is resolved at query time, never hard-coded. WITH latest AS ( SELECT max(data_year) AS yr FROM public.medicare_physician_service ), base AS ( SELECT npi, hcpcs_code, hcpcs_description, place_of_service, avg_submitted_charge::numeric AS sc, -- provider avg submitted charge avg_medicare_allowed_amt::numeric AS al -- provider avg Medicare allowed amt FROM public.medicare_physician_service WHERE data_year = (SELECT yr FROM latest) AND hcpcs_drug_indicator = false -- procedures only, not drugs AND avg_submitted_charge IS NOT NULL AND avg_medicare_allowed_amt IS NOT NULL ), per_cell AS ( SELECT hcpcs_code, place_of_service, max(hcpcs_description) AS descr, count(*) AS providers, round(percentile_cont(0.1) WITHIN GROUP (ORDER BY sc)::numeric) AS p10, round(percentile_cont(0.5) WITHIN GROUP (ORDER BY sc)::numeric) AS median_charge, round(percentile_cont(0.9) WITHIN GROUP (ORDER BY sc)::numeric) AS p90, round((percentile_cont(0.9) WITHIN GROUP (ORDER BY sc) / nullif(percentile_cont(0.1) WITHIN GROUP (ORDER BY sc), 0))::numeric, 1) AS p90_p10_ratio, round((percentile_cont(0.5) WITHIN GROUP (ORDER BY sc) / nullif(percentile_cont(0.5) WITHIN GROUP (ORDER BY al), 0))::numeric, 1) AS charge_to_allowed FROM base GROUP BY hcpcs_code, place_of_service ), hi_vol AS ( -- the 997-cell high-volume universe SELECT * FROM per_cell WHERE providers >= 1000 ) -- ============================================================================ -- (1) Headline: how wide is the spread across the high-volume universe? -- The median cell's 90/10 charge ratio is the lead figure (3.60x). -- ============================================================================ SELECT count(*) AS cells_qualifying, round(percentile_cont(0.25) WITHIN GROUP (ORDER BY p90_p10_ratio), 2) AS p25_ratio, round(percentile_cont(0.5) WITHIN GROUP (ORDER BY p90_p10_ratio), 2) AS median_ratio, round(percentile_cont(0.75) WITHIN GROUP (ORDER BY p90_p10_ratio), 2) AS p75_ratio, count(*) FILTER (WHERE p90_p10_ratio >= 2) AS cells_ge_2x, count(*) FILTER (WHERE p90_p10_ratio >= 3) AS cells_ge_3x, count(*) FILTER (WHERE p90_p10_ratio >= 5) AS cells_ge_5x FROM hi_vol; -- cells p25 median p75 ge_2x ge_3x ge_5x -- 997 2.91 3.60 4.60 995 715 199 -- ============================================================================ -- (2) The spread on the most COMMON services — same code + setting, priced -- across providers. (Ranked by provider count; the study's first table.) -- ============================================================================ SELECT hcpcs_code, place_of_service, descr, providers, p10, median_charge, p90, p90_p10_ratio, charge_to_allowed FROM hi_vol WHERE (hcpcs_code, place_of_service) IN (('99214','O'),('99213','O'),('99204','O'),('99223','F'),('99215','O'), ('G0439','O'),('93000','O'),('70450','F'),('66984','F')) ORDER BY providers DESC; -- 99214 O Established office visit, moderate 450,513 160 255 416 2.6 2.1 -- 99213 O Established office visit, low 420,108 110 178 295 2.7 2.1 -- 99204 O New office visit, moderate 210,166 239 368 585 2.4 2.3 -- 99223 F Initial hospital care, high 140,863 316 497 915 2.9 3.0 -- 99215 O Established office visit, high 127,124 225 379 637 2.8 2.2 -- G0439 O Annual wellness visit, subsequent 106,701 163 260 407 2.5 2.1 -- 93000 O Routine ECG, 12-lead 68,322 32 58 106 3.4 4.2 -- 70450 F CT scan, head/brain, no contrast 19,414 123 182 485 4.0 4.8 -- 66984 F Cataract removal w/ lens 10,370 970 2000 4515 4.7 3.8 -- ============================================================================ -- (3) The WIDEST-variation procedures — same universe, ranked by 90/10 ratio, -- restricted to non-drug CPT codes with a non-trivial 10th percentile -- (p10 >= 50) so a handful of nominal component-only charges cannot blow -- up the ratio. -- ============================================================================ SELECT hcpcs_code, place_of_service, descr, providers, p10, median_charge, p90, p90_p10_ratio FROM hi_vol WHERE hcpcs_code ~ '^[0-9]' -- numeric CPT (drops misc/unclassified "J"-style codes) AND p10 >= 50 ORDER BY p90_p10_ratio DESC LIMIT 8; -- 29828 F Biceps tenodesis, arthroscopic 1,081 787 3103 16000 20.3 -- 29824 F Distal clavicle excision, arthroscopic 1,247 660 2313 11175 16.9 -- 29823 F Shoulder debridement, arthroscopic 1,715 578 2287 9585 16.6 -- 27130 F Hip replacement, total 8,164 1007 4212 16370 16.3 -- 29827 F Rotator cuff repair, arthroscopic 3,374 1000 3575 15782 15.8 -- 63048 F Spine laminectomy, additional segment 2,722 213 740 3298 15.5 -- 23472 F Total shoulder replacement 4,023 1092 4440 16513 15.1 -- 29826 F Shoulder decompression, arthroscopic 2,425 261 1150 3879 14.9 -- ============================================================================ -- (3b) Device-inclusive implant codes run higher still — the device -- acquisition cost is folded into the submitted charge. -- ============================================================================ SELECT hcpcs_code, place_of_service, descr, providers, p10, median_charge, p90, p90_p10_ratio FROM hi_vol WHERE hcpcs_code IN ('63685','33285') ORDER BY p90_p10_ratio DESC; -- 33285 F Insertion of cardiac rhythm monitor 1,424 188 345 17673 93.9 -- 63685 F Spinal neurostimulator generator/receiver 1,202 796 2243 72203 90.7 -- ============================================================================ -- (4) The OTHER gap — national submitted-charge-to-Medicare-allowed multiple -- (a different axis: charge-vs-allowed, service-weighted across every -- non-drug Part B line). Included to separate it from the provider-to- -- provider spread above. -- ============================================================================ SELECT round(sum(avg_submitted_charge * total_services) / nullif(sum(avg_medicare_allowed_amt * total_services), 0), 2) AS sw_submitted_to_allowed, round(sum(avg_medicare_allowed_amt * total_services) / nullif(sum(avg_medicare_payment_amt * total_services), 0), 2) AS sw_allowed_to_paid, count(DISTINCT npi) AS providers, round(sum(total_services)) AS services, round(sum(avg_submitted_charge * total_services) / 1e9, 1) AS submitted_billions, round(sum(avg_medicare_allowed_amt * total_services) / 1e9, 1) AS allowed_billions FROM public.medicare_physician_service WHERE data_year = (SELECT yr FROM latest) AND hcpcs_drug_indicator = false AND avg_submitted_charge IS NOT NULL AND avg_medicare_allowed_amt IS NOT NULL; -- sw_submitted_to_allowed sw_allowed_to_paid providers services submitted_B allowed_B -- 3.41 1.28 1,207,305 1,605,743,071 352.2 103.1

Cite this study

Citation-ready for researchers and AI.

Fonteum Research Bureau (2026). Same procedure, different price: Medicare Part B charge variation, 2024. CMS Medicare Physician & Other Practitioners, snapshot 2026-06-14. https://fonteum.com/research/medicare-part-b-procedure-price-variation-2026

Check the chain

Each figure is snapshot-attested — re-derive the hash from the federal file.

1
Snapshot
cms-medicare-physician-service · 2026-06-14
2
Field hash
SHA-256 509dc7ce…2c23
3
Signed
Ed25519 · verifiable
✓ Chain signed · check it in Attest →

Related studies

  • FINANCIAL DISTRESS · JUN 2026Same DRG, wildly different price: hospital charge variation, 2024For the same Medicare DRG, hospitals bill wildly different amounts: across 219 high-volume codes in 2024, the 90th-percentile hospital charged a median of 3.8× what the 10th-percentile hospital charged for the identical stay. For sepsis — the most common code, billed by 2,661 hospitals — the spread is 4.4×.
  • FINANCIAL DISTRESS · JUN 2026DRG codes: Medicare inpatient payment and volume, 2024Across all 540 MS-DRGs in the 2024 Medicare inpatient file, hospitals were paid an average of $15,166 per stay against $92,408 in billed charges — a 6.1× gap. Sepsis (DRG 871) was the highest-volume code at 577,119 discharges; CAR T-cell therapy (DRG 018) the costliest at $434,771 per stay.
  • FINANCIAL DISTRESS · JUN 2026The most expensive Medicare Part D drugs are rarely the most prescribedEliquis cost Medicare Part D $19.88 billion in 2024 — the single costliest drug in the program, yet only its 12th most-prescribed. That inversion defines Part D: brand-name drugs are 23.9% of prescriptions but 90.1% of the dollars, while cheap generics carry the volume and almost none of the cost.
  • FINANCIAL DISTRESS · JUN 2026The 5% of prescribers behind half of Medicare's drug billIn 2024 the top 5% of Medicare Part D prescribers — 56,973 of 1.14 million — accounted for 53.5% of the program's $226.7 billion drug bill, while the bottom half split 0.4%. The top 1% alone drove $53.5 billion. The Gini coefficient across prescribers is 0.841.
  • WORKFORCE · JUN 2026Who prescribes Medicare's drug spending? Nurse practitioners now leadNurse practitioners drove $37.48 billion of Medicare Part D drug cost in 2024 — more than any other specialty, including internal medicine and cardiology. But the steepest bills come from oncology: hematology-oncologists averaged $2,441 per prescription, sixteen times the program-wide $153, on a fraction of the claims.

Federal source citations

  1. [1]CMS Medicare Physician & Other Practitioners · snapshot 2026-06-14 · federal source family · US-Government-Works
Dataset catalog →Source registry →Methodology →Chain integrity →All research →Provider lookup →

Fonteum Research · June 14, 2026 · All figures trace to the frozen federal-data snapshot cited above.

The substrate, by the numbers

44federal source familiesDistinct CMS, OIG, HRSA, FDA and peer datasets
33dataset pagesCitable, downloadable /data catalog pages
48reproducible studiesEach shipping the SQL behind its figures

Built on the authoritative federal record

The primary sources, named on every page.

These are the federal agencies whose public datasets Fonteum ingests and attributes — the issuing authorities, not customers or partners. Every figure on the site links back to one of them.

  • CMS
  • HHS-OIG
  • HRSA
  • FDA
  • NLM
  • NUCC
  • Census
  • BLS
  • BEA

See the full source registry, with license and refresh cadence for each →

Reproducible by design

Every figure traces to its federal source.

14-tuple provenance

Every rendered fact ties to a source URL, dataset ID, snapshot date, row key, and SHA-256 — the full chain-of-custody record.

Reproducible SQL

Each study ships the exact query behind its figures, run against the cited federal snapshot. Re-run it yourself.

Daily reconciliation

Published counts are reconciled against the upstream federal datasets on a daily cadence, with drift logged.

Named medical review

Reviewed by Jennifer Montecillo, MD, medical reviewer. Non-practicing medical reviewer.

Read the full provenance and attestation methodology →

Two doors

Use the free API and open data

Query providers, facilities, sanctions, and quality scores — each field carrying its federal source. Self-serve, no call to start.

Explore the API →Browse the data catalog →

Talk to us

Managed pilots, enterprise terms, and audit-ready, signed attestation packages for compliance, risk, and research teams.

Talk to us →
Fonteum
Products
The DifferAttestAPIFHIR API
Data
Care CompareResearchData catalogSources
Company
Why FonteumAboutPressEditorial policyCorrections
Legal
Privacy policyTerms of serviceMedical disclaimer

Reviewed by Jennifer Montecillo, MD, medical reviewer. Non-practicing medical reviewer.

© 2026 Fonteum LLC. All rights reserved.

The U.S. healthcare graph AI can cite — every fact carries its source.

Request access→