# Methodology: What's in the NPI database download: NPPES file contents

Every figure on the page is an aggregate. No location-level row, address or phone number is published. Each block below gives the source, the exact query, the row counts and the minimum group size applied.

### Methodology: Records in the NPPES September 2026 file by entity type

- **Asset:** NPPES September 2026 file, one de-identified row per NPI (entity type, practice state, enumeration year, update age, primary taxonomy) (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES monthly full dissemination file (September 2026 release, V2; NPIs issued from 23 May 2005 to 12 September 2026), one de-identified row per NPI. Primary taxonomy = the taxonomy slot flagged primary, else slot 1, labelled with NUCC taxonomy 26.1; update age = time from the last-update date to 1 October 2026, in bands under 1 year, 1 to 3, 3 to 5, 5 to 10 and 10 years or more; never updated = the last-update date equals the enumeration date; a practice location with a non-US country code or no state is counted as 'non-US or blank'; Puerto Rico, other US territories and military (APO/FPO) codes are kept as their own groups. Counts are Provyx aggregations of the public file; taxonomy codes are self-reported by providers.
- **As of:** 2026-09-13; cadence monthly; contribution type first-party data.
- **Rows:** 9798758 input; 9798758 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 3 of 3 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT "entity"
  FROM "npi_facts"
),
rows AS (
  SELECT *,
    CASE "entity" WHEN ? THEN ? WHEN ? THEN ? WHEN ? THEN ? ELSE ? END AS "entity_label"
  FROM filtered
)
SELECT "entity_label", COUNT(*) AS "records", COUNT(*) AS "_n_rows"
FROM rows
GROUP BY "entity_label"
HAVING COUNT(*) >= ?
```
Parameters: `["individual", "individual providers (NPI-1)", "organization", "organizations (NPI-2)", "deactivated", "deactivated NPIs (entity type blank)", "other", 10]`

### Methodology: Active NPI records (individuals plus organizations)

- **Asset:** NPPES September 2026 file, one de-identified row per NPI (entity type, practice state, enumeration year, update age, primary taxonomy) (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES monthly full dissemination file (September 2026 release, V2; NPIs issued from 23 May 2005 to 12 September 2026), one de-identified row per NPI. Primary taxonomy = the taxonomy slot flagged primary, else slot 1, labelled with NUCC taxonomy 26.1; update age = time from the last-update date to 1 October 2026, in bands under 1 year, 1 to 3, 3 to 5, 5 to 10 and 10 years or more; never updated = the last-update date equals the enumeration date; a practice location with a non-US country code or no state is counted as 'non-US or blank'; Puerto Rico, other US territories and military (APO/FPO) codes are kept as their own groups. Counts are Provyx aggregations of the public file; taxonomy codes are self-reported by providers.
- **As of:** 2026-09-13; cadence monthly; contribution type first-party data.
- **Rows:** 9798758 input; 9443429 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 1 of 1 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT 1 AS one
  FROM "npi_facts"
  WHERE "entity" IN (?, ?)
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT COUNT(*) AS "records", COUNT(*) AS "_n_rows"
FROM rows
HAVING COUNT(*) >= ?
```
Parameters: `["individual", "organization", 10]`

### Methodology: NPIs deactivated per year, 2016 to 2026 (deactivation report)

