Skip to content
FonteumPublic-records evidence
FINANCIAL DISTRESS · ISSUE 069
cms-part-d-prescribersOriginal Research

The 5% of prescribers behind half of Medicare's drug bill

In 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.

BY FONTEUM LLC · JUNE 14, 2026 · 11 MIN READREVIEWED BY DR. JENNIFER MONTECILLO, MDSNAPSHOT 2026-04-04 · LAST UPDATED APRIL 4, 2026
CMS Medicare Part D Prescribers · 2026-04-04
Cumulative share of Part D drug cost by top band of prescribers, 2024cms-part-d-prescribers · 2026-04-04
Top 0.1% (1,140)
5.7
Top 1% (11,395)
23.6
Top 5% (56,973)
53.5
Top 10% (113,946)
71.3
Top 50% (569,728)
99.6
Built on CMS Medicare Part D Prescribers · snapshot 2026-04-04 · reproducible · re-derive the figures yourself
Key findings
of Medicare Part D's $226.7 billion 2024 drug bill — $121.2 billion — flowed through the top 5% of prescribers (56,973 of 1,139,455)
cms-part-d-prescribers · CMS
went through the top 1% alone — 11,395 prescribers, 23.6% of all program drug cost; a prescriber needed at least $2.66 million in drug spending to reach that tier
cms-part-d-prescribers · CMS
Gini coefficient of drug spending across prescribers — close to the ~0.85 of US household wealth and far above the ~0.41 of US income; the bottom half of prescribers split just 0.4%
cms-part-d-prescribers · CMS
the median prescriber accounted for $9,406 of Part D drug cost while the mean was $198,991 — a 21-fold gap pulled up by oncology and other specialty-drug prescribers at the top
cms-part-d-prescribers · CMS

The federal Medicare Part D Prescribers file records, once a year, every drug each clinician prescribed to Medicare beneficiaries — the number of claims, the days of supply, and the total amount the program and its plans paid. The companion studies in this series ask which drugs cost the most (the costliest are rarely the most prescribed) and who writes the prescriptions (nurse practitioners now lead by volume). This one asks a different question of the same file: of the $226.7 billion Medicare paid for drugs in 2024, how evenly is it spread across the people who prescribe them? The answer is that it is not spread at all.

More than half the money flows through 5% of prescribers

Group the 2024 records by prescriber and rank clinicians from highest drug-cost total to lowest. The top 5% of prescribers — 56,973 of the 1,139,455 who appear in the file — accounted for 53.5% of every Part D drug dollar, about $121.2 billion of $226.7 billion. Narrow further: the top 1%, just 11,395 prescribers, drove 23.6% — nearly a quarter of the entire program through about one prescriber in a hundred. Narrow again to the top 0.1%, 1,140 prescribers, and the share is still 5.7%, more than a twentieth of a quarter-trillion-dollar program in roughly a thousand people.

The curve is just as steep at the bottom. A prescriber needed at least $2.66 million in drug spending to sit in the top 1%, and at least $956,543 to reach the top 5%. Below the line the numbers collapse: the median prescriber accounted for $9,406, and 815,543 prescribers — more than seven in ten — each stayed under $100,000 for the year. The bottom half, 569,728 prescribers, together account for 0.4% of the program's drug cost.

Medicare's drug spending is nearly as concentrated as American wealth — 5% of prescribers sit behind more than half of it, and the bottom half together account for less than half a percent.

The whole distribution, band by band

The clearest way to see the concentration is the cumulative share at each cut of the ranking. Each row is the same pool of dollars, read from the top down.

BandPrescribersCumulative drug costCumulative shareMinimum to qualify
Top 0.1%1,140$12,946,341,0775.7%$7,324,098
Top 1%11,395$53,451,754,28623.6%$2,658,615
Top 5%56,973$121,234,049,37653.5%$956,543
Top 10%113,946$161,777,228,96171.3%$534,990
Top 25%284,864$211,745,804,14693.4%$139,640
Top 50%569,728$225,834,479,95999.6%$9,406
All prescribers1,139,455$226,740,902,131100.0%

Source: CMS Medicare Part D Prescribers DY2024, drug cost per prescriber NPI, via the per-prescriber rollup in the reproducibility block.

