Price Transparency Hospital negotiated rates

How this surface is built

Everything you need to know about where the data comes from, how we compute medians and outliers, what each code type means, and how to cite a row in your reporting.

What this is

This is a public mirror of every CMS-required hospital Machine-Readable File (MRF) we have ingested. We currently mirror 5,079 hospitals across 54 states & territories, totaling 2,433,631,223 negotiated-rate rows. The surface is queryable, filterable, and exportable; every row links back to its source MRF with the date we observed it.

This is not medical advice, not a pricing quote, and not a prediction of what your insurance will pay. It is the data the federal government required hospitals to publish, made queryable.

Data source

Hospitals are required by CMS-9915-F (45 CFR 180) to publish a machine-readable file of every standard charge for every item and service. The current schema (effective July 1, 2024 with full enforcement on April 1, 2026) requires JSON or CSV files containing gross charges, discounted cash prices, payer- specific negotiated rates, and the de-identified minimum and maximum negotiated charges across all payers.

We ingest these MRFs from each hospital's cms-hpt.txt discovery file, which CMS requires hospitals to host at the root of their public website. Our ingest worker re-fetches each hospital's files quarterly (or on-demand via the refresh button on hospital pages). Older filings are retained — every row carries an mrf_observed_at timestamp so historical comparisons stay auditable.

Methodology

Median and percentile computation

Every "median" you see on this site is computed via PostgreSQL's percentile_cont(0.50) WITHIN GROUP (ORDER BY ...). The 25th and 75th percentile bands (IQR) use percentile_cont(0.25) and percentile_cont(0.75) respectively. These are the continuous-interpolation forms, not the discrete bucket variant.

Sentinel filter

