Reddenda data products

Your payers published the rates. We made them queryable.

Every major health plan is required by federal rule to publish the rate it negotiated with every provider. What it publishes is multi-gigabyte compressed JSON, at inconsistent grain, with placeholder values mixed in among real prices. We read those filings continuously and turn them into one dollar rate per provider NPI, billing code, payer and period, with the local peer median and the local 90th percentile attached to every row.

The sample is a real slice of the production corpus with the full production schema and the full data dictionary. No card, no trial clock, no sales call required to look at it.

contracted-rate rows in the serving index
NPIs with rate data
payers live
billing codes
peer benchmark cells

These are the live serving figures, read from this site's public stats endpoint when the page loads. They describe what is queryable today, not the total universe indexed toward. If the endpoint does not answer, the label stays and no number appears.

What it is

A public disclosure is not a usable dataset. That gap is the product.

The Transparency in Coverage rule made American healthcare pricing public in principle. In practice it produced files almost nobody can use. Six things have to happen between the payer's filing and a number you can put in front of a contracting committee.

Read the filing, and verify it is what it claims to be

Payers publish an index and then rate files, on their own schedules, at their own URLs. Published filenames are not reliable, so every file is checked against the reporting entity named inside the file itself before anything is ingested.

Resolve the provider group down to the individual NPI

A rate in a machine-readable file is attached to a provider group key, not to a person or a practice. Until that key is resolved to the NPI level, the rate cannot be compared to anything. This is the step most consumers of these files skip.

Normalize every rate expression to one dollar amount

Rates arrive as negotiated dollar amounts, fee-schedule references, per diems, case rates and percentages of charge. They are reduced to a single comparable dollar figure per NPI, billing code, payer and period, with the original rate type preserved on the row.

Remove the placeholders, which are not prices

Payer files contain filler values that look exactly like rates. Left in, they move a median. Every one we have identified is excluded from every percentile, and the full exclusion rule is published below rather than described in the abstract.

Build the local peer comparison

The useful question is never "what is this code worth nationally." It is "what does this payer pay other providers of this specialty, for this code, in this market." Percentiles are computed across providers inside the same code, payer and market, and a cell with too few providers is published empty rather than filled.

Join the public provider registry, and keep the period

Every row carries the NPPES-registered provider attributes and the period the rate was observed, so a refresh adds a new period rather than overwriting history.

The products

Three tiers. The difference between them is grain, not quality.

Every tier is built from the same corpus, with the same filters and the same method. What changes is whether you get provider-level rows, and how much of the country you get them for.

Tier 01 · Free

Sample

One payer, one state, the highest-volume billing codes. The full production schema, not a cut-down preview schema.

  • Provider-level rows for the slice
  • Local peer percentiles on every row
  • The complete data dictionary
  • Deterministic and reproducible, so it is not a cherry-picked extract
  • Not the full payer set
  • Not the full country

For a data team that wants to test joins against its own provider and claims tables before it talks to anybody.

Request the sample
Tier 02 · Subscription

Local Peer Benchmarks

Percentile distributions of negotiated rates by payer, by billing code, by market and by specialty. Refreshed monthly.

  • P25, median, P75 and P90 across providers
  • Provider count and underlying row count on every single cell, so you can judge each one yourself
  • Market level and state level
  • Cells under five providers published empty, never estimated
  • No provider-level rows in this tier

For payer contracting, network strategy, revenue-cycle benchmarking, actuarial work and analytics products that need a defensible local median rather than a national average.

Scope a subscription
Tier 03 · Enterprise license

Contracted Rates, provider grain

The corpus at NPI grain: one normalized dollar rate per provider, billing code, payer and period, with the peer comparison and RateScore attached.

  • Provider-level negotiated rates
  • RateScore, 300 to 850, per NPI per code against the local peer median with a P90 target
  • Partitioned by payer, state and period
  • Delivered as a warehouse share, a Delta share, or Parquet you hold
  • Scope, term, refresh and redistribution set in the licence

