Seven traps, measured

What we found reading hospital price files

Every US hospital has been required since 2021 to publish a machine-readable file of its prices, including a discounted cash price for people paying without insurance. We read 447,348,206 rows of those files across 409 hospitals. Most of what makes them hard to use is not complexity. It is that the same number means different things in different files, and nothing in the file tells you which.

ohio state universityboth files, 1 jul 2026
6,836,719
rows in the two files
0
rows with a self-pay price

Counted in the two files OSU lists for CMS. The column the rule requires is present in every row and empty in every row.

447,348,206
rows of hospital price files read
409
hospitals whose file we have parsed
551
hospitals in the metros we cover
25
metros covered

These are the specific traps, with the measurements behind them. We publish them because a price comparison you cannot check is worth nothing, and because every one of these would have made our own numbers look more impressive than the truth.

Mandatory, and empty

A hospital can obey the rule and still tell you nothing

The discounted cash price column is mandatory. It is not required to contain anything.

Neither file Ohio State University lists for CMS carries a single self-pay price. The column the rule requires is present and empty across all 2,366,510 rows of the OSU Hospitals file and all 4,470,209 rows of the James Cancer Hospital file. A patient paying for themselves cannot learn their price from either one.

We downloaded both files again on 9 August 2026, straight from the addresses OSU publishes at wexnermedical.osu.edu/cms-hpt.txt, and counted them ourselves. Version 3.0.0, dated 1 July 2026. Some hospitals record a cash price as a payer row instead of in the dedicated column, so we checked that too: both files carry 26 payers, every one of them an insurer, and no self-pay, cash or uninsured rate appears in any column of either file.

This is not a hospital refusing to answer. OSU states on its own pricing page that its charges are the same for every patient, and it points people to an estimate tool and a phone number. Someone who can ring up and ask will get a figure. What is missing is a figure in the file, which is the only thing a machine, a researcher or a price comparison can read. That gap is the finding, and it is not the same accusation as hiding a price.

For comparison, in the same city: OhioHealth publishes a self-pay price for 41 of the 58 procedures we track at each hospital, Mount Carmel for 52 to 53, and Nationwide Children's for 54.

What we doThe grade on each hospital page is about whether a price exists at all, not whether it is a good price.

One code, seven prices

One billing code, seven different prices

A hospital may list the same procedure code many times at different prices, under an identical description, with nothing indicating which one applies to you.

Mount Carmel East lists CPT 20610, a major joint injection, at seven distinct cash prices — every one of them under the same description.

$15.68
$23.04
$98
$144
$156
$196
$288

CPT 20610 at one hospital. Nothing in the file says which of the seven you would be charged.

This is the trap that matters most, because whichever price a comparison site happens to read first becomes "the price". Reading the lowest of one hospital's seven against another hospital's single figure produced, on an early version of this site, a claim that one hospital charged 87.7× more than another. That number was pure artefact.

What we doWhere a hospital publishes several prices for a code, we show the range and mark it varies, and we leave it out of hospital-to-hospital comparisons entirely.

Not the same unit of sale

The same code is not the same thing at two hospitals

A code can describe one line on a bill at one hospital and an entire surgical episode at another. Both are published honestly. Dividing one by the other is meaningless.

$775.80
$55,316.58

Shoulder arthroscopy, same code. Nationwide Children's publishes a single operating-room line, against a gross charge of $862. Mount Carmel East publishes a whole admission.

So the test is not how far prices spread. It is whether a code names one fixed amount of work. Imaging and lab codes do: one scan, one panel, one draw. DRG codes do too, because a DRG is a bundle CMS itself defines, which is why a hip replacement can be compared even though it is surgery. Surgical CPT codes are where hospitals itemise at different levels, and a code billed at different levels is not a price for the same thing.

This page used to justify that a different way, by how tightly each category's prices cluster, and that was wrong. It was one city's pattern. Here is the gap between the cheapest and dearest cash price published for the same code in the same metro, averaged over every code two or more hospitals publish:

categoryColumbus onlyall 25 metros
Lab tests4.1×109.2×
Imaging5.7×65.1×
Procedures33.4×14.5×

The order reverses. In Columbus the two categories we compare are the tight ones, which is what the old claim rested on. Across 25 metros they are the widest. So a narrow spread never proved anything and we have stopped saying it did.

Those wide national numbers are real prices, not a fault in the reading. Hospitals differ enormously in what fraction of their own list price they charge someone paying cash, and that lands on a blood test as hard as on surgery. The cheapest hospital for a blood count really is the cheapest. What a wide spread cannot tell you is whether two hospitals are selling the same thing, and that is the question that decides what we are willing to rank.

What we doWe rank hospitals against each other on imaging, lab work and the CMS-defined DRG bundles, on that test and not on spread. Surgical codes are shown on a hospital's own page and never ranked. Separately, any hospital publishing more than one price for a code is dropped from that ranking, because it has not told us which price applies.

Both values correct

Two prices for the same test can both be real

Banner Heart Hospital lists a prothrombin time blood test at $0.83 and also at $8.06. Neither is an error. The first is a point-of-care bedside test with a $13 list price; the second is a full lab test with a $126 list price. Both carry the same 6.4% self-pay discount.

We flagged the $0.83 as a suspected bug in our own reader and went to Banner's published file to check. It was correct. We mention it because the instinct to "fix" a number that looks wrong is how a comparison site quietly starts editing hospitals' data.

Wrong unit

A published minimum is often not a price anyone pays

Files carry the minimum and maximum an insurer has negotiated. Some of those rows are not dollar amounts at all — they are a percentage of charges, or a per-day rate, recorded in a way that reads as a very small number.

Taken at face value, OSU's published minimum for a colonoscopy is $0.62. That is not a price. It is a rate expressed in a different unit, and any site that aggregates those rows prints a number it cannot defend.

What we doRows whose rate is not stated in dollars are counted and excluded rather than dropped silently. Each hospital page reports how many were excluded from its file.

Correctly absent

Some missing prices are correct

Hospital files cover facility charges. An office visit or an ECG is billed by the doctor, not the building, so its absence from a hospital's file is the file behaving correctly rather than a gap.

What we doWe mark those procedures as normally absent instead of rendering an empty cell that reads like missing data.

No index, a third unreachable

There is no national list of these files, and roughly a third are unreachable

CMS requires each hospital to advertise its price file at a fixed address on its own website, and does not collect the results anywhere. There is no index.

We checked that address on 1,658 hospital domains. 1,051 answered with a usable file — about 63%. The rest returned nothing, refused automated requests outright, or had no file at the address the rule specifies.

Hospitals also merge and rebrand, and the old address stops working. Beaumont Health became Corewell Health; five Detroit hospitals looked non-compliant purely because we were still asking the old domain. They were publishing normally.

What we doEach metro page says how many of its hospitals we found a file for. A hospital we could not find one for gets a page saying exactly that, rather than being left off the list.

If we have something wrong

Every price on this site links to the hospital file it came from, so you can check any figure against the source. If a hospital publishes its file somewhere we did not look, or we have read something incorrectly, tell us and we will fix it and say what changed.

How we read these files →