By the top decile the pool is nearly exhausted: the top 10% of prescribers hold 71.3% of the money, and by the top quarter the share is 93.4%. The distance between the 93.4% line at the top quartile and the 0.4% line at the bottom half is the whole story — Part D drug spending does not taper toward the median prescriber, it falls off a cliff a few percent down the ranking.

More concentrated than income

To put the steepness on a familiar scale, compute the Gini coefficient across prescribers — the standard 0-to-1 measure of inequality, where 0 is every prescriber accounting for the same amount and 1 is a single prescriber accounting for everything. For Part D drug spending in 2024, the Gini is 0.841.

That is a high figure. US household income carries a Gini of roughly 0.41; US household wealth, far more skewed, sits near 0.85. At 0.841, the distribution of drug spending across prescribers sits almost exactly at the wealth end of the scale — far more unequal than how income is distributed across American households.

A Gini of 0.841 does not describe how much any clinician earns — only how unevenly Part D drug spending lands across the prescribers who appear in the file. Most prescribers write a few thousand dollars of generics; a small group prescribes biologics and oncology regimens costing tens of thousands per patient. The coefficient measures that gap, not prescriber income or conduct.

The mean-versus-median gap says the same thing in dollars. The average prescriber accounted for $198,991 of drug cost; the median accounted for $9,406. Whenever a mean sits twenty-one times above its median, a small set of very large values is doing the lifting — here, the 53,573 prescribers who each crossed $1 million, and above them the 446 prescribers who each crossed $10 million, topping out at a single reported NPI tied to $108.7 million in drug cost.

Who sits in the top 1%

The concentration is not random across medicine — it tracks the specialties whose drugs are expensive, not the ones who write the most prescriptions. Break the 11,395 top-1% prescribers down by their reported specialty and the cancer clinic dominates.

SpecialtyPrescribers in top 1%Top-1% drug costShare of top-1% pool
Hematology-Oncology2,446$11,624,439,06921.7%
Internal Medicine1,243$5,549,338,11610.4%
Nurse Practitioner1,211$5,441,850,91610.2%
Rheumatology953$4,200,449,7067.9%
Medical Oncology656$3,143,194,6135.9%
Pulmonary Disease577$2,986,889,1445.6%
Endocrinology714$2,830,146,4885.3%
Neurology600$2,680,996,7715.0%

Source: CMS Medicare Part D Prescribers DY2024, top 1% of prescribers by drug cost, reported specialty.

Hematology-Oncology alone supplies 2,446 of the top-1% prescribers and 21.7% of their dollars; fold in Medical Oncology and the oncology family reaches 3,102 prescribers and 27.6% of all top-1% drug cost — more than a quarter of the most-concentrated tier in one field. The pattern is structural, not behavioral: oncology and rheumatology regimens are dominated by biologics and specialty drugs that can cost tens of thousands of dollars per patient per year, so a single specialist's panel runs up a drug-cost total that hundreds of primary-care clinicians prescribing generics never approach. The presence of Internal Medicine and Nurse Practitioner near the top reflects volume — large panels of patients on moderately priced drugs — rather than per-patient cost.

Two economies in one file

The concentration resolves the file into two activities that share a program but little else. At the top, a few thousand specialists prescribe biologics and oncology drugs — high cost per claim, narrow patient panels — that account for the majority of the money. At the bottom, hundreds of thousands of clinicians prescribe high-volume generics — statins, blood-pressure pills, thyroid medication — cheap per claim and summing, across the entire bottom half, to barely four-tenths of one percent of the total. The companion study on the most expensive Part D drugs takes that split apart drug by drug; the prescriber distribution is the same divide seen from the clinician's side of the ledger, and the GLP-1 spending study shows a single drug class — now $24.6 billion a year — straddling both.

This is why a single number like "$226.7 billion across 1.14 million prescribers" misleads. It implies an average of roughly $199,000 a prescriber, when the typical prescriber accounts for $9,406 and a few account for eight figures. The aggregate is real; the average is a fiction that no median prescriber experiences.

What one record actually is

Each row in cms_part_d_prescribers is one prescriber's full-year activity for one drug, carrying the prescriber's NPI, reported specialty, claim count, and total drug cost. Rolling those rows up by prescriber_npi gives one drug-cost total per prescriber — the unit of this study. A clinician who prescribed one expensive biologic and one who prescribed forty generics each become one observation; the concentration figures rank those observations and measure how the dollars distribute across them. Because the unit is the prescriber, no count or share in this study names, ranks, or surfaces an individual clinician.

