Provider Registry

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

  1. 1Select "Individual" as the entity type.
  2. 2Enter first name and/or last name.
  3. 3Optionally add a state to narrow results.
  4. 4Click Search — matching providers appear below.
  5. 5Click any result to expand full details including taxonomy and address.

Search by NPI Number

  1. 1Paste the 10-digit NPI directly into the NPI field.
  2. 2Leave all other fields blank.
  3. 3Click Search — an exact match is returned.
  4. 4Review the provider's name, entity type, taxonomy, and address.
  5. 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

FieldDescription
NPI Number10-digit unique identifier assigned by CMS. Validated with the Luhn check-digit algorithm. Permanent — never reassigned after deactivation.
Entity TypeType 1 (individual licensed provider) or Type 2 (organization). Determines which name fields are populated and how the NPI should appear in claim loops.
Provider NameLegal 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 Code10-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.
AddressPrimary 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 DateThe 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 NameStandard Column NameData TypeNotes
National Provider Identifiernpi_nbrVARCHAR(10)Always VARCHAR — never INTEGER
NPI Typenpi_type_cdVARCHAR(1)1=Individual, 2=Organization
Provider First Nameprvdr_first_nmVARCHAR(100)Type 1 NPIs only
Provider Last Nameprvdr_last_nmVARCHAR(100)Type 1 NPIs only
Provider Organization Nameprvdr_org_nmVARCHAR(300)Type 2 NPIs only
Provider Taxonomy Codeprvdr_taxnmy_cdVARCHAR(10)10-char NUCC taxonomy code
Provider Taxonomy Descriptionprvdr_taxnmy_descVARCHAR(300)Specialty description
NPI Statusnpi_sts_cdVARCHAR(1)A=Active, D=Deactivated
NPI Enumeration Datenpi_enum_dtDATEDate NPI was first issued
NPI Deactivation Datenpi_deact_dtDATENULL if currently active
Provider Practice Addressprvdr_prac_addrVARCHAR(200)Primary practice location
Provider Practice Stateprvdr_prac_st_cdVARCHAR(2)2-char state code
Provider Practice ZIPprvdr_prac_zip_cdVARCHAR(10)5 or 9 digit ZIP
Rendering Provider NPIrndrng_prvdr_npiVARCHAR(10)On claims — who performed service
Billing Provider NPIbillng_prvdr_npiVARCHAR(10)On claims — who bills payer
Referring Provider NPIrfrrng_prvdr_npiVARCHAR(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 cleaned

models/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.

HIGH

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;
HIGH

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;
HIGH

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;
MEDIUM

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;
MEDIUM

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.