H54publishedNPD release 2026-08-20

The role gap is a Medicare-billing gap

Every coverage percentage this project publishes divides by the NDH’s active Practitioner set, and nobody had checked what is in it. Measured across every active Pennsylvania practitioner against their NPPES taxonomy: role coverage does not vary a little between professions, it varies by orders of magnitude, and it tracks who bills Medicare rather than who practises. At 2026-08-20, 82.0% of advanced-practice clinicians and 74.3% of physicians carry a PractitionerRole, against 24.6% of therapists, 22.9% of behavioral-health providers, 13.3% of dentists, 4.8% of nurses and 4.2% of pharmacy providers. The 2026-08-20 release narrowed every one of those gaps: at 2026-05-08 the same figures were 77.9%, 69.8%, 19.6%, 14.8%, 4.7%, 2.7% and 1 of 12,995. The consequence is that an endpoint-coverage number is really a statement about Medicare-billing specialties, and the directory publishes no field that says so.

Headline

NDH role coverage tracks Medicare billing, not clinical practice: 82.0% of PA advanced practice providers carry a PractitionerRole against 4.2% of pharmacy providers (526 of 12,465).

526 / 12.5K = 4.22%

advanced practice82.0%
physician74.3%
podiatry69.3%
eye vision67.7%
chiropractic46.2%
student27.4%
rehab therapy24.6%
dietary24.1%
other clinical23.8%
behavioral health22.9%
dental13.3%
support7.80%
nursing4.80%
pharmacy4.20%

unit: percent

What this means

Everyone using NDH

A directory-wide endpoint or affiliation percentage is not evenly distributed across the professions it appears to describe. Quoting it without the profession breakdown reads as a claim about all clinicians when the measurement is dominated by the Medicare-billing ones. The per-category rates ship in the finding JSON so the qualified version is as easy to cite as the headline.

CMS publishing the data

A consumer cannot currently tell a specialty with genuinely no digital presence from one the directory simply does not describe. Both look like an empty PractitionerRole. Publishing the provenance of each role, or its absence, would separate them without collecting anything new.

Methodology readers

The registered prior was that the gap is mostly NPIs holding no patient record, and the data rejected it. Students, pharmacy, aides, transport, suppliers and facilities together are 5.2% of the active set, so removing them moves coverage by about a point. That prior is kept in the record rather than quietly replaced, and it is why the finding reports profession spread instead.

Null hypothesis

Role coverage is independent of provider taxonomy, so the share of practitioners carrying a PractitionerRole is statistically indistinguishable across NUCC groupings.

Denominator

Every active Practitioner resource in the pinned NDH release whose practice state is the audited state and which carries a non-null NPI, joined to NPPES for taxonomy. Reported whole; no sampling. The NPPES join is unfiltered by state on purpose, because a state predicate costs the same in BigQuery and would drop the 6,383 Pennsylvania practitioners whose NPPES practice address is recorded elsewhere.

Data source

cms_npd.practitioner and cms_npd.practitioner_role from the pinned NDH release, joined to bigquery-public-data.nppes.npi_raw for taxonomy and deactivation, categorized through the NUCC Health Care Provider Taxonomy code set (analysis/nucc_taxonomy.py, newest available release), with the CMS enrollment path supplied by analysis/ingest_pecos_affiliations.py. Compute script: analysis/h54_role_gap_composition.py.

Notes

The registered prior was that the role gap is mostly NPIs that hold no patient record. It is not supported: categories that are not an independently practising clinician total 11,704 of 230,837 (5.1%), so removing them moves coverage by about a point. The measured signal is the spread between professions instead. Categories are NUCC groupings mapped one-to-one, which is a lookup rather than a judgement about any provider; no category is asserted to be incapable of holding a record. Rates are shown only for categories of at least 1,000 NPIs, because a three-member category would otherwise top the ranking. NPPES is joined unfiltered because BigQuery bills for columns read rather than rows returned, so a state predicate costs the same and drops practitioners whose NPPES practice address is out of state. Per-NPI detail ships as role-gap-composition-<state>.csv.

Get the next finding in your inbox. One email per release, no filler.