Complete Rate File
The same rates across all 350,000+ billing codes, not just drugs.
The same table without the drug restriction: imaging, surgery, office visits, labs and equipment as well as drugs.
Buy the slice you need
You do not have to take the whole grid. Every slice is the same columns, the same quality gates and the same quarterly refresh over less of it — and slices stack, so nothing is ever bought twice.
One insurer, every code
Everything a single insurer publishes, nationally. The only published price in this market is $25,000 for exactly this; ours is 28% under it.
Three insurers, every code
Any three insurers, nationally. Most competitive questions only need a handful.
What is in it
- All 350,000+ billing codes — imaging, surgery, office visits, labs, equipment and drugs
- 37 insurers across all 50 states and DC
- Split by setting and by professional or institutional billing, so hospital and office pricing sit side by side
- Each rate next to the Medicare allowed amount, and ASP+6% for drugs
- A new build every quarter, in Parquet and CSV
Questions it answers
- What does each insurer pay for a knee replacement in our metro area?
- Where does our current fee schedule sit against the market, line by line?
- Which service lines have the widest spread, and therefore the most room to negotiate?
What it does not do
If you only care about infusion and specialty drugs, Specialty Drug Rates is a third of the price and adds the administration codes.
Same market-level resolution as every rate dataset here.
Who buys this
- Health systems and physician groups modelling a full fee schedule
- Analytics and billing software vendors that need a rate layer
- Insurers benchmarking competitor networks
Why it is worth the money
One shape across every service
Imaging, surgery, office visits, labs, equipment and drugs all arrive in the same columns, so you write the query once.
Priced by what you actually need
Narrow it to a specialty, a region or a few insurers and the price comes down. You are not paying for rows you will never open.
Built to sit inside your product
The schema is versioned and every change is published, because a team building on this needs the columns to stay where they are.
What a row looks like
Real rows from the current build, in the shape this dataset ships.
| Insurer | State | Rates | p10 | Median | p90 | Quality | Flagged |
|---|---|---|---|---|---|---|---|
| uhc | NY | 6,221 | $23.36 | $33.23 | $54.72 | 72.5 | no |
| uhc | CA | 6,092 | $25.52 | $34.83 | $64.87 | 72.5 | no |
| uhc | FL | 5,923 | $24.03 | $32.99 | $58.86 | 72.5 | no |
| aetna | FL | 5,611 | $30.03 | $1,591.69 | $4,227.98 | 65.0 | yes |
| uhc | TX | 5,472 | $24.41 | $33.22 | $57.82 | 72.5 | no |
| aetna | CA | 5,329 | $31.64 | $1,654.20 | $4,295.29 | 65.0 | yes |
The columns
Published in full, before you talk to anyone. Whether this fits your model is a technical question and you should be able to answer it yourself.
rate_market
Every billing code, summarised by insurer, state and billing class. Full percentile spread, hospital charges alongside, and a quality score on each row.
Key payer × state × billing_code × billing_class
| Column | Type | What it is |
|---|---|---|
payer key |
TEXT | The insurer. |
state key |
TEXT | Two-letter state. |
billing_code key |
TEXT | HCPCS or CPT. 353,270 distinct codes in the current build. |
billing_class key |
TEXT | professional or institutional. |
rate_count |
BIGINT | How many rates are behind the row. |
mean_rate |
DOUBLE | Arithmetic mean. |
median_rate |
DOUBLE | The middle rate. |
stddev_rate |
DOUBLE | Spread around the mean. |
p10 |
DOUBLE | 10 percent of rates fall below this. |
p25 |
DOUBLE | 25 percent fall below. |
p50 |
DOUBLE | The median again, as a percentile. |
p75 |
DOUBLE | 75 percent fall below. |
p90 |
DOUBLE | 90 percent fall below. |
min_rate |
DOUBLE | Lowest observed. |
max_rate |
DOUBLE | Highest observed. |
chargemaster_median |
DOUBLE | What hospitals list for the same code, from their published prices. |
chargemaster_gross |
DOUBLE | Gross charge before any discount. |
chargemaster_hospitals |
BIGINT | How many hospitals are behind that figure. |
medicare_rate |
DOUBLE | Medicare allowed. Currently populated for procedures, not yet for drug codes. |
medicare_ratio |
DOUBLE | The rate over Medicare. |
payers_with_code |
BIGINT | How many insurers publish anything for this code. A 1 here means no comparison exists. |
cross_payer_median |
DOUBLE | The median across every insurer, so you can place one against the market. |
volume_score |
DOUBLE | Component of the quality score — how much data sits behind it. |
payer_agree_score |
DOUBLE | Component — how closely insurers agree. |
chargemaster_score |
DOUBLE | Component — consistency against hospital charges. |
medicare_score |
DOUBLE | Component — plausibility against Medicare. |
confidence_score |
DOUBLE | 0 to 100, combining the four components above. |
outlier_flag |
BOOLEAN | Marks rows that look wrong. Shipped rather than deleted so you can see what we would have excluded. |
normalized_rate |
DOUBLE | The rate after unit correction, where one was applied. |
normalization_divisor |
DOUBLE | What it was divided by. |
normalization_ref_rate |
DOUBLE | The reference used. |
normalization_method |
TEXT | How it was corrected, e.g. asp_unit_correction for a per-vial filing. |
Traps in this data, and how we handle them
These catch people out whoever they buy from. They are worth knowing before you model anything with rate or coverage data, including ours.
Most rows in the raw files are rates nobody would ever bill
Why it bitesPublished research on Transparency in Coverage data found the median insurer’s file was 95.7% ghost rates — provider and code pairs like a podiatrist priced for open-heart surgery. Across 61 insurers, 95.4% of pairs were ghosts. An average taken straight off a raw file is mostly noise.
How we handle itEvery row carries a distinct provider count and a 0 to 100 quality score, and we flag rather than delete, so you can set your own floor and see what you excluded. Our own published work uses 70 and above.
Some rates are a percentage, not a dollar amount
Why it bitesInsurers must publish a dollar figure wherever one can be calculated in advance. Where the contract is genuinely a percentage of billed charges, they publish the percentage instead. A 45 sitting next to a 4,500 is not a cheap version of the same thing.
How we handle itThe rate type travels with the value in every row. We never silently convert a percentage into dollars, and percentage rows are kept out of dollar comparisons rather than quietly averaged in.
A contracted rate is not what got paid
Why it bitesThese files describe what an insurer agreed to pay. They say nothing about deductibles, coinsurance, denials, retroactive adjustments or what actually landed on the remittance.
How we handle itWe say so on every page rather than in a footnote. If you need what was paid rather than what was agreed, this is the wrong dataset and we will tell you so before you buy it.
One insurer publishes many networks
Why it bitesA large insurer files rates for PPO, HMO, exchange, rental and administrative-services-only networks. Blending them produces a single rate that no provider is actually paid.
How we handle itNetworks stay distinct. Where you want one number we tell you which network it came from rather than averaging across products that are not comparable.
Averaging across modifiers gives a wrong number that looks right
Why it bitesJW and JZ change how drug wastage is billed. 26 and TC split a professional read from the equipment. Collapse them and the distribution shifts without any obvious sign.
How we handle itModifier is part of the key. The schema says so above the columns, and the sample is built so you can see the effect yourself.
Insurer names on multi-state files are not always what they seem
Why it bitesA file downloaded into one folder can carry a different company name inside it, which matters for plans operating across several states.
How we handle itWe are re-deriving names from file contents. Until that is finished every row carries a confidence column, so you can keep only the attribution you trust.
What to know before you buy
- Coverage by code is uneven, because a code only appears where an insurer published a rate for it. Every row tells you how much is behind it.
- Same insurer-attribution and point-in-time notes as the Infusion dataset.
Load it against your own model
Three states, the production columns, real rows, downloaded directly with no form in front of it. It is the fastest way to answer the fit question.