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