CMS HPT Tracker / price transparency audit

Explainer · 1 of 3

What a machine-readable file actually is

Every hospital in the country has to publish one file containing every price it has, for every item and service, for every insurer it contracts with. That file is the MRF. It is not a bill, not an estimate, and not written for a human to read — and since July 2024 its shape is dictated, column by column, by CMS.

Definition

The three words, one at a time § 180.20

CMS defines a machine-readable file as “a single digital file that is in a machine-readable format,” and a machine-readable format as a digital representation of data that can be imported or read into a computer system for further processing.1 Each word is doing work.

Machine-readable § 180.20
A computer must be able to parse it without a human transcribing anything. A PDF of a price list is not machine-readable. A scanned table is not machine-readable. A CSV, a JSON document, or the CMS template in either is.
File § 180.50(c)
One artefact you can download, not a search box that answers one question at a time. A price lookup tool, however good, does not satisfy this requirement — it satisfies the separate shoppable-services requirement at § 180.60.
Single § 180.50(a)(2)
One file per set of standard charges. Where several locations under one hospital licence have different charges, each must be published separately; where they share charges, one file may cover them all and must name every location and address it covers.

Before July 2024 that was almost the whole specification, and the result was predictable: thousands of files, each internally consistent and mutually incomparable. Hospitals chose their own column names, their own encodings of “cash price”, their own idea of what counted as an item. The rule was met and the data was unusable in aggregate. The CY2024 OPPS/ASC final rule closed that by requiring a CMS template — a fixed layout, fixed column headers and a published data dictionary — for every file from 1 July 2024 onward.5

Two obligations, often confused

45 CFR 180.40 imposes two separate duties.1 § 180.50 is the machine-readable file, aimed at researchers, employers, journalists and price-comparison tools. § 180.60 is a consumer-friendly display of 300 shoppable services, aimed at patients. A hospital can do one perfectly and still be in breach for the other. This tracker only measures the first.

Standard charges

Five prices for the same MRI § 180.20

The word “price” does not survive contact with hospital billing. A single procedure carries a whole family of numbers, and the rule requires all of them. This is the part most readers find surprising: the file does not have a price column.

Standard chargeWhat it meansWho ever pays it
Gross charge The chargemaster number, absent any discount. The hospital’s list price. Almost nobody. It is the anchor everything else is negotiated down from.
Discounted cash price The charge that applies to someone paying cash, or a cash equivalent. The uninsured, and the insured who find it is cheaper than their deductible.
Payer-specific negotiated charge What the hospital has negotiated with one named third-party payer, for one named plan. That insurer. There is one of these per payer × plan × item.
De-identified minimum The lowest charge negotiated across all payers for that item. Nobody directly — it is a summary statistic over the row above.
De-identified maximum The highest charge negotiated across all payers for that item. Nobody directly. Together the pair shows the spread without naming payers.
The five types collectively defined as “standard charge” at § 180.20 and required at § 180.50(b)(2)(ii). The min and max are derived from the set of negotiated dollar amounts.1

So a single chest CT at a single hospital produces one gross charge, one cash price, one min, one max, and one negotiated charge for every plan the hospital contracts with. A mid-sized hospital with forty plans and forty thousand chargeable items is publishing something on the order of a million rows before anyone has argued about what an “item” is.

Format

Three legal shapes for the same data § 180.50(c)(2)

CMS publishes the template in three layouts.2 A hospital picks one. All three carry the same required data elements; they differ only in how the payer dimension is folded.

Layout A

CSV “tall”

One row per item per payer plan. Column count is fixed; row count multiplies. Easiest to generate, easiest to stream, and the reason single files reach tens of millions of rows.

Layout B

CSV “wide”

One row per item, with a repeating block of columns for every payer and plan — the payer and plan names are baked into the column headers. Fewer rows, but files routinely exceed a thousand columns.

Layout C

JSON

Nested objects: the hospital, then items, then a list of payer objects under each. The only format that expresses the hierarchy honestly, and the only one that survives repeated modifiers cleanly.

In the 27 August 2026 crawl, of the files whose format could be read: 1,751 were CSV, 644 were JSON, and two were .xlsx — a format the template does not offer.7

The CSV files have a three-row header

