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.
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 charge | What it means | Who 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. |
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.
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.
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.
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.
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.
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, not0, 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 | 1andcode | 1 | type, repeating ascode | 2and 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, fromCPTandNDCthroughMS-DRGtoLOCAL. - Methodology is an enumeration, not prose. Exactly five values are legal:
case rate,fee schedule,percent of total billed charges,per diem, andother— withotherrequiring 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
| Column | Element | Notes |
|---|---|---|
| hospital_name | Hospital name | The legal business name. |
| last_updated_on | MRF date | ISO 8601. This is the field the annual-update requirement is judged against, and the field this tracker reads to compute file age. |
| version | CMS template version | Currently 3.0.0. |
| location_name | Hospital location(s) | Renamed from hospital_location in v3.0. Multiple values separated by |. |
| hospital_address | Hospital address(es) | In the same order as the location names. Must cover, at minimum, every inpatient facility and stand-alone emergency department. |
| type_2_npi | Type 2 organisational NPI(s) | New in v3.0. Only NPIs whose primary taxonomy starts 28 (hospital) or 27 (hospital unit). |
| license_number | [state] | Licensure information | The licensing state’s two-letter code lives in the header. This tracker uses that field to confirm it has matched the right facility. |
| attester_name | Attester name | New in v3.0. The CEO, president, or the senior official designated to oversee the encoding. |
| [the attestation sentence] | Attestation statement | New 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). |
About each item or service
| Column | Element | Notes |
|---|---|---|
| description | General description | Free text. |
| code | [i] | Billing / accounting code | Repeating, indexed. |
| code | [i] | type | Code type | Enumerated: CPT, HCPCS, NDC, RC, DRG, MS-DRG, APC, CDM, LOCAL and twelve more. |
| setting | Setting | inpatient, outpatient or both. |
| drug_unit_of_measurement | Drug unit | Required since 1 Jan 2025, for drugs. |
| drug_type_of_measurement | Drug measurement type | GR, ME, ML, UN and the rest of the NDC/NCPDP set. |
| modifiers | Modifier(s) | Required since 1 Jan 2025, with a description of how each changes the charge. |
About the money
| Column | Element | Notes |
|---|---|---|
| standard_charge | gross | Gross charge | Numeric, positive. A zero or a negative number is a deficiency. |
| standard_charge | discounted_cash | Discounted cash price | |
| payer_name | Payer name | In 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_name | Plan name | |
| standard_charge | negotiated_dollar | Negotiated charge, dollars | Required wherever a dollar amount can be calculated at all. |
| standard_charge | negotiated_percentage | Negotiated charge, percentage | Encoded as 70.5, not .705. |
| standard_charge | negotiated_algorithm | Negotiated charge, algorithm | Free text describing the formula. |
| median_amount | Median allowed amount | New in v3.0, replacing the single “estimated allowed amount”. Required only where the negotiated charge is a percentage or an algorithm. See below. |
| 10th_percentile | 10th percentile allowed | |
| 90th_percentile | 90th percentile allowed | |
| count | Count of allowed amounts | |
| standard_charge | min | De-identified minimum | Across all payers, from the negotiated dollar amounts. |
| standard_charge | max | De-identified maximum | |
| standard_charge | methodology | Standard charge methodology | One of the five enumerated values. |
| additional_generic_notes | Notes | Free 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.
- 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.
- 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.
-
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 10small-cell rule. - 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.
- 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.
- 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.
-
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.