Methodology
Every number on DrugDashboards traces to a public primary source — FDA and CMS files, state transparency filings — ingested by an automated pipeline that runs every day. This page explains what we collect, what we compute from it, and what the data can and can't tell you.
Sources and update cadence
The pipeline checks every source daily; each file changes on its publisher's own schedule. Nothing is entered by hand and no proprietary data (PBM MAC lists, rebates, actual transaction prices) is included.
| Data | Source | Updates |
|---|---|---|
| NADAC pharmacy acquisition prices | CMS / data.medicaid.gov (weekly survey; monthly archives back to 2013) | File updates weekly |
| NDC Directory (products, labelers, marketing status) | FDA via openFDA bulk download | Daily |
| Orange Book (approvals, TE codes, patents & exclusivity) | FDA / openFDA | Monthly |
| Purple Book (biologics, biosimilars, interchangeability) | FDA | Monthly |
| Drug shortages (current + historical archive) | FDA via openFDA | Daily |
| Recalls / enforcement reports | FDA via openFDA | Daily |
| Medicare Part B payment limits (ASP) | CMS quarterly files + NDC–HCPCS crosswalk | Quarterly |
| WAC list prices and increases | California SB-17 and Texas transparency filings | As states publish |
| Medicare negotiated prices (MFP) | CMS | As published |
| Medicaid spend & utilization, federal upper limits | CMS State Drug Utilization Data, FUL files | Annual / monthly |
| Medicare Part D spend, plans, geography | CMS | Annual |
| VA Federal Supply Schedule prices | VA National Acquisition Center | As published |
| Manufacturing facilities & inspections | FDA SPL establishment data, registration files, inspection classifications | Daily / as published |
| Pharma company financials (revenue, R&D, buybacks, dividends) | SEC EDGAR 10-K XBRL filings, 15 largest US-listed drugmakers | Daily (filings land yearly) |
| REMS programs (restricted distribution) | FDA REMS@FDA active roster | Daily |
How the pieces join: the NDC
FDA publishes drug codes as 10 digits in three different formats; pricing files use the 11-digit HIPAA format. Everything here is normalized to the 11-digit NDC on ingest, which is what lets a price, a shortage, a recall, and a manufacturing plant line up on one page. (Curious how NDCs work? We wrote a guide.)
The change feed is a diff, not a news wire
FDA and CMS publish snapshots — "here is everything, as of today" — not changes. Each day's download is compared against what we already hold, and the differences become events: price changes, new and resolved shortages, recalls, products appearing, manufacturers entering or leaving a market. The change feed, the My Drug List email digests, and the manufacturer entry/exit histories on drug pages are all built from these events. Comparisons happen in the same database transaction as the update, so an event can never be emitted twice or drift from the data it describes.
Prices: always labeled, never mixed
US drugs have several "prices," and mixing them is how drug-price claims go wrong. Every figure on this site is labeled with its basis:
- NADAC— what retail pharmacies actually pay to acquire a drug, from CMS's weekly invoice survey. Our default basis.
- WAC— the manufacturer's list price, from state transparency filings. Where a WAC figure is estimated rather than filed, it is marked as an estimate and shown with its derivation.
- ASP — the average sales price CMS uses to pay for physician-administered (Part B) drugs.
- MFP— Medicare's negotiated maximum fair prices, where they exist.
Estimates are always labeled as estimates and shown as ranges, not false-precision points.
The fragility score (v1)
A descriptive 0–100 score, recomputed daily for every NDC with a NADAC price. Points are added from factors observable in the data: how many manufacturers are active in the market (sole-source is the largest penalty, up to 30 points), current or recent shortage status (up to 25), Class I/II recalls in the trailing 12 months (up to 15), sustained year-over-year price deflation — cheap generics get abandoned (up to 15) — sterile-injectable form (10), and active discontinuation filings (10), capped at 100. Every score is published with the exact factors that fired and their point values; the full factor table lives on the fragility page. It describes current conditions; it does not forecast.
The 90-day shortage risk model (v2)
Where v1 describes, v2 estimates: for each drug market (molecule × form), the probability of a new shortage posting within 90 days. It is a deliberately small logistic regression trained on a monthly grid of historical dates back to 2019, using only features knowable on each date — manufacturer counts, price trend, recalls, form, discontinuation filings, open shortage episodes, and facility inspection outcomes — with labels taken from what actually happened in the following 90 days. The model is validated on a held-out later time period before anything ships, and its coefficients and backtest performance are published on the fragility page — no black box.
Shortage durations
Median shortage durations shown on the shortages page are Kaplan–Meier estimates from the historical shortage archive — the method accounts for shortages that are still open, which a simple average of resolved ones would understate.
The spread tracker
The spread trackercompares Medicare Part D plans' median negotiated point-of-sale price for an NDC with NADAC pharmacy acquisition cost for the same NDC — matched to the plan file's quarter, not today's NADAC, because the quarterly plan file lags the weekly NADAC and comparing across that gap measures the lag, not a spread. One row per molecule (its highest-markup NDC); drugs with acquisition cost under 5¢/unit are excluded so rounding can't manufacture large ratios. All prices are gross of rebates: on brands, confidential rebates recover part of the gap for the plan; on multi-source generics rebates are minimal, so the gap is mostly channel margin. Annual dollar figures multiply the per-unit gap by the molecule's Part D dosage units from the most recent spending year and are labeled estimates.
The specialty definitions matrix
"Specialty drug" has no regulatory definition, so the specialty pagetests each public criterion separately rather than inventing another composite: specialty-tier placement is a median formulary tier of 5 or higher across Part D plans (one representative NDC per molecule); the cost test compares average Part D spend per prescription — the closest public proxy for a 30-day fill — against CMS's specialty-tier threshold; biologic means BLA-licensed; orphan means FDA orphan-drug exclusivity on the application; REMS means an active program on the REMS@FDA roster. Tier moves across the specialty boundary are detected by diffing quarterly formulary files and posted to the change feed as tier-change events. PBM limited-distribution lists — the most consequential specialty designation in practice — are contractual and have no public source, so they are named as a gap rather than estimated.
Known limits
- Manufacturer counts come from the NDC Directory and include repackagers, so a market can look less concentrated than it really is.
- We cannot see PBM contract (MAC) prices, rebates, or actual transaction prices — no public source publishes them.
- Product-to-facility links reflect current filings only; there is no public history of where a drug used to be made.
- Source files carry their publishers' own lags and errors, and we inherit them.
- Everything here is informational — not medical, clinical, purchasing, or investment advice.
Citing DrugDashboards
The site is free to cite with attribution. A citation should name the page, the date retrieved, and the URL — for example:
DrugDashboards, "Drug shortages," retrieved September 3, 2026, https://drugdashboards.com/shortages.
Drug pages include a ready-to-copy citation. Because the data refreshes daily, the retrieval date matters.