This trips up nearly everyone reading one for the first time. A CSV MRF is not a normal CSV. Row 1 is a set of column headers describing the file and the hospital. Row 2 holds their values — one row, once, for the whole file. Row 3 is the real header row for the charge data, and the charge rows begin at row 4.3 Point a naive parser at it and every column name will be wrong.

Rows 1–2 — general data elements, stated once
hospital_name,last_updated_on,version,location_name,hospital_address,type_2_npi,license_number | MD,attester_name,To the best of its knowledge and belief, this hospital has included all applicable standard charge information…
Example Regional Medical Center,2026-01-14,3.0.0,Example Regional Medical Center,120 Mercy Way Baltimore MD 21201,1487654321,21-0143,Dana Whitfield,true

Illustrative, following the CMS CSV data dictionary.3 The attestation is encoded as a column whose header is the full CMS-prescribed sentence and whose value is true. It reads strangely and it is correct.

Worked example

One row, read closely

Here is a single item in the CSV “tall” layout, from row 3 down. Several columns are elided for width; the ones shown are the ones that carry meaning.

Rows 3–5 — charge data (columns abridged)
description,code | 1,code | 1 | type,setting,standard_charge | gross,standard_charge | discounted_cash,payer_name,plan_name,standard_charge | negotiated_dollar,standard_charge | min,standard_charge | max,standard_charge | methodology,additional_generic_notes
CT scan chest w/o contrast,71250,CPT,outpatient,2841.00,1136.40,Aetna,Choice POS II,612.75,498.10,1204.00,fee schedule,
CT scan chest w/o contrast,71250,CPT,outpatient,2841.00,1136.40,UnitedHealthcare,Choice Plus,498.10,498.10,1204.00,fee schedule,
…one further row per payer plan, for this one CPT code

Illustrative figures in the CMS column layout.3 Read across: the list price is $2,841, the cash price is $1,136.40, Aetna pays $612.75 and UnitedHealthcare pays $498.10 for the identical scan. The min and max repeat on every row because they summarise the whole set of negotiated dollars for that item.

Three things in that example are worth flagging, because they are where real files go wrong.3

  • Blanks are meaningful. CMS is explicit that a hospital must leave a cell empty when it has no applicable data — not N/A, not 0, not . Entering a placeholder is itself a deficiency, as is a dollar sign inside a numeric field.
  • The code column is indexed. The header is code | 1 and code | 1 | type, repeating as code | 2 and so on, because one item routinely carries a CPT code, a revenue code and an internal chargemaster code at once. Twenty-one code types are valid values, from CPT and NDC through MS-DRG to LOCAL.
  • Methodology is an enumeration, not prose. Exactly five values are legal: case rate, fee schedule, percent of total billed charges, per diem, and other — with other requiring an explanation in the notes column.

Required fields

The data dictionary, in full § 180.50(b)(2)

These are the data elements a file must encode to conform to CMS template v3.0.0, the version in force since 1 January 2026.3 Column names are the CSV “tall” spellings; the wide and JSON layouts carry the same elements under their own conventions.

About the file and the hospital

ColumnElementNotes
hospital_nameHospital nameThe legal business name.
last_updated_onMRF dateISO 8601. This is the field the annual-update requirement is judged against, and the field this tracker reads to compute file age.
versionCMS template versionCurrently 3.0.0.
location_nameHospital location(s)Renamed from hospital_location in v3.0. Multiple values separated by |.
hospital_addressHospital address(es)In the same order as the location names. Must cover, at minimum, every inpatient facility and stand-alone emergency department.
type_2_npiType 2 organisational NPI(s)New in v3.0. Only NPIs whose primary taxonomy starts 28 (hospital) or 27 (hospital unit).
license_number | [state]Licensure informationThe licensing state’s two-letter code lives in the header. This tracker uses that field to confirm it has matched the right facility.
attester_nameAttester nameNew in v3.0. The CEO, president, or the senior official designated to oversee the encoding.
[the attestation sentence]Attestation statementNew in v3.0, replacing the affirmation statement. The header is CMS’s prescribed text; the value must be true to satisfy § 180.50(a)(3).
CSV “tall” column names, from the CMS data dictionary v3.0.3 Elements marked “new in v3.0” were added by the CY2026 OPPS/ASC final rule.4

About each item or service