For analytics and RCM vendors embedding rate intelligence, payers and systems running competitive rate analysis, and investors doing rate diligence on provider assets.

Talk about a licence

Pricing for the benchmark subscription and the enterprise licence is set against scope, term and delivery, so it is agreed on a call rather than listed here. Multi-entity and portfolio scope is never gated and never priced inline.

How it reaches you

Into the warehouse you already run.

The data does not need to move to be useful. On Snowflake and Databricks you query it inside your own account, with your own compute, and access can be revoked at the end of a term. Where you would rather hold the files, you get Parquet.

Snowflake

A secure data share. Nothing is copied into your account and nothing is exported. You query the shared objects directly.

Databricks

Delta Sharing. The open protocol means the data is also readable from Spark, pandas and BI tools without a Databricks account.

AWS

Dated revisions of Parquet objects in S3, so each monthly refresh is an addition rather than a rewrite.

Files

Compressed Parquet by direct delivery or SFTP, partitioned by payer, state and period. For teams that want the bytes.

Marketplace listings

We are preparing listings on the four storefronts below. None of them is live yet, and this page will say so until each one is. Every product above is available directly today, which is faster than any storefront review in any case.

Snowflake Marketplace

A free sample listing, a subscription-priced benchmark listing, and the provider-grain corpus by private offer only. The enterprise share stays off the public catalogue by design.

In preparation

AWS Data Exchange

A free sample product and a subscription benchmark product with subscription verification enabled, so every subscriber is a known organization. Enterprise scope by private offer.

In preparation

Databricks Marketplace

An instant-access sample and a request-access enterprise listing, both delivered over Delta Sharing.

In preparation

Datarade

Catalogue presence for buyers who start their search in a data marketplace rather than on a vendor site.

In preparation

Directly from Reddenda

Snowflake share, Delta share, Parquet or SFTP, under a licence signed with us. This is how every buyer gets the data today.

Available now
The schema

Published before you ask for it.

A rate benchmark whose method you cannot inspect is not evidence. The columns below are the real production columns. The complete data dictionary, including the exact provenance of every derived field and the known limits of each one, comes with the sample.

Provider grain · negotiated rates
ColumnTypeMeaning
npistring(10)The public federal provider identifier. Never a patient identifier.
billing_codestringCPT, HCPCS, DRG or revenue code.
code_typestringWhich code system the code belongs to.
payerstringThe plan family that published the rate.
negotiated_rate_usddecimal(12,2)The rate, normalized to one dollar figure.
negotiated_typestringHow the payer expressed it before normalization.
billing_classstringProfessional or institutional.
specialtystringFrom the provider registry. Null where the NPI is unmapped, never guessed.
statestring(2)The provider's registered location.
cbsastringThe provider's market.
periodstringThe period the rate was observed, as YYYY-MM.
Benchmark grain · local peer percentiles
ColumnTypeMeaning
payerstringThe plan family.
cptstringThe billing code.
cbsa / statestringThe market, or the state, depending on the table.
specialtystringThe peer group's specialty.
n_npiintegerHow many distinct providers are in the cell.
n_rate_rowsintegerHow many underlying rate rows sit behind them.
p25 · p50 · p75 · p90floatPercentiles across providers, of each provider's own median rate.
periodstringAs YYYY-MM.

One thing about the percentiles that is easy to misread, so we say it in the schema

The percentiles are taken across providers, over each provider's own median rate. A P90 therefore means "the rate at the 90th percentile of providers in this payer, code and market." That is the correct basis for benchmarking one practice against its local peers, and it is the wrong basis for a claim about the spread of individual contracts. Both readings appear in this market. Only one of them is what this column is.

The part nobody publishes

Payer files contain values that are not prices. Here is exactly what we do about it.

This is the single largest source of wrong numbers in price-transparency data, and it is invisible to anyone reading a headline figure. We publish the rule rather than describe it, because a filter you cannot inspect is a filter you cannot trust.

