Research / 2026-09-10

A weekly generic deflation index from the price pharmacies actually pay

The CMS NADAC survey gives a weekly acquisition price for about 30,000 drug codes; chained into an equal-weighted index it shows generic prices rising in early 2025 and falling 8.9% year over year by September 2026, with Dr. Reddy's, Amneal and Teva deflating faster than the median.

What the data is

NADAC is the National Average Drug Acquisition Cost: CMS surveys retail pharmacies and publishes, every week, the average price paid per unit for about 30,000 National Drug Codes. It is a pharmacy acquisition price, not a manufacturer net price. It excludes rebates and the specialty and mail channels, and it is a survey average rather than a transaction record (docs/data-dictionaries/nadac_drug_prices.md, Known limits).

Healthparse holds the weekly files as a panel of 2,666,667 NDC-weeks across 88 weeks, 2025-01-01 to 2026-09-02, and derives a weekly table, nadac_generic_index_weekly, across all generic (classification = 'G') NDCs: the median and mean week-over-week and year-over-year change, the share of NDCs falling, rising and unchanged, the number repriced, and a chained index of the median week-over-week change with base 100 at 2025-01-01. This note uses that table and one aggregate query on the underlying weekly price matview.

The reprice-week pattern

Each weekly file is a full snapshot, but CMS reprices the whole file roughly monthly. In the 88 weeks loaded there are 20 weeks in which more than 1,000 generic NDCs changed price; in each of those weeks between 26,989 and 27,438 NDCs moved. In the other 68 weeks the most that moved was 149. The median week-over-week change is therefore exactly zero in about three weeks out of four, and the index level steps once a month. Read the series on reprice weeks, or read the year-over-year columns, which compare each NDC to the file 364 days earlier and are available from 2025-12-24.

The index

Reprice weeks only. Median week-over-week change across generic NDCs, share of generic NDCs whose price fell, and the chained level.

Reprice week Median WoW % Share falling Index level
2025-01-22 -0.27 0.54 99.73
2025-02-19 5.58 0.17 105.29
2025-03-19 3.67 0.18 109.15
2025-04-23 -0.31 0.56 108.81
2025-05-21 -0.37 0.57 108.40
2025-06-18 0.00 0.47 108.40
2025-07-23 -0.60 0.60 107.75
2025-08-20 -0.07 0.51 107.67
2025-09-17 -1.76 0.73 105.77
2025-10-22 -0.61 0.58 105.13
2025-11-19 -0.21 0.53 104.91
2025-12-17 -0.12 0.52 104.79
2026-01-21 -0.81 0.62 103.94
2026-02-18 -1.57 0.72 102.31
2026-03-18 -0.34 0.57 101.96
2026-04-22 -0.21 0.53 101.75
2026-05-20 0.00 0.48 101.75
2026-06-17 -0.78 0.64 100.95
2026-07-22 -1.04 0.66 99.91
2026-08-19 -0.32 0.55 99.58

The shape is two phases. The February and March 2025 reprices raised the median generic price by 5.58% and 3.67% in consecutive months, with only 17% to 18% of NDCs falling; the index peaked at 109.15. Every reprice since April 2025 has been flat or negative. The largest single-month declines were September 2025 (-1.76%, 73% of NDCs falling) and February 2026 (-1.57%, 72% falling). The level crossed back below 100 on the July 2026 reprice and stands at 99.58 as of the 2026-09-02 file.

Year-over-year, which is the cleaner deflation read, moves with the base. In the week of 2025-12-24, the first with a 52-week comparison, the median generic NDC was 3.44% above a year earlier. On 2026-02-18 the comparison crossed the February 2025 reprice and the median turned to -3.61%. On 2026-03-18 it crossed the March 2025 reprice and reached -7.79%. As of 2026-09-02 the median generic NDC is 8.91% below its price a year earlier; the mean is -10.30%. The comparison base will not include the early-2025 increases after March 2027.

By listed manufacturer

Year-over-year change for the generic NDCs of five listed manufacturers in the latest file, 2026-09-02. Ticker is assigned by labeler of record from the Healthparse map (data/reference/ndc-labeler-tickers.json). The query was an aggregate on the nadac_weekly_prices matview filtered on its (ticker, week_date) index and ran in about two seconds.

Ticker Generic NDCs in file With YoY Median YoY % Mean YoY % Share falling YoY
RDY 616 578 -11.66 -13.70 82.0%
AMRX 1,338 1,248 -10.17 -12.23 82.8%
TEVA 1,300 1,233 -9.42 -10.04 80.6%
VTRS 858 844 -8.88 -8.42 78.8%
PRGO 161 150 1.61 2.80 41.3%
All generic 27,626 24,794 -8.91 -10.30

Dr. Reddy's, Amneal and Teva are deflating faster than the market median; Viatris is at the median. Perrigo's generic NDCs are up 1.61% at the median, with fewer than half falling. Perrigo has the smallest count here, 161 NDCs. The otc_indicator column separates over-the-counter from prescription products; this note does not split it.

These are equal-weighted across NDCs. A company's revenue exposure depends on its volume mix, which NADAC does not carry.

Distributors