ColumnElementNotes
descriptionGeneral descriptionFree text.
code | [i]Billing / accounting codeRepeating, indexed.
code | [i] | typeCode typeEnumerated: CPT, HCPCS, NDC, RC, DRG, MS-DRG, APC, CDM, LOCAL and twelve more.
settingSettinginpatient, outpatient or both.
drug_unit_of_measurementDrug unitRequired since 1 Jan 2025, for drugs.
drug_type_of_measurementDrug measurement typeGR, ME, ML, UN and the rest of the NDC/NCPDP set.
modifiersModifier(s)Required since 1 Jan 2025, with a description of how each changes the charge.

About the money

ColumnElementNotes
standard_charge | grossGross chargeNumeric, positive. A zero or a negative number is a deficiency.
standard_charge | discounted_cashDiscounted cash price
payer_namePayer nameIn the wide layout these live in the column headers instead. Since v3.0, if either is present at least one payer-specific charge must be too.
plan_namePlan name
standard_charge | negotiated_dollarNegotiated charge, dollarsRequired wherever a dollar amount can be calculated at all.
standard_charge | negotiated_percentageNegotiated charge, percentageEncoded as 70.5, not .705.
standard_charge | negotiated_algorithmNegotiated charge, algorithmFree text describing the formula.
median_amountMedian allowed amountNew in v3.0, replacing the single “estimated allowed amount”. Required only where the negotiated charge is a percentage or an algorithm. See below.
10th_percentile10th percentile allowed
90th_percentile90th percentile allowed
countCount of allowed amounts
standard_charge | minDe-identified minimumAcross all payers, from the negotiated dollar amounts.
standard_charge | maxDe-identified maximum
standard_charge | methodologyStandard charge methodologyOne of the five enumerated values.
additional_generic_notesNotesFree text. Where a hospital explains its blanks, and the only place other methodology becomes intelligible.

Three optional elements are also defined, so that hospitals which want to disclose them do so uniformly: financial_aid_policy, general_contract_provisions (stop-loss, lesser-of and carve-out terms that apply at claim level rather than line level), and billing_class.3

The hard case

When the price is not a number § 180.50(b)(2)(ii)(C)

A large share of hospital contracts do not set a dollar amount for a procedure. They set a rule: a percentage of the Medicare rate, or of billed charges, or a case rate modified by an outlier formula. This is the single hardest problem in the whole regime, and CMS has now changed its answer twice.

The rule’s position is that a hospital must publish a dollar amount whenever a dollar amount can be derived. If the contract says 70% of a known fee schedule, the hospital is required to do the arithmetic and publish the result in negotiated_dollar — not to publish “70%” and leave the reader to find the schedule.3 The percentage and algorithm columns exist only for charges that genuinely cannot be resolved in advance.

But a file full of percentages is still a file without prices, so CMS added a requirement to report what the hospital was actually paid:1

  • 1 Jan 2025 – 31 Dec 2025. An estimated allowed amount: the average dollar amount the hospital had historically received from that payer for that item.
  • From 1 Jan 2026. That single average is gone. In its place, a distribution: the 10th percentile, the median and the 90th percentile of allowed amounts actually received, plus the count of remittances behind them.

The mechanics are tightly specified. Amounts come from EDI 835 electronic remittance advice data, or an equivalent source, over a window no shorter than 12 months and no longer than 15 months before the file is posted. Zero-dollar remittances are excluded. Where a percentile falls between two observations, the next highest observed value is used. The count is encoded as a whole number, except that anything from one to ten must be written as the literal string 1 through 10 — a small-cell rule that stops the file from re-identifying an individual patient’s claim.3

Why the swap from an average to a spread matters

An average collapses a bimodal contract into one misleading number. A distribution shows the reader whether a payer’s reimbursements for a procedure cluster tightly or range over an order of magnitude — and the count tells them how much weight the figure can bear at all. It is also considerably more work to produce, which is part of why CMS set enforcement of the v3.0 elements at 1 April 2026, three months after the 1 January effective date.2

Practicalities

Why these files are enormous

Items × payers × plans × settings, with no compression required and a regulatory duty to keep the whole thing digitally searchable. The arithmetic does the rest.