We always filter rate values to the range BETWEEN $0.01 AND $5,000,000 before computing a median. Real-world MRFs contain $0 placeholders (where the hospital files an "amount not negotiated" row as zero) and $999,999,999 sentinels (where the schema requires a numeric field but the hospital's billing system uses an out-of-range value to mean "n/a"). Including these would distort medians by orders of magnitude.

Outlier detection

On the by-hospital procedure pages, we flag a hospital as a "high outlier" if its median for the procedure is at least 2× the cohort median, and "low outlier" if at most 0.5×. The cohort is whichever set of hospitals appears in the filtered view (state filter applies if set, otherwise national).

Code sets

MRFs reference items and services using a mix of clinical and billing code systems. Each appears as a chip on the surface:

MS-DRG
Medicare Severity Diagnosis Related Group — an inpatient billing classification covering ~750 categories. Example: DRG 470 is "Major hip and knee joint replacement without complications."
APR-DRG
All Patient Refined DRG — a refinement of MS-DRG used by many state Medicaid plans. Adds severity-of-illness and risk-of-mortality subclasses.
CPT
Current Procedural Terminology — outpatient procedure codes owned by the AMA (HCPCS Level I in CMS taxonomy). Example: CPT 27447 is "Total knee arthroplasty."
HCPCS
Healthcare Common Procedure Coding System Level II — government-issued codes for items, supplies, and services not covered by CPT (durable medical equipment, drugs administered in a clinical setting, etc.).
NDC
National Drug Code — FDA-assigned 11-digit identifier for a specific drug product, manufacturer, and package size.
CDM
Charge Description Master — the hospital's own internal line-item dictionary. CDM codes are not standardized across hospitals; "ASPIRIN-81MG-TABLET" at one facility may be "ASA81-PO-EA" at another.
RC
Revenue Code — UB-04 4-digit code identifying the type of service or department (room & board, ICU, pharmacy, etc.). Used on inpatient claims alongside the HCPCS/CPT line items.

We treat CPT and HCPCS Level I as equivalent for the purposes of code-type filtering on this surface (they are the same code set under different governance bodies).

Freshness

Every rate row on the surface carries an mrf_observed_at timestamp showing the date we last fetched the MRF that produced it. On hospital pages we surface a "filing age" pill that turns amber after 180 days and red after 365 days. CMS requires hospitals to update their MRFs at least annually, and many update quarterly — older filings are still legally compliant but increasingly out of step with current contract terms.

Freshness buckets

Fresh
Last successful MRF ingest within the past 90 days. Current quarter; full alignment with current contract terms.
Aging
91–180 days since last successful ingest. Hospital is half-year out of date; technically still compliant.
Stale
181–365 days. Approaching the CMS-9915-F annual deadline; still compliant but expect drift from active contract terms.
Expired
More than 365 days since last successful ingest. Out of compliance with the CMS-9915-F annual update mandate.
Never ingested
No successful MRF ingest on file. Either the hospital has never published an MRF or our ingest pipeline has not yet succeeded against their cms-hpt.txt.

Public auditor views: browse the freshness dashboard · missing-field heatmap.

Internal coverage status (per-facility pipeline stage, discovery errors) is published at /admin/price-transparency/coverage where it is admin-accessible.

Payer grouping

A single human payer ("Aetna") routinely splits into dozens of regional-plan UUIDs in MRF filings. The same hospital, filing on the same day, may have separate rows for "Aetna Choice POS II", "Aetna HMO Texas", "Aetna PPO National", and so on — each with a unique payer_id.

Our explorer surfaces (rankings, payer-detail, top-payers tiles) use name-grouped aggregation, lowercasing the payer_name_raw and collapsing variants under a single canonical name. This makes "Aetna" a single entry on a leaderboard rather than 47 near-identical rows. The downside is that genuinely different products under the same parent (Medicare Advantage vs. commercial PPO) get merged. When that distinction matters, drill into the by-UUID page via /transparency/payer/{payer_id}.

UUID-grouped views remain available via the legacy by-UUID URL, redirected from any payer link as a fallback.

Out-of-pocket math

The OOP estimator widget on procedure pages implements the standard deductible → coinsurance → OOP-max waterfall most commercial insurers use. The math reference, reproduced verbatim from the estimator's docstring, is:

if uninsured:
    # No insurance benefits. Patient owes the rate (typically the cash
    # discounted price, but we display the negotiated as the floor).
    patient_owes = rate
    return  # short-circuit; deductible/OOP-max/coinsurance ignored
if spent < deductible:
    to_deductible = min(rate, deductible - spent)
    after_deductible = max(0, rate - to_deductible)
else:
    to_deductible = 0; after_deductible = rate
coinsurance_charge = after_deductible * (coinsurance_pct / 100)
patient_owes = to_deductible + coinsurance_charge
if oop_max_active:
    patient_owes = min(patient_owes, max(0, oop_max - spent))  # cap

oop_max_active is True when the user provides a non-blank OOP-max field. A literal 0 is treated as "no cap" only when the field is empty; if the user types 0, we honor it (rare but legitimate for some Medicaid contexts).

Math reference: AHA Fact Sheet on Price Estimator Tools (2023) describes this same waterfall.

OOP disclaimer

Estimate only. Actual liability depends on your plan's specific terms, network status, prior authorization requirements, secondary insurance, and a dozen other variables our form cannot capture. Always verify with your insurance carrier and the hospital's billing office before scheduling care.

The form submits its inputs via HTTP GET, which means the values appear briefly in the URL (and in any reverse proxy access log on the request path). We do not store the values you type server-side. If this matters to you (it might — income-related deductibles can be sensitive), use a browser session you trust and close the tab afterward.

This site is not legal, financial, or medical advice.

Glossary

Coinsurance
The percentage of a covered service the patient pays after the deductible has been met. Example: 20% coinsurance on a $500 bill after deductible = $100 patient owes, $400 plan pays.
Cohort median
The median of medians across whatever set of hospitals appears in the current filtered view. Used as the reference point for outlier detection on by-hospital procedure pages.
Deductible
The annual dollar amount the patient pays before insurance starts covering services. Resets each plan year.
Fee schedule
A payer's published table of allowed amounts for procedures, used to determine the negotiated rate for a contracted provider.
Gross charge
The undiscounted, "list price" charge for a service before any payer-specific contract or cash discount is applied. Required to be published in the MRF.
HCPCS Level I / II
HCPCS Level I is identical to CPT (CPT codes are the AMA's version of HCPCS Level I). Level II is the government-issued set for items not covered by CPT.
IQR (Interquartile Range)
The range from the 25th to 75th percentile, capturing the middle 50% of the distribution. Used on this site to show how tightly clustered (or wide) prices are within a state or hospital cohort.
MRF (Machine-Readable File)
The CMS-required file each hospital must publish containing gross charges, cash prices, payer-specific negotiated rates, and de-identified min/max negotiated rates.
MS-DRG
Medicare Severity Diagnosis Related Group, an inpatient classification system grouping clinically-related discharges that consume similar resources.
OOP-max (Out-of-Pocket Maximum)
The annual ceiling on what the patient pays out-of-pocket for in-network covered services. Once hit, the plan pays 100% of further covered care for the rest of the plan year.
Payer
The entity contractually obligated to pay claims for a given service: a commercial insurer (Aetna, BCBS), a government program (Medicare, Medicaid, TRICARE), or a self-funded employer plan.
Percentile
A value below which a given percentage of observations fall. The 25th percentile is the value below which 25% of rates fall.
Sentinel value
A placeholder number ($0, $999,999,999) hospitals sometimes file when they have no real value to publish. We filter these out before computing medians.

Citation

Every page on this site is a permanent URL. Filters, sort order, and state selections are encoded in the query string — bookmark or share a URL and the same view loads.

How to cite a row

Use the URL of the page where the row appears, with the filters that produced it. Each rate row footer cites the source MRF and the date we observed it.

Citation examples

APA (7th edition):

HANK Price Transparency. (2026, April 28). Major hip and knee joint replacement (MS-DRG 470) by state. Retrieved April 28, 2026, from http://ppman.hank.ai/transparency/procedure/470/by-state?code_type=MS_DRG

MLA (9th edition):

"Major Hip and Knee Joint Replacement (MS-DRG 470) by State." HANK Price Transparency, 28 Apr. 2026, ppman.hank.ai/transparency/procedure/470/by-state?code_type=MS_DRG. Accessed 28 Apr. 2026.

Chicago (notes-bibliography):

"Major Hip and Knee Joint Replacement (MS-DRG 470) by State," HANK Price Transparency, accessed April 28, 2026, http://ppman.hank.ai/transparency/procedure/470/by-state?code_type=MS_DRG.

Provenance footer

Every individual rate row, when expanded, shows the source MRF URL and the date we observed it (mrf_observed_at). Cite the upstream MRF when the specific rate is the news; cite this surface when the aggregation is the news.

Contact

Found a stale URL, a misclassified row, or a payer-name that should be grouped differently? Email [email protected] with the page URL and a one-line description. We triage all reports and publish corrections in the changelog.

For programmatic access, see our REST API documentation. Bulk download requests for research use should be addressed to the same email.

Changelog

  • 2026-04-28: Added patient out-of-pocket estimator widget on procedure pages. Added CSV export, copy-link, and print-as-PDF affordances on every explorer page.
  • 2026-04-15: Migrated to name-grouped payer aggregation across rankings and payer-detail pages.
  • 2026-04-01: CMS Hospital Price Transparency full enforcement begins; ingest cadence increased to quarterly.
  • 2026-03-15: Outlier flags (2× / 0.5× cohort median) introduced on by-hospital procedure pages.

Last methodology update: April 28, 2026. Most recent data observed: June 15, 2026.