NPI Lookup.
Search the CMS National Provider Identifier registry. Find providers by NPI number, name, or organization — free, no account needed.
💡 For best results enter both first and last name. Last name only searches may return limited results.
Data sourced from the CMS NPPES public registry. Results may be cached up to 5 minutes.
What is an NPI Number?
A National Provider Identifier (NPI) is a unique 10-digit numeric identifier assigned to every covered healthcare provider in the United States under the Health Insurance Portability and Accountability Act (HIPAA). Introduced by the Centers for Medicare & Medicaid Services (CMS) in 2004 and fully required by 2008, the NPI replaced a fragmented landscape of payer-specific provider IDs with a single, permanent identifier that travels with a provider throughout their career.
The NPI is purely an identifier — it carries no embedded intelligence about a provider's specialty, state, or employer. The 10-digit number follows the Luhn algorithm for check-digit validation, which lets software instantly flag mistyped NPIs before submitting a claim.
Type 1 NPI — Individual
Assigned to licensed healthcare professionals: physicians, nurses, therapists, dentists, and any other individual who provides health services. A provider keeps their Type 1 NPI for life, regardless of employer changes.
Type 2 NPI — Organization
Assigned to group practices, hospitals, clinics, home health agencies, and other healthcare organizations. A single organization may hold multiple Type 2 NPIs for different practice locations or sub-units.
NPIs are required on all HIPAA-standard electronic transactions — 837 claims, 270/271 eligibility inquiries, 278 prior authorizations, and more — making them the cornerstone identifier in any healthcare data pipeline.
How to Use This NPI Lookup Tool
This tool queries the CMS NPPES public API in real time. No login, no rate limits for standard use, and results reflect the current registry state.
Search by Provider Name
- 1Select "Individual" as the entity type.
- 2Enter first name and/or last name.
- 3Optionally add a state to narrow results.
- 4Click Search — matching providers appear below.
- 5Click any result to expand full details including taxonomy and address.
Search by NPI Number
- 1Paste the 10-digit NPI directly into the NPI field.
- 2Leave all other fields blank.
- 3Click Search — an exact match is returned.
- 4Review the provider's name, entity type, taxonomy, and address.
- 5Use the Enumeration Date to confirm when the NPI was first issued.
Tip: When searching for organizations, switch the entity type to "Organization" and enter the legal business name. Partial name matches work — try the first few words of a hospital or practice group name.
Common NPI Lookup Use Cases
Claims Processing Verification
Clearinghouses and payers validate the rendering, billing, and referring NPIs on every 837 claim before adjudication. An invalid or deactivated NPI triggers an immediate rejection. Lookup the NPI before submission to catch errors upstream.
Provider Credentialing
Credentialing teams verify that a provider's NPI matches their license, specialty taxonomy, and practice address. NPI lookup is typically one of the first steps in primary source verification before CAQH attestation or direct payer enrollment.
Prior Authorization
278 prior authorization transactions require the ordering and servicing provider NPIs. Confirming the correct NPI and active taxonomy before submitting a PA request reduces administrative denials and callback volume.
EDI 837 Claim Submission
Every 837P (professional) and 837I (institutional) claim carries multiple NPI loops — billing provider, rendering provider, and referring provider. Use this tool to verify each NPI and confirm the matching taxonomy code before batch submission.
NPI Data Fields Explained
| Field | Description |
|---|---|
| NPI Number | 10-digit unique identifier assigned by CMS. Validated with the Luhn check-digit algorithm. Permanent — never reassigned after deactivation. |
| Entity Type | Type 1 (individual licensed provider) or Type 2 (organization). Determines which name fields are populated and how the NPI should appear in claim loops. |
| Provider Name | Legal name of the individual or organization. For individuals: last name, first name, credential suffix. For organizations: legal business name as registered with the IRS. |
| Taxonomy Code | 10-character Health Care Provider Taxonomy code describing the provider's specialty and classification. A provider may hold multiple taxonomy codes; the primary code drives claim adjudication logic. |
| Address | Primary practice location address from the NPPES record. This is not necessarily a billing address — it reflects where the provider practices and is used for geographic routing and credentialing. |
| Enumeration Date | The date the NPI was first issued. Useful in credentialing workflows to confirm that the provider's NPI predates the services being billed, and to flag newly enumerated providers requiring additional verification. |
NPI Column Naming Standards
ISO-11179 standard column names for NPI and provider identifier fields in Snowflake, Databricks, and BigQuery.
| Business Name | Standard Column Name | Data Type | Notes |
|---|---|---|---|
| National Provider Identifier | npi_nbr | VARCHAR(10) | Always VARCHAR — never INTEGER |
| NPI Type | npi_type_cd | VARCHAR(1) | 1=Individual, 2=Organization |
| Provider First Name | prvdr_first_nm | VARCHAR(100) | Type 1 NPIs only |
| Provider Last Name | prvdr_last_nm | VARCHAR(100) | Type 1 NPIs only |
| Provider Organization Name | prvdr_org_nm | VARCHAR(300) | Type 2 NPIs only |
| Provider Taxonomy Code | prvdr_taxnmy_cd | VARCHAR(10) | 10-char NUCC taxonomy code |
| Provider Taxonomy Description | prvdr_taxnmy_desc | VARCHAR(300) | Specialty description |
| NPI Status | npi_sts_cd | VARCHAR(1) | A=Active, D=Deactivated |
| NPI Enumeration Date | npi_enum_dt | DATE | Date NPI was first issued |
| NPI Deactivation Date | npi_deact_dt | DATE | NULL if currently active |
| Provider Practice Address | prvdr_prac_addr | VARCHAR(200) | Primary practice location |
| Provider Practice State | prvdr_prac_st_cd | VARCHAR(2) | 2-char state code |
| Provider Practice ZIP | prvdr_prac_zip_cd | VARCHAR(10) | 5 or 9 digit ZIP |
| Rendering Provider NPI | rndrng_prvdr_npi | VARCHAR(10) | On claims — who performed service |
| Billing Provider NPI | billng_prvdr_npi | VARCHAR(10) | On claims — who bills payer |
| Referring Provider NPI | rfrrng_prvdr_npi | VARCHAR(10) | On referrals and some claims |
Browse all provider-related column standards in the Provider domain glossary →
DIM_PROVIDER Data Warehouse Schema
Store NPI data as a slowly changing dimension (SCD Type 2) in your data warehouse. Load from the CMS NPPES weekly dissemination file and track provider changes over time.
CREATE TABLE dim_provider ( prvdr_key INTEGER PRIMARY KEY, -- surrogate key npi_nbr VARCHAR(10) NOT NULL, -- natural key npi_type_cd VARCHAR(1) NOT NULL, -- 1=Individual, 2=Org prvdr_first_nm VARCHAR(100), -- Type 1 only prvdr_last_nm VARCHAR(100), -- Type 1 only prvdr_org_nm VARCHAR(300), -- Type 2 only prvdr_taxnmy_cd VARCHAR(10), -- primary taxonomy prvdr_taxnmy_desc VARCHAR(300), prvdr_spclty_desc VARCHAR(200), -- derived from taxonomy npi_sts_cd VARCHAR(1) NOT NULL, -- A=Active, D=Deact npi_enum_dt DATE, -- first issued npi_deact_dt DATE, -- NULL if active prvdr_prac_addr VARCHAR(200), prvdr_prac_city VARCHAR(100), prvdr_prac_st_cd VARCHAR(2), prvdr_prac_zip_cd VARCHAR(10), pecos_enrl_flg BOOLEAN DEFAULT FALSE, -- Medicare enrolled -- SCD Type 2 columns eff_dt DATE NOT NULL, exp_dt DATE, -- NULL = current curr_rec_flg BOOLEAN NOT NULL DEFAULT TRUE, rec_creat_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, rec_updt_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_dim_prvdr_npi ON dim_provider(npi_nbr); CREATE INDEX idx_dim_prvdr_curr ON dim_provider(npi_nbr) WHERE curr_rec_flg = TRUE; CREATE INDEX idx_dim_prvdr_taxnmy ON dim_provider(prvdr_taxnmy_cd); CREATE INDEX idx_dim_prvdr_state ON dim_provider(prvdr_prac_st_cd);
Need this DDL for Snowflake, BigQuery, or Databricks? Use the free DDL Converter →
dbt Model for NPI Reference Data
Load the NPPES weekly dissemination file as a dbt source and build a clean provider dimension with data quality tests.
models/reference/dim_provider.sql
{{ config(
materialized='table',
schema='reference',
tags=['reference', 'npi', 'provider']
) }}
with source as (
select * from {{ source('nppes', 'npi_raw') }}
),
cleaned as (
select
npi as npi_nbr,
entity_type_code as npi_type_cd,
-- Individual provider fields (Type 1)
provider_first_name as prvdr_first_nm,
provider_last_name_legal_name as prvdr_last_nm,
-- Organization fields (Type 2)
provider_organization_name_legal_business_name as prvdr_org_nm,
-- Taxonomy
healthcare_provider_taxonomy_code_1 as prvdr_taxnmy_cd,
-- Address
provider_practice_location_address_first_line as prvdr_prac_addr,
provider_practice_location_address_city_name as prvdr_prac_city,
provider_practice_location_address_state_name as prvdr_prac_st_cd,
provider_practice_location_address_postal_code as prvdr_prac_zip_cd,
-- Status
nvd as npi_enum_dt,
npi_deactivation_date as npi_deact_dt,
case
when npi_deactivation_date is null then 'A'
else 'D'
end as npi_sts_cd,
-- Derived
case
when npi_deactivation_date is null then true
else false
end as is_active
from source
where npi is not null
and length(npi) = 10
)
select * from cleanedmodels/reference/dim_provider.yml — dbt tests
version: 2
models:
- name: dim_provider
columns:
- name: npi_nbr
tests:
- not_null
- unique
- dbt_utils.expression_is_true:
expression: "length(npi_nbr) = 10"
- dbt_utils.expression_is_true:
expression: "npi_nbr not regexp '[^0-9]'"
- name: npi_type_cd
tests:
- not_null
- accepted_values:
values: ['1', '2']
- name: npi_sts_cd
tests:
- not_null
- accepted_values:
values: ['A', 'D']NPI Data Quality Rules for Data Engineers
Common NPI data quality issues in healthcare data warehouses and SQL to detect them.
NPI Stored as INTEGER
Storing NPI as INT or BIGINT drops leading zeros and fails Luhn validation. Always use VARCHAR(10).
-- Find NPIs stored with wrong length (leading zero dropped) SELECT claim_id, rndrng_prvdr_npi FROM fact_claim_header WHERE LENGTH(rndrng_prvdr_npi) < 10 AND rndrng_prvdr_npi IS NOT NULL;
Invalid NPI — Luhn Algorithm Failure
Every valid NPI passes the Luhn check-digit algorithm. Failed checks indicate typos or fabricated NPIs.
-- Validate NPI format (10 digits, numeric only)
-- Full Luhn check requires UDF; start with format validation
SELECT claim_id, rndrng_prvdr_npi
FROM fact_claim_header
WHERE rndrng_prvdr_npi NOT REGEXP '^[0-9]{10}$'
AND rndrng_prvdr_npi IS NOT NULL;Deactivated NPI on Active Claims
Claims submitted with deactivated NPIs are rejected by payers. Cross-reference against NPPES weekly file.
-- Find claims using deactivated NPIs SELECT c.claim_id, c.svc_dt, c.rndrng_prvdr_npi, p.npi_deact_dt FROM fact_claim_header c JOIN dim_provider p ON c.rndrng_prvdr_npi = p.npi_nbr WHERE p.npi_sts_cd = 'D' AND p.curr_rec_flg = TRUE;
Missing NPI on Claims
HIPAA requires NPI on all 837 transactions. Missing rendering or billing NPI causes claim rejection.
-- Claims missing required NPI fields SELECT claim_id, claim_type_cd, rndrng_prvdr_npi, billng_prvdr_npi FROM fact_claim_header WHERE rndrng_prvdr_npi IS NULL OR billng_prvdr_npi IS NULL;
Type 1 NPI Used as Billing NPI for Group
Group practices must bill under their Type 2 (organization) NPI, not the individual provider Type 1 NPI.
-- Find individual NPIs (Type 1) used as billing NPI -- when rendering NPI differs (suggests group billing error) SELECT c.claim_id, c.billng_prvdr_npi, p.npi_type_cd FROM fact_claim_header c JOIN dim_provider p ON c.billng_prvdr_npi = p.npi_nbr WHERE p.npi_type_cd = '1' AND c.rndrng_prvdr_npi != c.billng_prvdr_npi;
Frequently Asked Questions
What is an NPI number?
An NPI (National Provider Identifier) is a unique 10-digit numeric identifier assigned to healthcare providers under HIPAA. It is required on all electronic healthcare transactions — from claims to prior authorizations — and serves as the universal provider identifier across all US payers.
How do I find my NPI number?
Enter your first name, last name, and state into the search tool above. Your NPI will appear in the results alongside your registered address and taxonomy code. You can also find your NPI on your NPPES confirmation letter or in your payer enrollment documentation.
What is the difference between Type 1 and Type 2 NPI?
A Type 1 NPI belongs to an individual licensed healthcare provider. A Type 2 NPI belongs to an organization — a hospital, group practice, or clinic. Individual providers who bill through a group practice typically have their own Type 1 NPI and bill under the group's Type 2 NPI simultaneously.
Is NPI lookup free?
Yes. The NPI registry is a public dataset maintained by CMS and freely accessible via the NPPES API. This tool queries that API directly — no account, subscription, or payment required.
How often is NPI data updated?
CMS processes NPPES updates weekly. New registrations, address changes, taxonomy updates, and deactivations are reflected on a rolling basis. Full monthly dissemination files are also available for bulk download directly from CMS.
What data type should I use to store NPI numbers in Snowflake or BigQuery?
Always store NPI numbers as VARCHAR(10), never as INTEGER or BIGINT. NPIs are exactly 10 numeric digits but must be treated as strings because (1) leading zeros are significant for the Luhn check-digit algorithm, (2) numeric operations on NPIs are meaningless, and (3) some edge cases in legacy data include formatted NPIs with dashes. In BigQuery use STRING, in Databricks use STRING or VARCHAR(10). Add a CHECK constraint or dbt test enforcing length = 10 and all-numeric format.
How do I validate NPI numbers in my data pipeline?
NPI validation has two layers. First, format validation: the NPI must be exactly 10 numeric digits (regex: ^[0-9]{10}$). Second, check-digit validation: NPIs use the Luhn algorithm — prepend "80840" to the NPI, apply Luhn, and the result must be divisible by 10. In dbt, implement a custom macro or use dbt_utils.expression_is_true for format checks, then join against dim_provider to catch deactivated or non-existent NPIs. Always validate NPI existence against the NPPES weekly file, not just format.
Related Guides
Related Tools
SQL Linter
Catch SQL bugs, performance issues, and naming violations.
DDL Converter
Convert DDL schemas between Snowflake, BigQuery, and more.
Naming Auditor
Audit column and table names against healthcare standards.
Bulk Sanitizer
Sanitize and standardize bulk healthcare data fields.
Name Generator
Generate standard column and table names for healthcare schemas.
Data Modeling
AI-assisted healthcare data model and schema design.