Across the 3,486 files this project fetched and read in the 27 August 2026 crawl, the total came to roughly 571 GB — an average of about 164 MB per hospital, with the largest well into the gigabytes.7 That is the raw published price data of the American hospital system, and it is small only by the standards of things that are not spreadsheets.

Two consequences follow, and both shape how this tracker works. First, you cannot casually download a national sample; the audit reads MRF headers with HTTP range requests rather than pulling whole files, which is how it can check the template version and last_updated_on for thousands of hospitals without moving hundreds of gigabytes. Second, plenty of hospitals put these files behind a CDN that treats an automated fetch of a 200 MB object as an attack — 186 hospitals in the last crawl refused automation outright, which is recorded as Blocked rather than as a failure, because a hospital that blocks a crawler may be perfectly compliant to a human with a browser.7

Version drift is real

The version field is self-reported, and hospitals report some remarkable things. In the last crawl, 2,630 files declared a 3.0 template, but 112 still declared 2.0, four declared 1.0, and a scattering claimed versions CMS has never published — 37 files asserted “4.0” and one “2026.1”.7 A declared version is a claim about a file, not a fact about it; this audit records the claim and does not validate the file against the schema. CMS publishes an online and command-line validator that does.6

Reading the data

What an MRF cannot tell you

The file is a disclosure of contracted rates. It is not a quote, and treating it as one produces confident nonsense.

Not what you will owe

Your share depends on your deductible, coinsurance, out-of-pocket maximum and how far through the plan year you are. The MRF gives the negotiated rate, not the split.

Not the whole bill

The rule covers items and services the hospital charges for. Independent physicians, anaesthesia groups and pathology labs billing separately are outside it.

Not a complete episode

An admission assembles dozens of line items, some unforeseeable. Summing a few rows does not reconstruct a stay.

Not audited

The attestation is the hospital’s own. CMS validates form and manner; nobody systematically checks the numbers against the contracts they claim to describe.

The same caution applies to this tracker, in the other direction. A hospital marked Compliant here has published a file that could be found, fetched and parsed. Whether its contents are accurate, complete, or even internally consistent is a different question, and one that reading the file — not the pointer to it — is required to answer.

References

Sources

Every regulatory claim on this page is cited to its paragraph in the current Code of Federal Regulations. Everything about the template itself comes from CMS’s own technical implementation guide, which is the normative specification the regulation points at.

  1. 45 CFR Part 180 — Hospital Price Transparency Electronic Code of Federal Regulations, current text. ecfr.gov/current/title-45/part-180 Used for: every definition, requirement, deadline and penalty described on this page. The § chips beside each heading link straight to the paragraph relied on.
  2. Hospital Price Transparency — technical implementation guide CMS, github.com/CMSgov/hospital-price-transparency Used for: the three template layouts, the implementation timeline, and the 1 April 2026 enforcement date for the v3.0 data elements.
  3. Hospital Price Transparency CSV Data Dictionary v3.0 CMS, documentation/CSV Used for: column names, the three-row CSV header, valid values for code type and methodology, the treatment of blanks, the percentage-versus-dollar instruction, the allowed-amount calculation window and the 1 through 10 small-cell rule.
  4. Guide for Updating from Data Dictionary v2.2 to v3.0 CMS, documentation/UPDATE_GUIDE.md Used for: what changed in v3.0 — attestation replacing affirmation, the new attester and NPI elements, the renamed location field, and the allowed-amount elements replacing the estimated allowed amount.
  5. CY2024 Hospital Outpatient PPS / ASC final rule 88 FR 82184, 22 November 2023. federalregister.gov Used for: the introduction of the mandatory CMS template from 1 July 2024, and the data elements phased in on 1 January 2025.
  6. Hospital Price Transparency tools — validator, naming wizard, TXT file generator CMS, cmsgov.github.io/hpt-tool Used for: the existence of an official validator that tests a file against the template, which this audit deliberately does not attempt.
  7. CMS HPT Tracker — national crawl, 27 August 2026 This project. Snapshot in data/hpt-audit/; results at tracker.html. Used for: file counts, formats, total and average file size, declared template versions, and the count of hospitals blocking automated access.
Next What CMS requires 45 CFR 180 end to end: who is covered, what must be published where, the compliance timeline, and what a penalty actually costs. Also The cms-hpt.txt pointer file The four-line file that makes every MRF in the country findable — and the thing this audit is built on.