Methodology

All figures are aggregations over the cms_part_d_prescribers table, populated from the CMS Medicare Part D Prescribers "by Provider and Drug" data-year-2024 release (published 2026-04-04, public, read-only). The table holds 28,023,892 prescriber-by-drug records. The prescriber universe is every record carrying a prescriber NPI: 1,139,455 prescribers holding $226,740,902,131 in total drug cost — the same program total reported in the GLP-1 spending study.

Per-prescriber totals are computed as sum(total_drug_cost) GROUP BY prescriber_npi — one prescriber, one observation. Cumulative shares rank prescribers descending and sum each top band as a fraction of the program total. The Gini coefficient uses the rank formula 2·Σ(i·cost)/(n·Σcost) − (n+1)/n over ascending ranks. Because a count plus percentile over the 28-million-row table exceeds PostgREST's statement timeout, the figures are point-in-time to the frozen 2026-04-04 snapshot; the exact SQL is in the reproducibility block below and on the Part D prescribers dataset page. Methodology version: part-d-concentration/v1.

Limitations

  • Drug cost, not prescriber income. "Drug cost" is what Medicare and its plans paid for the drugs a prescriber's patients filled. It is not the prescriber's revenue or compensation, and a large total reflects expensive drugs and large panels, not conduct.
  • Eleven-claim floor. CMS suppresses any prescriber-and-drug record with ten or fewer claims for patient privacy, so those rows are absent from the public file (minimum observed claim count is 11). Excluding the smallest records slightly understates the long tail; including them would make the distribution marginally less concentrated, not more.
  • Snapshot, not a trend. Figures reflect the 2026-04-04 DY2024 release. CMS restates prior years and publishes a new file annually, so the bands shift between releases.
  • One-off totals steepen the top. A single very high-cost prescriber (the $108.7 million reported NPI at the maximum) lifts the very top of the distribution. The concentration is real either way, but the extreme tail is sensitive to a handful of records.
  • Reported NPI, not resolved. Prescribers are grouped by the NPI as reported, with no cross-NPI entity resolution; the file also includes some organizational prescriber NPIs alongside individuals, so a clinician reported under two NPIs would appear as two prescribers.
  • Spending concentration, not influence, and aggregate-only. The figures measure how Part D drug spending is distributed across prescribers, never whether any prescription was appropriate. No individual prescriber is named, ranked, or surfaced.

Sources

The companion dataset page for CMS Medicare Part D Prescribers lists the full schema and refresh cadence; the drug-side counterpart sits in the most expensive Part D drugs, the specialty cut in who prescribes Medicare's drug spending, and the recipient-side twin in the 1% of doctors who get two-thirds of industry money.

Frequently asked questions

What share of Medicare Part D drug spending goes to the top prescribers?
In 2024 the top 5% of prescribers — 56,973 of 1,139,455 — accounted for 53.5% of the program's $226.7 billion drug bill, about $121.2 billion. The top 1% alone (11,395 prescribers) drove $53.5 billion, 23.6% of all program drug cost, and the top 10% reached 71.3%.
How concentrated is it compared with income or wealth?
More concentrated than income, and close to wealth. The Gini coefficient of drug spending across prescribers is 0.841, where 0 is perfect equality and 1 is one prescriber accounting for everything. US household income carries a Gini of roughly 0.41 and US wealth roughly 0.85, so Part D drug spending lands near the wealth end of the scale.
How much does a typical prescriber account for?
Far less than the average implies. The median prescriber accounted for $9,406 of Part D drug cost in 2024 while the mean was $198,991 — a 21-fold gap. 815,543 prescribers, more than seven in ten, each stayed under $100,000, and the bottom half of prescribers together account for just 0.4% of the program's drug cost.
Who sits in the top 1% of prescribers?
Specialty-drug prescribers, overwhelmingly. Hematology-Oncology alone supplies 2,446 of the 11,395 top-1% prescribers and 21.7% of their dollars; adding Medical Oncology brings the oncology family to 3,102 prescribers and 27.6% of the top-1% pool. Rheumatology, Pulmonary Disease, Endocrinology and Neurology fill out the rest — the fields where a single biologic or oncology regimen can cost tens of thousands of dollars a year per patient.
Does a high drug-cost total mean a prescriber did something wrong?
No. A prescriber's Part D drug-cost total reflects the price and volume of the drugs their patients filled, not the prescriber's income or any judgment about care. Oncologists and rheumatologists sit at the top because the drugs they prescribe are expensive, not because they prescribe carelessly. The data describes where spending concentrates, never whether any prescription was appropriate.
Why is the data limited to prescribers with more than ten claims for a drug?
CMS suppresses any prescriber-and-drug record with ten or fewer claims to protect patient privacy, so those rows never appear in the public file. Every figure here is computed over the records CMS publishes (28.0 million prescriber-by-drug rows, minimum 11 claims each). Excluding the smallest records slightly understates the long tail, which would make the distribution marginally less concentrated, not more.
Can I reproduce these concentration figures?
Yes. Every figure aggregates the cms_part_d_prescribers table (28,023,892 records, data year 2024) by prescriber_npi. The exact SQL — the per-prescriber rollup, the percentile bands, the Gini coefficient, and the specialty mix of the top 1% — is published in the reproducibility block below. No individual prescriber is named or ranked.

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.

