> For the complete documentation index, see [llms.txt](https://docs.dataplex-consulting.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dataplex-consulting.com/data-catalog/cms-nppes-provider-dataset.md).

# CMS NPPES Provider Dataset

### About the Dataset

The CMS NPPES Provider Dataset is a comprehensive collection of relational tables tracking all Centers for Medicare & Medicaid Services (CMS) National Plan and Provider Enumeration System (NPPES) unique identification numbers (NPI) and attributes for covered health providers. Available on the Snowflake Marketplace, this dataset offers:

* Address and contact information
* License numbers across states
* Other identifiers
* Business names
* Provider taxonomies
* A full taxonomy table broken down by code, grouping, and classification

The dataset is updated weekly with delta changes and undergoes a full refresh monthly, ensuring up-to-date information.

{% hint style="info" %}
**Get Full Access** | [Snowflake Marketplace](https://app.snowflake.com/marketplace/listing/GZT1Z125KD9/dataplex-consulting-data-products-cms-nppes-provider-dataset) | [Databricks](https://checkout.dataplex-consulting.com/b/7sY8wI3n5eKs7rW9y4bQY02) | [Databricks Marketplace](https://marketplace.databricks.com/details/43ddafa7-17bf-439b-be48-ce48e2785c23/Dataplex-Consulting-Data-Products_CMS-NPPES-Provider-Dataset) | [Free Trial](https://trial.dataplex-consulting.com)
{% endhint %}

*Also available: the* [*NPPES Provider Golden Record*](/data-catalog/nppes-validated-dataset.md) *— this same registry with validated & geocoded addresses, deduplicated providers, PECOS/OIG enrichment, and pre-built FHIR resources.*

## NPPES Data, Downloaded and Maintained For You

NPPES data (the National Plan and Provider Enumeration System's full NPI registry) normally means downloading the monthly dissemination file and weekly deltas, then stitching them yourself. Here it arrives as maintained SQL tables on Snowflake or Databricks: weekly delta updates and a monthly full refresh are applied for you, so every query runs against current provider data without a single NPPES download.

## NPI Taxonomy Codes, Joined and Ready

Provider taxonomy is first-class: every NPI carries its taxonomy assignments, and a dedicated taxonomy reference table breaks each code down by grouping, classification, and specialization, with no separate NUCC crosswalk file to fetch and join.

### Dataset Features

* **Comprehensive Coverage**: Includes all HIPAA-covered healthcare providers
* **Regular Updates**: Weekly delta updates and monthly full refreshes
* **Rich Provider Information**: Detailed attributes for each provider
* **Normalized Structure**: Organized into relational tables for efficient querying

### Data Quality and Maintenance

Dataplex Consulting & Data Products prioritizes data quality through:

* Automated data quality checks in all pipelines
* Daily monitoring of ingestion and ETL jobs
* Timely delivery of high-quality data designed for seamless ingestion

### Business Applications

Users can query various provider attributes, including:

* Specialization
* Location
* Address
* Taxonomy
* Licenses
* Identifiers
* Contact data

### Example Use Cases

1. Identify all active providers with a specific primary taxonomy
2. Find all dental providers in a particular city
3. Retrieve all license numbers and states for a specific provider
4. Discover recently deactivated providers

{% hint style="success" %}
**Ready to access NPI Registry data?**

Questions? [Contact our team](mailto:support@dataplex-consulting.com) for a walkthrough.
{% endhint %}

| Platform       | Action                                                                                                                                                                       |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Snowflake**  | [Get on Marketplace →](https://app.snowflake.com/marketplace/listing/GZT1Z125KD9/dataplex-consulting-data-products-cms-nppes-provider-dataset)                               |
| **Databricks** | [Subscribe →](https://checkout.dataplex-consulting.com/b/7sY8wI3n5eKs7rW9y4bQY02) \| [Start 14-Day Free Trial →](https://trial.dataplex-consulting.com/?platform=databricks) |

### Data Structure

The dataset is organized into several interconnected tables:

* PROVIDERS
* PROVIDERS\_ADDRESSES: per-provider address rows. `STATE` is preserved exactly as filed in NPPES (two-letter codes for U.S. addresses; free-text province/region values for international addresses). A `STATE_NORMALIZED` column adds a normalized subdivision code alongside it — [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) for civilian addresses (for example `US-CA`, `CA-ON`, `MX-BCN`), plus the USPS codes `US-AE`/`US-AP`/`US-AA` for U.S. military overseas addresses, which have no ISO equivalent — giving one consistent key for filtering and aggregating U.S. providers and internationally-filed subdivisions. It is `NULL` where the filed value can't be resolved with confidence, which includes most non-U.S. rows (see the [FAQ](#frequently-asked-questions) for coverage and conventions).
* PROVIDERS\_LICENSES
* PROVIDERS\_IDENTIFIERS
* PROVIDERS\_TAXONOMIES: per-NPI taxonomy rows. Each row carries `PROVIDER_LICENSE_NUMBER` + `PROVIDER_LICENSE_STATE_CODE` for the license associated with that taxonomy. The same license can repeat across rows when one state license covers several specialties; nullable for taxonomies without an associated license (e.g., student or training-program codes).
* TAXONOMIES

#### Entity Relationship Diagram

![CMS NPPES Provider Entity Relationship](https://813439891-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDeimGtBflXKQn786VLvj%2Fuploads%2Fgit-blob-32082ad5136cf8588fd9e1e42231dac5f9f9df41%2Fentity-relationship.png?alt=media)

### Platform Schema Reference

This dataset is available on both Snowflake and Databricks. The table names are the same, but the schema prefix differs:

| Platform       | Schema    | Example             |
| -------------- | --------- | ------------------- |
| **Snowflake**  | `dwv`     | `dwv.providers`     |
| **Databricks** | `npi_dwv` | `npi_dwv.providers` |

The examples below show queries for both platforms using tabs.

### Sample Queries

#### 1. Find providers with a specific primary taxonomy

{% tabs %}
{% tab title="Snowflake" %}

```sql
SELECT p.npi,
       p.entity_type_value AS entity_type,
       p.provider_organization_name,
       p.provider_enumeration_date,
       p.provider_first_name,
       p.provider_other_last_name,
       p.provider_gender_code,
       p.authorized_official_telephone_number
FROM dwv.providers p
JOIN dwv.providers_taxonomies pt ON p.id = pt.provider_id
JOIN dwv.taxonomies t ON pt.taxonomy_id = t.id
WHERE pt.primary
  AND t.code = '315D00000X';
```

{% endtab %}

{% tab title="Databricks" %}

```sql
SELECT p.npi,
       p.entity_type_value AS entity_type,
       p.provider_organization_name,
       p.provider_enumeration_date,
       p.provider_first_name,
       p.provider_other_last_name,
       p.provider_gender_code,
       p.authorized_official_telephone_number
FROM npi_dwv.providers p
JOIN npi_dwv.providers_taxonomies pt ON p.id = pt.provider_id
JOIN npi_dwv.taxonomies t ON pt.taxonomy_id = t.id
WHERE pt.primary
  AND t.code = '315D00000X';
```

{% endtab %}
{% endtabs %}

#### 2. Show every taxonomy a provider holds with its associated license

Each row in `PROVIDERS_TAXONOMIES` carries the license number + state for that taxonomy. No JOIN to `PROVIDERS_LICENSES` needed.

{% tabs %}
{% tab title="Snowflake" %}

```sql
SELECT p.npi,
       p.provider_last_name AS last_name,
       p.provider_first_name AS first_name,
       t.code AS taxonomy_code,
       t.classification,
       t.specialization,
       pt.primary AS is_primary_taxonomy,
       pt.provider_license_number,
       pt.provider_license_state_code
FROM dwv.providers p
JOIN dwv.providers_taxonomies pt ON p.id = pt.provider_id
JOIN dwv.taxonomies t ON pt.taxonomy_id = t.id
WHERE p.npi = 1649563966
ORDER BY pt.primary DESC, t.code;
```

{% endtab %}

{% tab title="Databricks" %}

```sql
SELECT p.npi,
       p.provider_last_name AS last_name,
       p.provider_first_name AS first_name,
       t.code AS taxonomy_code,
       t.classification,
       t.specialization,
       pt.primary AS is_primary_taxonomy,
       pt.provider_license_number,
       pt.provider_license_state_code
FROM npi_dwv.providers p
JOIN npi_dwv.providers_taxonomies pt ON p.id = pt.provider_id
JOIN npi_dwv.taxonomies t ON pt.taxonomy_id = t.id
WHERE p.npi = 1649563966
ORDER BY pt.primary DESC, t.code;
```

{% endtab %}
{% endtabs %}

#### 3. Query dental providers in Houston, Texas

{% tabs %}
{% tab title="Snowflake" %}

```sql
SELECT p.npi,
       p.entity_type_value AS entity_type,
       p.provider_organization_name,
       p.provider_enumeration_date,
       p.provider_first_name,
       p.provider_last_name,
       p.provider_gender_code,
       p.authorized_official_telephone_number,
       pa.address_type,
       pa.street1,
       pa.street2,
       pa.city,
       pa.state,
       pa.state_normalized,
       t.classification AS taxonomy_classification,
       t.grouping AS taxonomy_grouping
FROM dwv.providers p
JOIN dwv.providers_taxonomies pt ON p.id = pt.provider_id
JOIN dwv.taxonomies t ON pt.taxonomy_id = t.id
JOIN dwv.providers_addresses pa ON p.id = pa.provider_id
WHERE pa.state_normalized = 'US-TX'
  AND pa.city = 'HOUSTON'
  AND t.display_name LIKE '%Dentist%';
```

{% endtab %}

{% tab title="Databricks" %}

```sql
SELECT p.npi,
       p.entity_type_value AS entity_type,
       p.provider_organization_name,
       p.provider_enumeration_date,
       p.provider_first_name,
       p.provider_last_name,
       p.provider_gender_code,
       p.authorized_official_telephone_number,
       pa.address_type,
       pa.street1,
       pa.street2,
       pa.city,
       pa.state,
       pa.state_normalized,
       t.classification AS taxonomy_classification,
       t.grouping AS taxonomy_grouping
FROM npi_dwv.providers p
JOIN npi_dwv.providers_taxonomies pt ON p.id = pt.provider_id
JOIN npi_dwv.taxonomies t ON pt.taxonomy_id = t.id
JOIN npi_dwv.providers_addresses pa ON p.id = pa.provider_id
WHERE pa.state_normalized = 'US-TX'
  AND pa.city = 'HOUSTON'
  AND t.display_name LIKE '%Dentist%';
```

{% endtab %}
{% endtabs %}

***

### Frequently Asked Questions

**What does NPPES stand for?** The National Plan and Provider Enumeration System, the CMS system that assigns and maintains National Provider Identifiers (NPIs) for covered health providers.

**Can I download NPPES data?** You don't need to. This dataset replaces the NPPES downloadable file workflow with maintained SQL tables, updated weekly with deltas and fully refreshed monthly.

**Does it include NPPES provider taxonomy?** Yes: taxonomy assignments per NPI plus a full taxonomy table by code, grouping, and classification.

**How should I filter or aggregate providers by state?** For U.S. providers, use `PROVIDERS_ADDRESSES.STATE_NORMALIZED`. NPPES stores state as filed by the provider: U.S. addresses use standard two-letter codes, while international addresses are free text, so the same location can appear as `ON`, `ONT`, or `ONTARIO` in the raw `STATE` field. `STATE_NORMALIZED` resolves these to a single [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code where one exists (for example `US-CA`, `CA-ON`, `MX-BCN`), so one value maps to one location. For international providers, aggregate on `COUNTRYCODE` and use `STATE_NORMALIZED` for the subset that carries a subdivision (see the next question). The original `STATE` column is retained unchanged for reference.

**What is `STATE_NORMALIZED`'s coverage, and what about edge cases?** It is populated for effectively all U.S. addresses. For international addresses it is `NULL` for the large majority of rows — most non-U.S. providers have no state filed in the source at all — so `COUNTRYCODE` is the reliable aggregation key outside the U.S.; where a non-U.S. state *is* filed, most values are normalized to a subdivision code. `STATE_NORMALIZED` is also left `NULL` (rather than guessed) whenever the filed value can't be resolved with confidence — a city name entered in the state field, a country name, or a genuinely ambiguous value. One convention to note: values are ISO 3166-2 subdivision codes with one exception — U.S. military overseas addresses use the USPS designations `US-AE`, `US-AP`, and `US-AA` (Armed Forces Europe, Pacific, and Americas), which have no ISO equivalent, so those providers stay groupable rather than dropping to `NULL`. If you validate `STATE_NORMALIZED` against a strict ISO 3166-2 reference, allow for these three codes.

## Get Started

{% hint style="success" %}
**NPI Registry Data Access**

### Choose Your Platform

{% endhint %}

| Platform       | Get Access                                                                                                                                                                                                                                         | Free Trial                                                                              |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| **Snowflake**  | [Get on Marketplace →](https://app.snowflake.com/marketplace/listing/GZT1Z125KD9/dataplex-consulting-data-products-cms-nppes-provider-dataset)                                                                                                     | Available via Marketplace                                                               |
| **Databricks** | [Subscribe →](https://checkout.dataplex-consulting.com/b/7sY8wI3n5eKs7rW9y4bQY02) or [Marketplace →](https://marketplace.databricks.com/details/43ddafa7-17bf-439b-be48-ce48e2785c23/Dataplex-Consulting-Data-Products_CMS-NPPES-Provider-Dataset) | [Start 14-Day Free Trial →](https://trial.dataplex-consulting.com/?platform=databricks) |

|                  |                                                         |
| ---------------- | ------------------------------------------------------- |
| **Includes**     | All provider tables, weekly updates, full documentation |
| **Support**      | Email support included                                  |
| **Cancellation** | Cancel anytime, no long-term commitment                 |

### Support and Contact

For questions or assistance with the CMS NPI Provider Dataset, please contact:

Email: <support@dataplex-consulting.com>

### About Dataplex

Dataplex Consulting & Data Products delivers turnkey, analytics-ready data products that make complex public and commercial data easy to use across modern data platforms. Our data pipelines include automated quality checks and active monitoring to ensure timely, reliable, and well-structured data that is ready for downstream analytics, machine learning, and operational use.

In addition to data products, Dataplex provides data engineering and analytics consulting services to organizations of all sizes. We bring deep, hands-on experience supporting both early-stage companies and large enterprises, helping teams build scalable data platforms, improve data reliability, and become more data-driven.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.dataplex-consulting.com/data-catalog/cms-nppes-provider-dataset.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
