Skip to content

An NPI lookup is not a license verification

They answer different questions. Confusing them is the most common mistake in provider credentialing automation, and it is easy to make because the NPI record contains a license number that looks authoritative.

The load-bearing fact

License numbers in NPPES are self-reported. A provider types them into their NPI record, and NPPES has no mechanism to check that entry against a state licensing board. NPPES is a registry of who has claimed what, maintained for identification - not an attestation that the claim is true or current.

So an NPI lookup proves a provider exists in the federal registry and reports what they said about themselves. It does not prove the license is real, active, unexpired, or unencumbered. For credentialing and payer enrollment, that gap is the whole job.

One distinction worth keeping straight: this is a statement about NPPES, not about CMS generally. Medicare enrollment through PECOS is a separate process in which CMS does ask for licensure documentation. The NPI registry you query - and the NPPES downloadable file most tools mirror - is not that process, and inherits none of its checking.

Is an NPI number the same as a license number?

No, and they are issued by different bodies for different reasons. An NPI is a single 10-digit federal identifier issued once by CMS, national, permanent, and carrying no authority to practice anything. A license number is issued by a state board, one per state and per profession, and it is the thing that actually grants practice authority - so it expires, renews, and can be suspended or revoked.

One clinician licensed in three states has one NPI and three license numbers. That is why an NPI cannot answer "are they allowed to practice in this state today": it is not scoped to a state, and nothing about it expires.

What each answers

QuestionNPI / NPPES lookupBoard roster verification
Does this provider exist federally?YesNot its purpose
What license do they claim?Yesn/a
Is that license real?NoYes
Is it active today?NoYes, as of the roster date
Suspended, revoked or lapsed?NoYes, where the board publishes it
Does the name on the license match?NoYes, where the roster carries holder names

Cross-referencing the two

We mirror NPPES and the state rosters, so a single call can take a provider's claim and adjudicate it against the issuing board. The outcome is deliberately not a boolean, because the ways a claim can fail are not equivalent:

  • confirmed - the number is in the board's roster and the holder name corroborates it.
  • name_mismatch - the number exists, under a materially different name. A finding about the provider, and the one worth escalating.
  • unresolved - matched only through a lossy digits-only key that was not unique. Not evidence either way.
  • not_found - we hold that board's roster and the number is absent from it.
  • state_not_covered - we hold no roster for that profession and state. A statement about our coverage, never about the provider.

That last distinction matters more than it looks. Collapsing "we did not check" into "we could not confirm" produces false findings about real people, which is the failure mode a credentialing team can least afford.

Honest limits

We currently hold rosters for 31 states across 149 professions (22,405,628 records). A claim from a state we do not cover comes back state_not_covered, and no amount of NPPES data changes that - the board file is the only thing that can settle it. See the coverage matrix before assuming a state is answerable.

A roster is also a snapshot. Every response carries data_as_of so you can see how old the underlying file is, and the board remains the final authority - the source_url in each response links straight to it. How that works is documented in the methodology.

Try the cross-reference

curl -H 'Authorization: Bearer sk_live_xxx' \
  'https://licenseverificationapi.com/api/v1/npi/1013523711/licenses'

No key yet? A free account issues one immediately and includes 500 verifications a month with every data feature - the dashboard playground runs this same call against your own NPIs without writing any code. API reference · Pricing