Reproducibility

Every claim, reproducible

The SQL
medicare-part-d-prescriber-concentration-2024.sql
-- Medicare Part D prescriber CONCENTRATION — fully reproducible query.
--
-- Question: among the clinicians who prescribe to Medicare beneficiaries, how
-- concentrated is the drug spending? We measure, over the prescriber-NPI
-- universe, what share of all Part D drug cost flows to the top 0.1% / 1% / 5%
-- / 10% / 50% of prescribers, the Gini coefficient across prescribers, and the
-- median-vs-mean gap. This is the PRESCRIBER-side companion to the costliest-
-- drugs study (drug-side: 12 drugs vs the rest) and the recipient-side twin of
-- the Open Payments concentration study (where the top 1% of physician
-- recipients take 66% of industry money). Here the axis is how drug spending
-- lands on prescribers, not which drugs or which companies.
--
-- Source:
--   public.cms_part_d_prescribers — CMS Medicare Part D Prescribers
--     "by Provider and Drug", data year 2024 (CMS release 2026-04-04).
--     One row per prescriber x drug. 28,023,892 records; public, read-only. License: US-Government-Works (17 U.S.C. §105).
--
-- Suppression: CMS omits any prescriber-and-drug record with <= 10 claims for
--   patient privacy, so the public file's minimum claim count is 11. Every
--   figure below is computed over the published records; excluding the smallest
--   rows slightly UNDERSTATES the long tail (i.e. true concentration is, if
--   anything, marginally lower than reported — never higher).
--
-- Prescriber universe: records carrying a prescriber NPI. 1,139,455 prescribers
--   holding $226,740,902,131 in total drug cost (the same program total used by
--   the GLP-1 spending study). null_npi rows = 0.
--
-- These aggregates run server-side (direct SQL) — a count + percentile over the
-- 28M-row table exceeds PostgREST's 8s statement timeout, which is why the page
-- renders point-in-time figures from this frozen 2026-04-04 snapshot rather
-- than reading the table at request time.

-- Per-prescriber rollup reused by every query below.
WITH recip AS (
  SELECT prescriber_npi,
         sum(total_drug_cost)::numeric AS amt,
         max(prescriber_specialty)     AS spec
  FROM public.cms_part_d_prescribers
  WHERE data_year = 2024
    AND prescriber_npi IS NOT NULL
  GROUP BY prescriber_npi
)

-- ============================================================================
-- (1) Headline: cumulative share of drug cost by top band.
--     The top 5% share (53.5%) is the lead figure; top 1% (23.6%) the second.
-- ============================================================================
SELECT b.label,
       ceil(max(n) * b.frac)                                           AS prescribers_in_band,
       round(sum(amt) FILTER (WHERE rk <= ceil(n * b.frac)))           AS cum_dollars,
       round(sum(amt) FILTER (WHERE rk <= ceil(n * b.frac))
             / max(tot) * 100, 1)                                      AS cum_share_pct,
       round(min(amt) FILTER (WHERE rk <= ceil(n * b.frac)))           AS min_amount_in_band
