ROLLCALL HEALTH

How the audit works

Rollcall Health reads the provider directory files a health plan already publishes and compares every listing against the federal registries. We ask the plan for nothing.

This page is the whole method, in public: the sources, the tests that raise a finding, the formula and the constants it is scored against. It was published before any directory was ranked by it, and a plan can reproduce any number here from its own file.

What we read

Every issuer on the federal Marketplace files the address of its machine-readable directory with CMS. We start from that file, so the denominator is CMS’s rather than ours.

  1. The index first, then every file it names. A directory is an index of provider files, and a directory is only read when all of them are.
  2. GET, never HEAD. One large payer answers HEAD with 404 and GET with 200 for the same 2,858 files, so a HEAD-based crawl would have recorded every one of them as missing.
  3. The crawler says who it is. It identifies itself in its request headers, carries a contact address, and throttles itself to no more than two requests a second against any one host.
  4. No access a member does not have. We do not solve CAPTCHAs, rotate addresses, or sign in anywhere. Where we cannot read a directory we record a finding, rather than work around it.

What we compare with

Three sources, each of which settles a different question. Every one of them is a federal record or the plan’s own file, and none of them is our opinion. They do not share a cadence, and a check is only as fresh as the file behind it.

What each federal source settles, how it is matched, and how often it moves.
SourceWhat it settlesHow it is matchedHow often it moves
NPPES cumulative deactivation report DEACTIVATEDRegistration cancelled, still listed On NPI. A cancelled NPI is absent from the main NPPES file rather than flagged in it, so the deactivation report is the only source that carries it. The finding takes the deactivation date. Monthly. The weekly incremental carries cancellations only as blank stub rows, so it is not a substitute.
HHS-OIG exclusion list EXCLUDEDBarred from federal programmes, still listed On NPI only, never on a name. Active means the record carries no reinstatement date. Where a provider has several exclusion actions we keep the earliest, so the record does not appear to change between runs. Monthly.
The plan’s own published file STALEThe file itself is undated or old On the Last-Modified header the file sends, against the day we read it. Whenever the plan republishes. We read on our schedule, not theirs.

We copy each registry to a dated, immutable snapshot before a run uses it, so a finding can be reproduced against the exact file it was measured against.

About 78,000 of the exclusion list’s rows carry no NPI. We drop them before matching rather than matching on a name. That limits how much we find. It does not weaken anything we assert.

What raises a finding

Seven conditions, graded by severity. The conditions change as the federal files change. The three levels do not.

Every condition that raises a finding, with its severity level, its code, and who owns the code.
LevelCodeRaised whenCode owner
1C4001The directory index answers with an HTTP errorCMS
1C4003The directory index cannot be retrieved at allCMS
1C4013The index is not JSON, or is not the documented shapeCMS
2P1003A listing carries an NPI the deactivation report records as cancelledCMS
2RF-2A listing carries an NPI with an active exclusionRollcall Health. None of CMS’s 43 codes covers exclusion, so this one says whose it is
3C4006The published file sends no Last-Modified headerCMS
3C4010The published file was last modified more than 30 days before we read itCMS

The 30 days is CMS’s own level 3 warning threshold, written for Medicare Advantage. We align with it because it is the only published threshold. It is not a Marketplace requirement and we never describe it as one.

There is no grace period on the comparison itself. A finding is raised when the federal fact is older than the day we read the file. Whether the plan had an edition in which to fix it is the fault and drift split below. A header that is present but unreadable is treated as absent.

How a finding is counted

A rate is only as good as what it is divided by, so the unit is stated before the number.

  1. The unit is the published directory, not the issuer. One file can carry as many as 24 registrations, so a finding attaches to the file that carries it.
  2. One record is one finding. A record listed under many plan identifiers is still one record. Counting plan associations instead would inflate every rate by whatever a payer chose as its plan structure, which is not a property of directory quality.
  3. Records and providers do not scale into one another. The ratio between them runs from 1.0 to 13.9 across directories, so both are published and neither is derived from the other.
  4. The rate is records over records. A directory’s rate is the records carrying a qualified finding, divided by the records evaluated in that directory, expressed per 10,000. The Index for the whole panel is the same arithmetic at once: qualified records over evaluated records, not an average of the per-directory rates.
  5. Nothing is ranked until the directory was read in full. Zero over zero is not a clean directory, it is an unmeasured one.

Fault and drift

One crawl produces two measurements. A federal fact older than the file’s own edition is the plan’s fault: it published an edition after the fact existed and carried the row anyway. A fact newer than the edition is drift, still wrong in the directory members read today, but not something the plan had an edition in which to fix.

