Overview Datasets Pricing Get access Coverage Schema Methodology Trust FAQ
HomeDataDatasetsContracted Rates by Provider
Dataset

Contracted Rates by Provider

What one named practice is contracted for, with which insurers, at what rates — down to the plan.

What is this practice actually contracted for, and at what rates?

The whole contract stack for a named practice: identity, the insurers it works with, the plans underneath them, and the rate on every code — with Medicare volume alongside so you can see which lines are real.

What you getOne row per provider, per plan, per code
What it coversNamed practices across the insurers we cover
What it is joined toRates, benchmarks, provider identity and observed Medicare volume

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 metro

Every provider in a defined market, with their contracts and rates.

$10,000a year
Get this

One specialty, nationally

All providers in a specialty — infusion centres, retina, oncology.

$25,000a year
Get this

Everything

The full provider grid across the insurers we cover.

$80,000a year
Get this

What is in it

Questions it answers

What it does not do

It is not a claims dataset.

It shows what a practice is contracted for, not what it billed or was paid. Medicare volume is there as a reality check on the contract, not as revenue.

Volume is Medicare-observed only.

We can tell you what a practice bills Medicare. We cannot tell you its commercial volume, because no public file discloses it. Treat it as a floor and a sanity check, not a market share.

If you only need market ranges, this is overkill.

Rates summarised by insurer, state and code are in Specialty Drug Rates at a fifth of the price.

Who buys this

Why it is worth the money

It answers the diligence question directly

When someone is buying a practice, the question is always what its contracts are worth. This is that question as a table rather than a four-week consulting engagement.

Plan level, not just insurer level

A practice can hold very different rates across one insurer’s PPO, HMO and exchange products. Rolling them into a single insurer rate hides the thing you are trying to see.

Ghost contract lines are marked, not hidden

Published research found the median insurer file is 95.7% provider and code pairs nobody would ever bill. Matching each line against observed Medicare volume is what separates a real contract from filing noise.

One name per practice

Group practices file under many spellings and several tax IDs. Normalizing that is most of the work in making provider data joinable to anything you already have.

What a row looks like

Real rows from the current build, in the shape this dataset ships.

Real rows · 2026-Q2-06 rate_market, the production table · as of 21 August 2026
InsurerStateRatesp10Medianp90QualityFlagged
uhcNY6,221$23.36$33.23$54.7272.5no
uhcCA6,092$25.52$34.83$64.8772.5no
uhcFL5,923$24.03$32.99$58.8672.5no
aetnaFL5,611$30.03$1,591.69$4,227.9865.0yes
uhcTX5,472$24.41$33.22$57.8272.5no
aetnaCA5,329$31.64$1,654.20$4,295.2965.0yes
Denosumab, professional claims, six real rows out of the table you would license. Watch rows four and six: Aetna files this drug per vial where UnitedHealthcare files it per milligram, so the same drug reads as $1,591 instead of $33. The pipeline caught it, flagged the row and recorded how it was corrected — those rows ship flagged rather than deleted, so you can see what we would have excluded.

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_intel

Specialty and infusion rates at tax-ID level, with the ghost count, the confidence interval and the federal benchmark already on every row. This is the production table, column for column.

Key vintage × payer × state × billing_code × billing_code_modifier × billing_class × tin