What a placeholder looks like

The most common family is a ceiling value multiplied by clean plan percentages, which is why the resulting numbers are not round. A second family sits at the floor, at one cent or one dollar. A floor placeholder is the more dangerous of the two, because it drags the median and the lower percentiles downward where a reader is least likely to question it.

The signature is spread, not magnitude. One value appearing across hundreds of unrelated billing codes is a placeholder. A high value confined to a single code is a real price for an expensive procedure, and filtering it out would be its own kind of error. We bound on both, and we do not lower the magnitude bound to catch more, because that would start deleting real prices.

-- every percentile in every product is computed -- over rows that survive this, and only this WHERE rate > 0 AND rate < 100000 AND rate NOT IN (<placeholder denylist>) -- and no percentile cell is published unless HAVING count(DISTINCT npi) >= 5

A cell that fails the provider floor is published with nulls. It is never published with a value computed over four providers, and it is never filled in from a wider geography or a national figure to make the table look complete.

Coverage, stated plainly

What we do not have, before you find it yourself.

Every coverage gap below will surface within an hour of a technical evaluation. Naming them here costs us nothing and saves you the hour. If a payer, a state or a code family matters to your work, ask and we will tell you exactly what is in the corpus for it before you commit to anything.

Two national payers are absent

Kaiser and Humana do not appear in the corpus at provider grain. This has been verified in both of our stores rather than assumed. If your work depends on either, this dataset is not the right one for that part of it, and we will say so on the call.

Coverage is uneven by payer and by period

We make no claim that any payer's file set is complete for any state or any month. That is why the provider count and the underlying row count are carried on every benchmark row: so you can judge each cell on its own evidence instead of trusting a headline.

The corpus is current-state, not longitudinal

Depth is concentrated in recent periods. It is the right asset for "what is being paid now and what should we be asking for." It is not yet the right asset for a multi-year rate trend, and we will not present it as one.

Specialty can be null

Where a provider is not mapped to a taxonomy, the specialty field is null. It is left null rather than filled with a specialty average or a best guess, because a guessed specialty silently corrupts every peer group it lands in.

Some peer groupings are still being refined

At least one specialty bucket currently merges two distinct professions whose distributions diverge materially at the upper percentiles. It is excluded from what we sell until it is split on full taxonomy. You will not find it quietly included.

State is the registered location

Geography comes from the provider's registered practice location in the federal registry. That is not necessarily where a given service was rendered, and for a multi-site organization it is the attribute to check first.

What is in it, and what is not

No patient data. Not now, not in any tier.

The only identifier is the NPI

The National Provider Identifier is a public federal identifier for a provider or an organization. There is no member, claim, encounter, diagnosis or demographic field in any table we publish, and the schema is checked for their absence before a partition ships. No PHI is required or stored for any product on this page. That is a statement about the contents of the data. It is not a claim of HIPAA certification and it is not an offer of a business associate agreement.

The source is public federal disclosure

Rates are derived from the machine-readable files health plans are required to publish under the federal Transparency in Coverage rule, and from the public NPI registry. The filings are ours to read because they are published for everyone to read. What we add is the parsing, the provider resolution, the normalization, the placeholder detection and the peer statistics.

Every number is computed, never estimated

Nothing in any tier is modeled, imputed, interpolated or filled from an average. Where we do not have enough evidence for a value, the value is absent and the row says so. An honest empty cell is worth more to a buyer than a plausible one.

Support, refresh and change notice

Monthly refresh, adding a period rather than rewriting one. Support at david@reddenda.com with a one business day first response. Any breaking schema change is announced to active subscribers at least thirty days ahead, and the prior schema stays queryable for that period.

Start with the sample.

Tell us the payers and states you care about and what you are building. You get a real slice of the production corpus with the full schema and the full data dictionary, and a straight answer about what the corpus does and does not hold for your use case.

Reddenda, operated by TwinFlame. Support and licensing: david@reddenda.com.