FROM (
  SELECT amt,
         row_number() OVER (ORDER BY amt DESC) AS rk,
         count(*)     OVER ()                  AS n,
         sum(amt)     OVER ()                  AS tot
  FROM recip
) ranked
CROSS JOIN (VALUES ('Top 0.1%', 0.001), ('Top 1%', 0.01), ('Top 5%', 0.05),
                   ('Top 10%', 0.10), ('Top 25%', 0.25), ('Top 50%', 0.50),
                   ('All 100%', 1.0)) AS b(label, frac)
GROUP BY b.label, b.frac
ORDER BY b.frac;
--  Top 0.1%     1,140     12,946,341,077   5.7   7,324,098
--  Top 1%      11,395     53,451,754,286  23.6   2,658,615
--  Top 5%      56,973    121,234,049,376  53.5     956,543
--  Top 10%    113,946    161,777,228,961  71.3     534,990
--  Top 25%    284,864    211,745,804,146  93.4     139,640
--  Top 50%    569,728    225,834,479,959  99.6       9,406
--  All 100% 1,139,455    226,740,902,131 100.0           0
--  (bottom 50% therefore split 100.0 - 99.6 = 0.4% of the dollars,
--   i.e. 569,728 prescribers share $906,422,172.)

-- ============================================================================
-- (2) Distribution shape — median vs mean, percentiles, and the long tail.
-- ============================================================================
SELECT
  count(*)                                                        AS prescribers,
  round(avg(amt))                                                 AS mean_prescriber,
  round(percentile_cont(0.5)  WITHIN GROUP (ORDER BY amt))        AS median_prescriber,
  round(percentile_cont(0.9)  WITHIN GROUP (ORDER BY amt))        AS p90_prescriber,
  round(percentile_cont(0.99) WITHIN GROUP (ORDER BY amt))        AS p99_prescriber,
  round(max(amt))                                                 AS max_prescriber,
  count(*) FILTER (WHERE amt >= 10000000)                         AS prescribers_ge_10m,
  count(*) FILTER (WHERE amt >= 1000000)                          AS prescribers_ge_1m,
  count(*) FILTER (WHERE amt <  100000)                           AS prescribers_lt_100k
FROM recip;
--  prescribers 1,139,455 · mean $198,991 · median $9,406 · p90 $534,987
--    · p99 $2,658,595 · max $108,716,019 (one reported prescriber NPI)
--  >=$10M 446 · >=$1M 53,573 · <$100k 815,543

-- ============================================================================
-- (3) Gini coefficient across prescribers + bottom-50% share.
--     Gini = (2 * sum(i * amt) / (n * sum(amt))) - (n + 1) / n,
--     with i = ascending rank. 0 = perfectly equal, 1 = one prescriber takes all.
-- ============================================================================
WITH ord AS (
  SELECT amt, row_number() OVER (ORDER BY amt) AS i FROM recip
),
agg AS (
  SELECT count(*)::numeric AS n,
         sum(amt)          AS tot,
         sum(i * amt)      AS wsum,
         sum(amt) FILTER (WHERE i <= (SELECT count(*) FROM recip) * 0.5) AS bottom50
  FROM ord
)
SELECT round((2.0 * wsum / (n * tot) - (n + 1.0) / n)::numeric, 3) AS gini,
       round((bottom50 / tot * 100)::numeric, 2)                  AS bottom50_share_pct
FROM agg;
--  gini 0.841 · bottom50_share 0.40   (US income Gini ≈ 0.41, US wealth ≈ 0.85)

-- ============================================================================
-- (4) Who sits in the top 1% — specialty mix of the 11,395 highest-cost
--     prescribers (reported specialty). No prescriber named.
-- ============================================================================
WITH ranked AS (
  SELECT amt, spec,
         row_number() OVER (ORDER BY amt DESC) AS rk,
         count(*)     OVER ()                  AS n
  FROM recip
),
top1 AS (
  SELECT amt, coalesce(nullif(trim(spec), ''), '(unreported)') AS specialty
  FROM ranked WHERE rk <= ceil(n * 0.01)
)
SELECT specialty,
       count(*)                                               AS prescribers_in_top1pct,
       round(sum(amt))                                        AS dollars,
       round(sum(amt) / (SELECT sum(amt) FROM top1) * 100, 1) AS pct_of_top1_dollars