No figure for generic deflation as reported by McKesson, Cencora or Cardinal is held in this repository. The nearest primary statement found on 2026-09-10 is in Cencora's Form 10-K for the fiscal year ended September 30, 2025, filed 2025-11-25, in the MD&A discussion of cost of goods sold (https://www.sec.gov/Archives/edgar/data/1140859/000114085925000131/cor-20250930.htm): "The LIFO credit in fiscal 2025 was higher than the LIFO credit in fiscal 2024 primarily due to higher generic pharmaceutical deflation, offset in part by slightly higher brand pharmaceutical inflation." The statement is qualitative; it gives no rate. It covers October 2024 to September 2025 and is an inventory-cost effect, not a sell-side price series. Next to it, the Healthparse index over the same calendar months rose from 100.00 at 2025-01-01 to 105.77 at 2025-09-17 on the early-2025 reprices, and the deflation shows up later: the median generic NDC is 8.91% below a year earlier as of 2026-09-02. The later filings and calls checked carry no generic figure: Cencora's Q3 fiscal 2026 10-Q (quarter ended June 30, 2026) lists "unfavorable trends in brand and generic pharmaceutical pricing, including the rate or frequency of price inflation or deflation" only as a risk (https://www.sec.gov/Archives/edgar/data/1140859/000114085926000034/cor-20260630.htm); McKesson's fiscal 2026 10-K (year ended March 31, 2026) attributes its $210 million LIFO credit to "significant brand deflation" and does not quantify generics (https://www.sec.gov/Archives/edgar/data/927653/000092765326000069/mck-20260331.htm); Cardinal Health's fiscal 2026 10-K (year ended June 30, 2026) mentions deflation only in its LIFO accounting note (https://www.sec.gov/Archives/edgar/data/721371/000072137126000038/cah-20260630.htm). The NADAC read is a pharmacy acquisition price, so the closest comparable is a distributor's comment on sell-side generic pricing, not manufacturer net price.

Ticker coverage and the private manufacturers

In the 2026-09-02 file, 18,310 of 30,001 NDCs carry a ticker, 61.0%. Among generic NDCs it is 16,775 of 27,626, 60.7%. Every NDC has a labeler name from the FDA NDC Directory, so the 39% without a ticker is a decision that the labeler is not listed, not a gap. The curated map covers 83 companies, of which 60 are listed (dictionary).

The largest private labelers by generic NDC count in the latest file: Rising Pharma Holdings 823, Major Pharmaceuticals 708, Camber Pharmaceuticals 694, Chartwell RX 532, Macleods Pharmaceuticals 418, BluePoint Laboratories 379, Apotex 336, Strategic Sourcing Services 313, Advagen Pharma 295, Westminster Pharmaceuticals 282, Padagis 266, ScieGen 225. The map assigns a ticker only where a name pattern has been verified against the labeler string, so an unmapped labeler carries a labeler name and a null ticker.

Two further points on ticker assignment. A drug sold under a distributor's private label maps to the distributor, not the manufacturer. And a ticker on a foreign exchange is a ticker; the map includes NSE, LSE and SIX listings alongside US ones.

Appendix: queries

Run 2026-09-10 against production Postgres over DIRECT_URL, read-only, statement_timeout = 60s.

-- The index, all 88 weeks (the CSV attached to this note)
SELECT week_date, n_ndcs, n_ndcs_with_prior, n_ndcs_with_yoy,
       median_wow_change_pct, mean_wow_change_pct,
       share_falling, share_rising, share_unchanged, n_repriced,
       median_yoy_change_pct, mean_yoy_change_pct, index_level_median_chain
FROM nadac_generic_index_weekly ORDER BY week_date;

-- Year-over-year by ticker, latest week, generic NDCs only (ran in 1,982 ms)
SELECT ticker, company, count(*) AS generic_ndcs, count(yoy_change_pct) AS with_yoy,
       round(percentile_cont(0.5) WITHIN GROUP (ORDER BY yoy_change_pct)::numeric, 2) AS median_yoy_pct,
       round(avg(yoy_change_pct)::numeric, 2) AS mean_yoy_pct,
       round(100.0 * count(*) FILTER (WHERE yoy_change_pct < 0)
             / nullif(count(yoy_change_pct), 0), 1) AS share_falling_yoy_pct
FROM nadac_weekly_prices
WHERE ticker IN ('TEVA','VTRS','AMRX','RDY','PRGO')
  AND week_date = (SELECT max(week_date) FROM nadac_generic_index_weekly)
  AND classification = 'G'
GROUP BY 1, 2 ORDER BY 5;

-- Ticker coverage, latest week (ran in 7,157 ms; one week of the matview)
SELECT count(*) AS ndcs, count(ticker) AS with_ticker,
       round(100.0 * count(ticker) / count(*), 1) AS pct_ticker,
       count(*) FILTER (WHERE classification = 'G') AS generic_ndcs,
       count(ticker) FILTER (WHERE classification = 'G') AS generic_with_ticker
FROM nadac_weekly_prices
WHERE week_date = (SELECT max(week_date) FROM nadac_generic_index_weekly);

-- Largest unmapped labelers, latest week, generic NDCs
SELECT labeler_name, count(*) AS ndcs
FROM nadac_weekly_prices
WHERE week_date = (SELECT max(week_date) FROM nadac_generic_index_weekly)
  AND ticker IS NULL AND classification = 'G'
GROUP BY 1 ORDER BY 2 DESC LIMIT 12;

Reprice-week counts (20 weeks above 1,000 repriced; maximum 149 in the others) and the first week with a year-over-year value (2025-12-24) are read off the index output. The distributor comparison was not queried; a grep of docs/ for a stated distributor generic deflation figure returned nothing, and the Cencora 10-K sentence quoted in Distributors was read from EDGAR on 2026-09-10.