ColumnTypeWhat it is
vintage key TEXT Which quarterly build the row belongs to. Current is 2026-Q2-06.
payer key TEXT The insurer the rate is attributed to.
src_payer TEXT The file it came out of. Kept because one insurer’s file can carry rates for several.
state key TEXT Two-letter state.
billing_code key TEXT HCPCS or CPT.
billing_code_modifier key TEXT Part of the key. Averaging across modifiers gives a wrong number that looks right.
service_code TEXT Place-of-service grouping as the insurer filed it.
billing_class key TEXT professional or institutional.
negotiated_type TEXT negotiated, fee schedule, derived, or blank.
tin key TEXT Tax ID. This is what makes the table entity-level rather than market-level.
n_obs BIGINT Observations behind the row after filtering.
n_raw BIGINT Observations before filtering.
n_ghost BIGINT How many were ghost rates — codes that provider would never bill. Counted, not silently dropped.
n_unit_uncertain BIGINT Rows whose billing unit could not be resolved. Per-vial against per-milligram lives here.
rate_raw DOUBLE Before unit normalization.
rate_final DOUBLE After. This is the number to use.
sd_used DOUBLE Standard deviation behind the interval.
ci_low DOUBLE Lower bound of the confidence interval.
ci_high DOUBLE Upper bound. A wide interval is telling you something.
veracity TEXT measured where the rate is observed, otherwise how it was derived.
proxy_source TEXT What stood in when the rate was not directly observed.
confidence DOUBLE 0 to 1. Set your own floor; ours is high.
medicare_bench DOUBLE Medicare allowed for the same code and locality.
asp_per_unit DOUBLE CMS average sales price. Drugs only, null for procedures.
asp_plus6 DOUBLE ASP plus 6 percent, the federal drug benchmark.
ratio_vs_medicare DOUBLE The rate over the Medicare allowed amount.
ratio_vs_asp6 DOUBLE The rate over ASP+6%. Under 1 means commercial pays less than the federal benchmark.
anchor_source TEXT What the row was anchored against, usually medicare.
triangulation TEXT Whether independent sources agreed.

practice

One row per tax ID, resolved to a single practice name. 890,761 practices.

Key tin

ColumnTypeWhat it is
tin key TEXT Tax ID. Joins to the rate tables.
practice_name TEXT One canonical name, chosen across every spelling that appears.
city TEXT Primary location.
state TEXT Primary state.
n_states BIGINT How many states the practice operates in.
n_clinicians BIGINT How many providers bill under this tax ID.
max_payers BIGINT The most insurers any one of its providers is contracted with.
evidence BIGINT How much evidence sits behind the resolution.
is_aggregator BOOLEAN True for billing companies and management groups. Without this a biller looks like a practice.
name_consensus DOUBLE How strongly the sources agreed on the name.
name_source TEXT Where the chosen name came from.

practice_member

Which providers bill under which tax ID, and which insurers each one is contracted with. 18.6 million links.

Key tin × npi

ColumnTypeWhat it is
tin key TEXT Tax ID.
npi key TEXT National Provider Identifier.
n_payers BIGINT How many insurers this provider is contracted with under this tax ID.
payers TEXT The insurers themselves, as a list. This is the answer to which insurers a practice accepts.

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.

Provider references in the files are not names

Why it bitesInsurers identify providers by reference numbers that mean nothing outside their own file, and the same practice appears under several tax IDs and spellings.

How we handle itWe match references to the national provider registry and normalize to one practice name, and we ship the raw name beside it so you can audit the match rather than trust it.

A contract line is not evidence of activity

Why it bitesMost provider and code pairs in these files are lines nobody would ever bill. At the provider level that matters more than at the market level, because a single ghost line can misprice a whole practice.

How we handle itEvery row carries observed Medicare volume for that provider and code, plus a flag where there is none, so dead lines are visible before they reach a model.

Bundled and capitated arrangements are not unit rates

Why it bitesA practice paid under a bundle or a capitated arrangement has no meaningful per-code rate, and treating one as though it does produces a number that looks fine and is wrong.

How we handle itThe arrangement type travels with every row, and bundled and capitated rows are excluded from unit-rate comparisons rather than averaged in.

340B changes the economics completely

Why it bitesTwo practices with identical contracts can have entirely different drug margins if one buys at 340B prices.

How we handle it340B status is on every row, sourced from the federal covered entity file, so you are never comparing a 340B practice with a non-340B one by accident.

Provider data is a moving target

Why it bitesPractices are acquired, tax IDs change, clinicians move. A profile is accurate as of the build it came from.

How we handle itEvery row carries its build quarter, and the changelog records what moved between builds.

What to know before you buy

This dataset is still in preview

Tell us what you need from it and we will tell you honestly where it is and when it lands.

Join the preview