FROM top1
GROUP BY specialty
ORDER BY dollars DESC
LIMIT 8;
--  Hematology-Oncology   2,446   11,624,439,069  21.7
--  Internal Medicine     1,243    5,549,338,116  10.4
--  Nurse Practitioner    1,211    5,441,850,916  10.2
--  Rheumatology            953    4,200,449,706   7.9
--  Medical Oncology        656    3,143,194,613   5.9
--  Pulmonary Disease       577    2,986,889,144   5.6
--  Endocrinology           714    2,830,146,488   5.3
--  Neurology               600    2,680,996,771   5.0
--  (oncology family — Hematology-Oncology + Medical Oncology — = 3,102
--   prescribers and 27.6% of all top-1% dollars.)

-- ============================================================================
-- (5) Universe reconciliation — totals over the published 2024 file.
-- ============================================================================
SELECT
  count(*)                                          AS total_rows,
  count(DISTINCT prescriber_npi)                    AS distinct_prescribers,
  round(sum(total_drug_cost))                       AS total_drug_cost,
  sum(total_claims)::bigint                         AS total_claims,
  min(total_claims)                                 AS min_claims,
  count(*) FILTER (WHERE prescriber_npi IS NULL)    AS null_npi_rows
FROM public.cms_part_d_prescribers
WHERE data_year = 2024;
--  total_rows 28,023,892 · distinct_prescribers 1,139,455
--  total_drug_cost 226,740,902,131 · total_claims 1,479,628,807
--  min_claims 11 (CMS suppresses <=10) · null_npi_rows 0
The snapshot
dataset_idcms-part-d-prescribers
snapshot_date2026-04-04
The JOINs
prescriber universe: data_year=2024 AND prescriber_npi IS NOT NULL                  -- 1,139,455 prescribers
per-prescriber cost = sum(total_drug_cost) GROUP BY prescriber_npi                   -- one prescriber = one observation
program total       = sum(total_drug_cost) over the universe                         -- $226,740,902,131
top5pct_share       = sum(cost where rank <= ceil(0.05*n)) / total                   -- $121,234,049,376 / $226,740,902,131 = 53.5%
top1pct_share       = sum(cost where rank <= ceil(0.01*n)) / total                   -- $53,451,754,286 = 23.6%
gini = 2*sum(i*cost)/(n*sum(cost)) - (n+1)/n, i = ascending rank                     -- 0.841
median_prescriber / mean_prescriber = percentile_cont(0.5) / avg(cost)               -- $9,406 / $198,991
The pipeline version
methodology_versionpart-d-concentration/v1

Reproduce this

Run the exact query against the frozen 2026-04-04.