- **Asset:** NPPES deactivated NPI report (14 September 2026), deactivation year only (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES Deactivated NPI Report (14 September 2026, V2), one row per deactivated NPI with its deactivation year. Counts are Provyx aggregations of the public report.
- **As of:** 2026-09-14; cadence monthly; contribution type first-party data.
- **Rows:** 355330 input; 269113 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 11 of 11 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT "deactivation_year"
  FROM "deactivations"
  WHERE "deactivation_year" >= ?
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT "deactivation_year", COUNT(*) AS "deactivated", COUNT(*) AS "_n_rows"
FROM rows
GROUP BY "deactivation_year"
HAVING COUNT(*) >= ?
```
Parameters: `["2016", 10]`

### Methodology: NPIs listed in the 14 September 2026 Deactivated NPI Report

- **Asset:** NPPES deactivated NPI report (14 September 2026), deactivation year only (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES Deactivated NPI Report (14 September 2026, V2), one row per deactivated NPI with its deactivation year. Counts are Provyx aggregations of the public report.
- **As of:** 2026-09-14; cadence monthly; contribution type first-party data.
- **Rows:** 355330 input; 355330 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 1 of 1 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT 1 AS one
  FROM "deactivations"
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT COUNT(*) AS "n", COUNT(*) AS "_n_rows"
FROM rows
HAVING COUNT(*) >= ?
```
Parameters: `[10]`

### Methodology: NPIs in the report deactivated from 23 May 2005 to 31 December 2015

- **Asset:** NPPES deactivated NPI report (14 September 2026), deactivation year only (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES Deactivated NPI Report (14 September 2026, V2), one row per deactivated NPI with its deactivation year. Counts are Provyx aggregations of the public report.
- **As of:** 2026-09-14; cadence monthly; contribution type first-party data.
- **Rows:** 355330 input; 86217 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 1 of 1 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT 1 AS one
  FROM "deactivations"
  WHERE "deactivation_year" <= ?
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT COUNT(*) AS "n", COUNT(*) AS "_n_rows"
FROM rows
HAVING COUNT(*) >= ?
```
Parameters: `["2015", 10]`

### Methodology: NPIs in the report deactivated from 1 January 2016 to 14 September 2026

- **Asset:** NPPES deactivated NPI report (14 September 2026), deactivation year only (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES Deactivated NPI Report (14 September 2026, V2), one row per deactivated NPI with its deactivation year. Counts are Provyx aggregations of the public report.
- **As of:** 2026-09-14; cadence monthly; contribution type first-party data.
- **Rows:** 355330 input; 269113 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 1 of 1 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT 1 AS one
  FROM "deactivations"
  WHERE "deactivation_year" >= ?
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT COUNT(*) AS "n", COUNT(*) AS "_n_rows"
FROM rows
HAVING COUNT(*) >= ?
```
Parameters: `["2016", 10]`

### Methodology: Report NPIs that are deactivated (blank entity type) rows of the September 2026 monthly file

- **Asset:** CMS NPPES Deactivated NPI Report of 14 September 2026, summary counts (one row) (csv, first-party data); owner Provyx.
- **Collection method:** CMS NPPES Deactivated NPI Report of 14 September 2026 (one row per NPI whose deactivation still stands, with its deactivation date), counted in total, before and from 2016, and matched by NPI to the September 2026 monthly file. Counts are Provyx aggregations of the public files.
- **As of:** 2026-09-14; cadence monthly; contribution type first-party data.
- **Rows:** 1 input; 1 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 1 source row; 1 of 1 groups meet it.
- **Query engine:** SQLite over the CSV file

```sql
WITH filtered AS (
  SELECT "in_file_blank_entity"
  FROM "asset"
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT SUM(CAST("in_file_blank_entity" AS REAL)) AS "n", COUNT(*) AS "_n_rows"
FROM rows
HAVING COUNT(*) >= ?
```
Parameters: `[1]`

### Methodology: Active records by enumeration year, 2016 to 2026

- **Asset:** NPPES September 2026 file, one de-identified row per NPI (entity type, practice state, enumeration year, update age, primary taxonomy) (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES monthly full dissemination file (September 2026 release, V2; NPIs issued from 23 May 2005 to 12 September 2026), one de-identified row per NPI. Primary taxonomy = the taxonomy slot flagged primary, else slot 1, labelled with NUCC taxonomy 26.1; update age = time from the last-update date to 1 October 2026, in bands under 1 year, 1 to 3, 3 to 5, 5 to 10 and 10 years or more; never updated = the last-update date equals the enumeration date; a practice location with a non-US country code or no state is counted as 'non-US or blank'; Puerto Rico, other US territories and military (APO/FPO) codes are kept as their own groups. Counts are Provyx aggregations of the public file; taxonomy codes are self-reported by providers.
- **As of:** 2026-09-13; cadence monthly; contribution type first-party data.
- **Rows:** 9798758 input; 4975755 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 11 of 11 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT "enumeration_year"
  FROM "npi_facts"
  WHERE "entity" IN (?, ?)
    AND "enumeration_year" >= ?
),
rows AS (
  SELECT *,
    CASE "enumeration_year" WHEN ? THEN ? ELSE ? END AS "year_note"
  FROM filtered
)
SELECT "enumeration_year", "year_note", COUNT(*) AS "records", COUNT(*) AS "_n_rows"
FROM rows
GROUP BY "enumeration_year", "year_note"
HAVING COUNT(*) >= ?
```
Parameters: `["individual", "organization", "2016", "2026", " (to 12 September)", "", 10]`

### Methodology: Active records by practice-location state (top 10)

- **Asset:** NPPES September 2026 file, one de-identified row per NPI (entity type, practice state, enumeration year, update age, primary taxonomy) (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES monthly full dissemination file (September 2026 release, V2; NPIs issued from 23 May 2005 to 12 September 2026), one de-identified row per NPI. Primary taxonomy = the taxonomy slot flagged primary, else slot 1, labelled with NUCC taxonomy 26.1; update age = time from the last-update date to 1 October 2026, in bands under 1 year, 1 to 3, 3 to 5, 5 to 10 and 10 years or more; never updated = the last-update date equals the enumeration date; a practice location with a non-US country code or no state is counted as 'non-US or blank'; Puerto Rico, other US territories and military (APO/FPO) codes are kept as their own groups. Counts are Provyx aggregations of the public file; taxonomy codes are self-reported by providers.
- **As of:** 2026-09-13; cadence monthly; contribution type first-party data.
- **Rows:** 9798758 input; 9443429 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 61 of 66 groups meet it (5 below the threshold); the largest 10 are listed.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT "practice_state"
  FROM "npi_facts"
  WHERE "entity" IN (?, ?)
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT "practice_state", COUNT(*) AS "records", COUNT(*) AS "_n_rows"
FROM rows
GROUP BY "practice_state"
HAVING COUNT(*) >= ?
```
Parameters: `["individual", "organization", 10]`

### Methodology: Taxonomy slots filled per active record

- **Asset:** NPPES September 2026 file, one de-identified row per NPI (entity type, practice state, enumeration year, update age, primary taxonomy) (sqlite, first-party data); owner Provyx.
- **Collection method:** CMS NPPES monthly full dissemination file (September 2026 release, V2; NPIs issued from 23 May 2005 to 12 September 2026), one de-identified row per NPI. Primary taxonomy = the taxonomy slot flagged primary, else slot 1, labelled with NUCC taxonomy 26.1; update age = time from the last-update date to 1 October 2026, in bands under 1 year, 1 to 3, 3 to 5, 5 to 10 and 10 years or more; never updated = the last-update date equals the enumeration date; a practice location with a non-US country code or no state is counted as 'non-US or blank'; Puerto Rico, other US territories and military (APO/FPO) codes are kept as their own groups. Counts are Provyx aggregations of the public file; taxonomy codes are self-reported by providers.
- **As of:** 2026-09-13; cadence monthly; contribution type first-party data.
- **Rows:** 9798758 input; 9443429 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 10 source rows; 4 of 4 groups meet it.
- **Query engine:** SQLite, read-only

```sql
WITH filtered AS (
  SELECT "taxonomy_slots"
  FROM "npi_facts"
  WHERE "entity" IN (?, ?)
),
rows AS (
  SELECT *,
    CASE "taxonomy_slots" WHEN ? THEN ? WHEN ? THEN ? WHEN ? THEN ? ELSE ? END AS "slots_label",
    CASE "taxonomy_slots" WHEN ? THEN ? WHEN ? THEN ? WHEN ? THEN ? ELSE ? END AS "slots_entity"
  FROM filtered
)
SELECT "slots_label", "slots_entity", COUNT(*) AS "records", COUNT(*) AS "_n_rows"
FROM rows
GROUP BY "slots_label", "slots_entity"
HAVING COUNT(*) >= ?
```
Parameters: `["individual", "organization", "1", "one taxonomy slot", "2", "two taxonomy slots", "3", "three taxonomy slots", "four or more taxonomy slots", "1", "One slot", "2", "Two slots", "3", "Three slots", "Four or more slots", 10]`

### Methodology: What each row of the monthly file holds

- **Asset:** Header of the CMS NPPES September 2026 monthly file: column groups (three rows) (csv, first-party data); owner Provyx.
- **Collection method:** The header row of the CMS NPPES September 2026 monthly file: all columns, the taxonomy-code slots and the other-identifier slots, counted by Provyx.
- **As of:** 2026-09-13; cadence monthly; contribution type first-party data.
- **Rows:** 3 input; 3 after filters and de-duplication.
- **Threshold:** a group is published only when it covers at least 1 source row; 3 of 3 groups meet it.
- **Query engine:** SQLite over the CSV file

```sql
WITH filtered AS (
  SELECT "count", "item", "label"
  FROM "asset"
),
rows AS (
  SELECT *
  FROM filtered
)
SELECT "item", "label", SUM(CAST("count" AS REAL)) AS "n", COUNT(*) AS "_n_rows"
FROM rows
GROUP BY "item", "label"
HAVING COUNT(*) >= ?
```
Parameters: `[1]`