Rankings use drift. A directory that stopped republishing accumulates less fault by construction, so ranking on fault would put the worst-maintained directories at the better end of the table. A finding that carries no federal date is neither, and is never counted as drift by default.

Where 346 and 183 both come from

The CMS machine-readable URL file for 2026 lists 346 rows, one per issuer per state, and the widely quoted figure for Marketplace issuers is 183. Both are right, and 346 is a strict superset. CMS’s own plan attributes file for the same year divides our 346 exactly: 183 medical issuers in the Individual market, 162 stand-alone dental, and one medical issuer that files only into SHOP. There is no residual.

A HIOS issuer ID is a registration rather than a company: Delta Dental holds 24 of them across 22 states, one company that CMS regulates twenty-four times. We derived 183 by applying CMS’s own classification, and we have not located the CMS publication that states it directly, so it stays a derivation rather than a quotation. Accessibility findings are counted per directory index, and the other checks per record, so the counts are not meant to be added together.

Before anything is published

Publishing a number about somebody else’s file is the part that has to be boring. Four gates stand between a crawl and a published run.

  1. Every run reconciles before it can be loaded. Files attempted equals files read plus files failed, every finding traces back to a file we read, and every finding names the index it came from. A run that fails any of these cannot be loaded at all.
  2. A loaded run is not a published one. Loading a run is what runs its checks: it lands VERIFIED or HELD, never published. Publishing is a separate command that a person runs by hand, under their own name, and each publication review is kept in a log that can only be added to, never edited.
  3. A run that did not pass its checks is held. If any check failed, the run is HELD rather than published. So is a run with no checks at all, for the same reason: nothing verified it.
  4. Nothing on a schedule can publish. The scheduled pass has no path to the publish command, and a test asserts that it has none.

Only a published run is served on this site.

Review and response

A plan sees a finding about its own directory before anyone else does. We are reading a file from the outside, and reading from the outside is exactly the position that can be wrong about something the plan can see and we cannot.

  1. Notice goes to subscribers. A plan that subscribes at findings@rollcall.health receives every finding that names it, with the evidence, when it publishes, and can respond on the same thread. Plans that have not subscribed are not privately noticed. For them, publication is the notice.
  2. Publication follows the run, not a notice window. A verified, reviewed run publishes on its own cadence; nothing is held back waiting for a reply, and silence is never published as agreement.
  3. Silence is not agreement. A finding nobody answered is published as unanswered. We never describe a plan that did not reply as having confirmed anything.
  4. A finding can be disputed at any point, including after it is published. There is no window on that. We read the evidence when it arrives, and if it shows the finding is wrong we withdraw it and publish the correction in the same place, dated like everything else here.
  5. A disputed finding stays visible and stays flagged. It is marked as disputed, with the date, until it is either withdrawn or restated. Where a plan wants its response published, it goes up in the plan’s own words or not at all.

One case we cannot settle: when the plan’s argument is that the federal record itself is wrong, the correction has to happen at NPPES or at HHS-OIG, because those files are not ours to edit. We re-read both every run, so the finding clears on its own once the federal record does. Findings and evidence both go to findings@rollcall.health.

What this method does not establish

A finding says a published directory listed an NPI on a date that the federal record contradicts. It is not a determination of anything else, and the following are outside what the evidence supports.

  • That a plan paid anyone
  • Regulatory non-compliance
  • Provider eligibility
  • Credentialing status
  • Misconduct
  • That the row is still listed today
  • Accuracy of any field we did not check

We cannot see claims, so the first of those is permanently out of reach rather than merely unmeasured. Exclusion carries a statutory basis that separates mandatory grounds from permissive ones, and a permissive exclusion can rest on something as far from patient harm as a defaulted student loan, which is one reason we hand a finding to the plan rather than publishing a name.

The tests cannot change silently

A measurement whose tests drift is not a measurement. The method on this page is frozen per version, and the system that runs it has no way to alter it quietly.

  • Constants are frozen per method version. The baseline, the dispersion adjustment and the eligibility floor are fixed when a version ships. A directory's band moves only when its own rate moves, never because the yardstick moved.
  • A method change is a new series, never a restatement. Re-scoring is published as a parallel version over the same stored observations, with a visible break. History is never rewritten under the old name.
  • A new check is never backfilled. A check added this year cannot create findings in last year's runs. What was not measured stays unmeasured.
  • Machines run the tests; people change them. Agents operate the weekly pass and draft its review. A change to what is tested, and the decision to publish, are made by a person and recorded.

The policies this method operates under

We can run every check on this page against your own published directory and send you the rows we find, each with its date and its federal source. It costs you nothing and needs nothing from your systems.

Request findings for a directory