-- Medicare Part D prescriber CONCENTRATION — fully reproducible query. -- -- Question: among the clinicians who prescribe to Medicare beneficiaries, how -- concentrated is the drug spending? We measure, over the prescriber-NPI -- universe, what share of all Part D drug cost flows to the top 0.1% / 1% / 5% -- / 10% / 50% of prescribers, the Gini coefficient across prescribers, and the -- median-vs-mean gap. This is the PRESCRIBER-side companion to the costliest- -- drugs study (drug-side: 12 drugs vs the rest) and the recipient-side twin of -- the Open Payments concentration study (where the top 1% of physician -- recipients take 66% of industry money). Here the axis is how drug spending -- lands on prescribers, not which drugs or which companies. -- -- Source: -- public.cms_part_d_prescribers — CMS Medicare Part D Prescribers -- "by Provider and Drug", data year 2024 (CMS release 2026-04-04). -- One row per prescriber x drug. 28,023,892 records; public, read-only. License: US-Government-Works (17 U.S.C. §105). -- -- Suppression: CMS omits any prescriber-and-drug record with <= 10 claims for -- patient privacy, so the public file's minimum claim count is 11. Every -- figure below is computed over the published records; excluding the smallest -- rows slightly UNDERSTATES the long tail (i.e. true concentration is, if -- anything, marginally lower than reported — never higher). -- -- Prescriber universe: records carrying a prescriber NPI. 1,139,455 prescribers -- holding $226,740,902,131 in total drug cost (the same program total used by -- the GLP-1 spending study). null_npi rows = 0. -- -- These aggregates run server-side (direct SQL) — a count + percentile over the -- 28M-row table exceeds PostgREST's 8s statement timeout, which is why the page -- renders point-in-time figures from this frozen 2026-04-04 snapshot rather -- than reading the table at request time. -- Per-prescriber rollup reused by every query below. WITH recip AS ( SELECT prescriber_npi, sum(total_drug_cost)::numeric AS amt, max(prescriber_specialty) AS spec FROM public.cms_part_d_prescribers WHERE data_year = 2024 AND prescriber_npi IS NOT NULL GROUP BY prescriber_npi ) -- ============================================================================ -- (1) Headline: cumulative share of drug cost by top band. -- The top 5% share (53.5%) is the lead figure; top 1% (23.6%) the second. -- ============================================================================ SELECT b.label, ceil(max(n) * b.frac) AS prescribers_in_band, round(sum(amt) FILTER (WHERE rk <= ceil(n * b.frac))) AS cum_dollars, round(sum(amt) FILTER (WHERE rk <= ceil(n * b.frac)) / max(tot) * 100, 1) AS cum_share_pct, round(min(amt) FILTER (WHERE rk <= ceil(n * b.frac))) AS min_amount_in_band FROM ( SELECT amt, row_number() OVER (ORDER BY amt DESC) AS rk, count(*) OVER () AS n, sum(amt) OVER () AS tot FROM recip ) ranked CROSS JOIN (VALUES ('Top 0.1%', 0.001), ('Top 1%', 0.01), ('Top 5%', 0.05), ('Top 10%', 0.10), ('Top 25%', 0.25), ('Top 50%', 0.50), ('All 100%', 1.0)) AS b(label, frac) GROUP BY b.label, b.frac ORDER BY b.frac; -- Top 0.1% 1,140 12,946,341,077 5.7 7,324,098 -- Top 1% 11,395 53,451,754,286 23.6 2,658,615 -- Top 5% 56,973 121,234,049,376 53.5 956,543 -- Top 10% 113,946 161,777,228,961 71.3 534,990 -- Top 25% 284,864 211,745,804,146 93.4 139,640 -- Top 50% 569,728 225,834,479,959 99.6 9,406 -- All 100% 1,139,455 226,740,902,131 100.0 0 -- (bottom 50% therefore split 100.0 - 99.6 = 0.4% of the dollars, -- i.e. 569,728 prescribers share $906,422,172.) -- ============================================================================ -- (2) Distribution shape — median vs mean, percentiles, and the long tail. -- ============================================================================ SELECT count(*) AS prescribers, round(avg(amt)) AS mean_prescriber, round(percentile_cont(0.5) WITHIN GROUP (ORDER BY amt)) AS median_prescriber, round(percentile_cont(0.9) WITHIN GROUP (ORDER BY amt)) AS p90_prescriber, round(percentile_cont(0.99) WITHIN GROUP (ORDER BY amt)) AS p99_prescriber, round(max(amt)) AS max_prescriber, count(*) FILTER (WHERE amt >= 10000000) AS prescribers_ge_10m, count(*) FILTER (WHERE amt >= 1000000) AS prescribers_ge_1m, count(*) FILTER (WHERE amt < 100000) AS prescribers_lt_100k FROM recip; -- prescribers 1,139,455 · mean $198,991 · median $9,406 · p90 $534,987 -- · p99 $2,658,595 · max $108,716,019 (one reported prescriber NPI) -- >=$10M 446 · >=$1M 53,573 · <$100k 815,543 -- ============================================================================ -- (3) Gini coefficient across prescribers + bottom-50% share. -- Gini = (2 * sum(i * amt) / (n * sum(amt))) - (n + 1) / n, -- with i = ascending rank. 0 = perfectly equal, 1 = one prescriber takes all. -- ============================================================================ WITH ord AS ( SELECT amt, row_number() OVER (ORDER BY amt) AS i FROM recip ), agg AS ( SELECT count(*)::numeric AS n, sum(amt) AS tot, sum(i * amt) AS wsum, sum(amt) FILTER (WHERE i <= (SELECT count(*) FROM recip) * 0.5) AS bottom50 FROM ord ) SELECT round((2.0 * wsum / (n * tot) - (n + 1.0) / n)::numeric, 3) AS gini, round((bottom50 / tot * 100)::numeric, 2) AS bottom50_share_pct FROM agg; -- gini 0.841 · bottom50_share 0.40 (US income Gini ≈ 0.41, US wealth ≈ 0.85) -- ============================================================================ -- (4) Who sits in the top 1% — specialty mix of the 11,395 highest-cost -- prescribers (reported specialty). No prescriber named. -- ============================================================================ WITH ranked AS ( SELECT amt, spec, row_number() OVER (ORDER BY amt DESC) AS rk, count(*) OVER () AS n FROM recip ), top1 AS ( SELECT amt, coalesce(nullif(trim(spec), ''), '(unreported)') AS specialty FROM ranked WHERE rk <= ceil(n * 0.01) ) SELECT specialty, count(*) AS prescribers_in_top1pct, round(sum(amt)) AS dollars, round(sum(amt) / (SELECT sum(amt) FROM top1) * 100, 1) AS pct_of_top1_dollars FROM top1 GROUP BY specialty ORDER BY dollars DESC LIMIT 8; -- Hematology-Oncology 2,446 11,624,439,069 21.7 -- Internal Medicine 1,243 5,549,338,116 10.4 -- Nurse Practitioner 1,211 5,441,850,916 10.2 -- Rheumatology 953 4,200,449,706 7.9 -- Medical Oncology 656 3,143,194,613 5.9 -- Pulmonary Disease 577 2,986,889,144 5.6 -- Endocrinology 714 2,830,146,488 5.3 -- Neurology 600 2,680,996,771 5.0 -- (oncology family — Hematology-Oncology + Medical Oncology — = 3,102 -- prescribers and 27.6% of all top-1% dollars.) -- ============================================================================ -- (5) Universe reconciliation — totals over the published 2024 file. -- ============================================================================ SELECT count(*) AS total_rows, count(DISTINCT prescriber_npi) AS distinct_prescribers, round(sum(total_drug_cost)) AS total_drug_cost, sum(total_claims)::bigint AS total_claims, min(total_claims) AS min_claims, count(*) FILTER (WHERE prescriber_npi IS NULL) AS null_npi_rows FROM public.cms_part_d_prescribers WHERE data_year = 2024; -- total_rows 28,023,892 · distinct_prescribers 1,139,455 -- total_drug_cost 226,740,902,131 · total_claims 1,479,628,807 -- min_claims 11 (CMS suppresses <=10) · null_npi_rows 0

Download the data: SQL · JSON · CSV

Cite this study

Citation-ready for researchers and AI.

Fonteum Research Bureau (2026). The 5% of prescribers behind half of Medicare's drug bill. CMS Medicare Part D Prescribers, snapshot 2026-04-04. https://fonteum.com/research/medicare-part-d-prescriber-concentration-2024

Check the chain

The cited snapshot identifies the federal file. Where an attestation is present, its file hash can be re-derived; figures are not individually signed.

1
Snapshot
cms-part-d-prescribers · 2026-04-04
2
Supplied file hash
Not supplied
3
Snapshot attestation
Inspect supplied artifact
Figures are not individually signed · check it in Attest →

Federal source citations

  1. CMS Medicare Part D Prescribers · snapshot 2026-04-04 · federal source family · US-Government-Works

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

What’s on file, by the numbers

Platform snapshot · 2026-07-30

13.4Mproviders & companiesProviders, organizations, owners, and facilities on file
26.2Msource-linked factsSource-linked field facts in the dated platform snapshot
90sources with dataDistinct snapshot source IDs with at least one positive record count
78fresh sourcesDistinct source IDs whose latest positive-data snapshot falls within the preceding 45 days
111sources integratedActive registry rows; integration does not establish a load
13state Medicaid jurisdictionsDistinct states represented in the state-exclusions serving table

Integrated, with-data, and fresh-observation counts are separate. No platform-wide source-completeness count is published. Completeness is source-specific and must be evaluated against the named source's expected scope. State coverage is a separate jurisdiction measure.

Source authority is record-specific

Use the issuer named on the record.

Fonteum spans federal, state, and global public publishers. A source page or returned record identifies its issuer and dataset where that metadata is available. A platform registry count does not assign every page to one authority or establish loaded, fresh, or complete coverage.

Browse source records and their stated limitations →

Reproducible by design

Inspect the evidence each published figure actually supplies.

Source and date

Research pages expose the named public file and observation date where those fields are available. Source-file SHA-256 coverage is separate; facts do not currently link deterministically to signatures.

Available derivation

Studies with a retained release and committed derivation link the SQL or method used. Other studies state the evidence and reproduction limits they actually have.

Daily observations

Dated table row-count observations can detect local drift. They do not imply that an upstream publisher released or Fonteum ingested new data that day.

Named medical review

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

Read the full provenance and attestation methodology →

Request access