{
  "_meta": {
    "title": "NPPES NPI Registry — Full Field Reference",
    "description": "Complete field reference for the CMS NPPES NPI Registry downloadable file (NPPES_Data_Dissemination_*_Full_Replacement.zip). Covers all columns in the npidata_pfile_*_FileHeader.csv header specification.",
    "source": "CMS NPPES",
    "source_url": "https://download.cms.gov/nppes/NPI_Files.html",
    "authority": "45 CFR Part 162 (HIPAA Administrative Simplification)",
    "file_format": "CSV, approximately 330 columns, UTF-8",
    "fonteum_snapshot": "2026-05-01",
    "methodology_version": "nppes-anatomy/v1",
    "notes": "Fields marked nullable=true may be blank even when CMS guidelines suggest they should be populated. The 15-slot taxonomy group and the 50-slot Other Provider Identifier group are column-repeated (not JSON arrays). Each repeating slot is listed once here with the slot range noted."
  },
  "core_fields": [
    {
      "column_name": "NPI",
      "type": "varchar(10)",
      "nullable": false,
      "example": "1234567890",
      "description": "The 10-digit National Provider Identifier. The check digit (position 10) is derived via the Luhn algorithm on positions 1-9 with an '80840' prefix.",
      "ai_pitfalls": "Do not use as a foreign key without normalizing to string (leading zeros in test NPIs). The Luhn check digit is for integrity only — do not parse NPI sub-fields as encoding geography or specialty."
    },
    {
      "column_name": "Entity Type Code",
      "type": "char(1)",
      "nullable": false,
      "example": "1",
      "description": "1 = Individual (NPI-1); 2 = Organization (NPI-2). Governs which name/gender fields are populated.",
      "ai_pitfalls": "Mixing Type 1 and Type 2 in aggregate counts skews specialty distributions. Filter explicitly when building any specialty-level analysis."
    },
    {
      "column_name": "Replacement NPI",
      "type": "varchar(10)",
      "nullable": true,
      "example": "1098765432",
      "description": "When CMS replaces one NPI with another (rare, legacy-system migration), the new NPI appears here. This is a hard redirect, not a soft alias.",
      "ai_pitfalls": "Do not treat Replacement NPI as an alternative identifier for joining. It signals that the original NPI record is defunct and all forward references should use the replacement value."
    },
    {
      "column_name": "Employer Identification Number (EIN)",
      "type": "varchar(9)",
      "nullable": true,
      "example": "",
      "description": "Federal tax EIN for organizations. REDACTED in the public dissemination file — the field is present in the header but contains no values.",
      "ai_pitfalls": "This field is always blank in the public file. Do not attempt to use it for organization linkage. Use NPI-2 as the organization identity key instead."
    },
    {
      "column_name": "Provider Organization Name (Legal Business Name)",
      "type": "varchar(70)",
      "nullable": true,
      "example": "NORTHSIDE RADIOLOGY ASSOCIATES PC",
      "description": "The legal business name of an NPI-2 (organization) provider. Null for NPI-1 records.",
      "ai_pitfalls": "Organization names are self-reported free text and not normalized. Identical organizations may appear as 'NORTHSIDE RADIOLOGY ASSOC', 'NORTHSIDE RADIOLOGY ASSOCIATES', and 'NORTHSIDE RADIOLOGY ASSOCIATES PC'."
    },
    {
      "column_name": "Provider Last Name (Legal Name)",
      "type": "varchar(35)",
      "nullable": true,
      "example": "JOHNSON",
      "description": "Last name for NPI-1 (individual) providers. Null for NPI-2 records.",
      "ai_pitfalls": "Use together with Provider First Name and NPI for identity. Last name alone is not sufficient for disambiguation."
    },
    {
      "column_name": "Provider First Name",
      "type": "varchar(20)",
      "nullable": true,
      "example": "EMILY",
      "description": "First name for NPI-1 providers.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Middle Name",
      "type": "varchar(20)",
      "nullable": true,
      "example": "GRACE",
      "description": "Middle name or initial for NPI-1 providers. Highly inconsistent — some providers use full middle name, others an initial, others leave blank.",
      "ai_pitfalls": "Do not use middle name as a join key. It is too inconsistently populated."
    },
    {
      "column_name": "Provider Name Prefix Text",
      "type": "varchar(5)",
      "nullable": true,
      "example": "DR.",
      "description": "Prefix (e.g., Dr., Ms., Mr.) for NPI-1 providers. Free text.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Name Suffix Text",
      "type": "varchar(5)",
      "nullable": true,
      "example": "JR",
      "description": "Suffix for NPI-1 providers (Jr., Sr., III, etc.).",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Credential Text",
      "type": "varchar(20)",
      "nullable": true,
      "example": "MD",
      "description": "Free-text credential string for NPI-1 providers (MD, DO, NP, PA-C, etc.). Self-reported and unstructured.",
      "ai_pitfalls": "This field does NOT attest board certification, active license status, or any credentialing outcome. It is what the provider typed when enrolling. Values include 'MD', 'M.D.', 'Dr.', 'MBBS', 'MD PhD', 'DO', 'NP', 'ARNP', 'RN', and free-form text. Do not parse as controlled vocabulary."
    },
    {
      "column_name": "Provider Other Organization Name",
      "type": "varchar(70)",
      "nullable": true,
      "example": "CITY RADIOLOGY GROUP",
      "description": "A 'doing business as' (DBA) or former name for an organization.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Other Organization Name Type Code",
      "type": "char(1)",
      "nullable": true,
      "example": "3",
      "description": "Code classifying the Other Organization Name: 3=Former Legal Business Name, 5=Other Name.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Other Last Name",
      "type": "varchar(35)",
      "nullable": true,
      "example": "SMITHWICK",
      "description": "Former or other last name for NPI-1 providers (e.g., maiden name).",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Other First Name",
      "type": "varchar(20)",
      "nullable": true,
      "example": "JENNIFER",
      "description": "Former or other first name for NPI-1 providers.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Other Credential Text",
      "type": "varchar(20)",
      "nullable": true,
      "example": "RN",
      "description": "Credential associated with the Provider Other Name entry.",
      "ai_pitfalls": "Same unstructured-free-text caveats as Provider Credential Text."
    },
    {
      "column_name": "Provider Other Last Name Type Code",
      "type": "char(1)",
      "nullable": true,
      "example": "1",
      "description": "Classifies the Other Last Name: 1=Former Name, 2=Professional Name, 3=Doing Business As, 4=Former Legal Business Name, 5=Other Name.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider First Line Business Mailing Address",
      "type": "varchar(55)",
      "nullable": true,
      "example": "123 MAIN ST",
      "description": "Primary line of the provider's business mailing address. This is the correspondence address, NOT necessarily where patients are seen.",
      "ai_pitfalls": "Mailing address is frequently a PO Box, billing service address, or administrative office. Do not use as a proxy for patient-care location."
    },
    {
      "column_name": "Provider Second Line Business Mailing Address",
      "type": "varchar(55)",
      "nullable": true,
      "example": "STE 400",
      "description": "Suite, floor, or building line of the mailing address.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Mailing Address City Name",
      "type": "varchar(40)",
      "nullable": true,
      "example": "CHICAGO",
      "description": "City of the business mailing address.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Mailing Address State Name",
      "type": "varchar(40)",
      "nullable": true,
      "example": "IL",
      "description": "State abbreviation of the business mailing address. Two-character USPS code.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Mailing Address Postal Code",
      "type": "varchar(20)",
      "nullable": true,
      "example": "606010001",
      "description": "ZIP or ZIP+4 code of the mailing address. Stored without hyphen (606010001, not 60601-0001).",
      "ai_pitfalls": "Some records contain 9-digit ZIP (ZIP+4) and others contain 5-digit ZIP. Normalize before geospatial joins."
    },
    {
      "column_name": "Provider Business Mailing Address Country Code (if outside U.S.)",
      "type": "varchar(2)",
      "nullable": true,
      "example": "",
      "description": "ISO 3166-1 alpha-2 country code. Only populated when the address is outside the United States.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Mailing Address Telephone Number",
      "type": "varchar(20)",
      "nullable": true,
      "example": "3125551234",
      "description": "Telephone number for mailing address, stored as digits only (no formatting).",
      "ai_pitfalls": "Phone numbers are self-reported at enumeration and may be years out of date. Do not use as a current contact channel without secondary source confirmation."
    },
    {
      "column_name": "Provider Business Mailing Address Fax Number",
      "type": "varchar(20)",
      "nullable": true,
      "example": "3125551235",
      "description": "Fax number for the business mailing address.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider First Line Business Practice Location Address",
      "type": "varchar(55)",
      "nullable": true,
      "example": "456 HOSPITAL DR",
      "description": "Primary line of the practice location address — where care is typically rendered. Different from the mailing address.",
      "ai_pitfalls": "This is the registered practice location at enumeration time, not a real-time location. Providers move, join new groups, or retire without updating this field. Do not present as the provider's current location without a Last Update Date recency check and cross-source confirmation."
    },
    {
      "column_name": "Provider Second Line Business Practice Location Address",
      "type": "varchar(55)",
      "nullable": true,
      "example": "BLDG B STE 200",
      "description": "Suite/floor of the practice location.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Practice Location Address City Name",
      "type": "varchar(40)",
      "nullable": true,
      "example": "EVANSTON",
      "description": "City of the practice location address.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Practice Location Address State Name",
      "type": "varchar(40)",
      "nullable": true,
      "example": "IL",
      "description": "Two-character state abbreviation of the practice location.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Practice Location Address Postal Code",
      "type": "varchar(20)",
      "nullable": true,
      "example": "60201",
      "description": "ZIP or ZIP+4 of the practice location.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Practice Location Address Country Code (if outside U.S.)",
      "type": "varchar(2)",
      "nullable": true,
      "example": "",
      "description": "ISO 3166-1 alpha-2 country code when address is outside the U.S.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Business Practice Location Address Telephone Number",
      "type": "varchar(20)",
      "nullable": true,
      "example": "8475551100",
      "description": "Practice location telephone number.",
      "ai_pitfalls": "Same currency caveat as mailing telephone."
    },
    {
      "column_name": "Provider Business Practice Location Address Fax Number",
      "type": "varchar(20)",
      "nullable": true,
      "example": "8475551101",
      "description": "Practice location fax number.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Enumeration Date",
      "type": "date (MM/DD/YYYY in CSV)",
      "nullable": false,
      "example": "05/14/2007",
      "description": "Date the NPI was assigned. Stable — never changes after enumeration.",
      "ai_pitfalls": "Do not confuse with the date the provider began practicing. Enumeration may significantly lag the start of practice, especially for legacy providers who enrolled after the 2007 compliance deadline."
    },
    {
      "column_name": "Last Update Date",
      "type": "date (MM/DD/YYYY in CSV)",
      "nullable": false,
      "example": "03/11/2024",
      "description": "Date the record was last modified in the NPPES system. Triggers a new record in the weekly deactivation/update file.",
      "ai_pitfalls": "Do NOT use Last Update Date as a proxy for active practice status. Many providers have 2007-2010 Last Update Dates and are fully active; others have recent updates because they corrected an address while no longer practicing. Recency of update ≠ recency of practice."
    },
    {
      "column_name": "NPI Deactivation Reason Code",
      "type": "varchar(2)",
      "nullable": true,
      "example": "DT",
      "description": "Reason the NPI was deactivated. DT=Death, DA=Disbandment, FR=Fraud, OT=Other.",
      "ai_pitfalls": null
    },
    {
      "column_name": "NPI Deactivation Date",
      "type": "date (MM/DD/YYYY in CSV)",
      "nullable": true,
      "example": "09/01/2022",
      "description": "Date the NPI was deactivated. Records with a non-null deactivation date should be treated as defunct.",
      "ai_pitfalls": "Deactivation can significantly lag actual cessation of practice. A provider who stopped billing in 2020 may not appear with a deactivation date until 2022 or later."
    },
    {
      "column_name": "NPI Reactivation Date",
      "type": "date (MM/DD/YYYY in CSV)",
      "nullable": true,
      "example": "",
      "description": "Date the NPI was reactivated after prior deactivation. Rare.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Provider Gender Code",
      "type": "char(1)",
      "nullable": true,
      "example": "F",
      "description": "M=Male, F=Female. Only populated for NPI-1 (individual) providers. Self-reported.",
      "ai_pitfalls": "Missing or null for most NPI-2 (organization) records, and for many NPI-1 records where the field was left blank at enumeration."
    },
    {
      "column_name": "Authorized Official Last Name",
      "type": "varchar(35)",
      "nullable": true,
      "example": "ROBERTS",
      "description": "Last name of the authorized official for NPI-2 (organization) providers.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Authorized Official First Name",
      "type": "varchar(20)",
      "nullable": true,
      "example": "PATRICIA",
      "description": "First name of the authorized official.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Authorized Official Middle Name",
      "type": "varchar(20)",
      "nullable": true,
      "example": "ANN",
      "description": "Middle name of the authorized official.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Authorized Official Title or Position",
      "type": "varchar(35)",
      "nullable": true,
      "example": "CHIEF MEDICAL OFFICER",
      "description": "Title or position of the authorized official within the organization.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Authorized Official Telephone Number",
      "type": "varchar(20)",
      "nullable": true,
      "example": "7735559900",
      "description": "Telephone number of the authorized official.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Healthcare Provider Taxonomy Code_1 through _15",
      "type": "varchar(10) [15 columns]",
      "nullable": true,
      "example": "207N00000X",
      "slot_range": "Healthcare Provider Taxonomy Code_1 to Healthcare Provider Taxonomy Code_15",
      "description": "Up to 15 NUCC taxonomy codes for the provider. Each code identifies a specialty/provider type. Most providers have 1-2 populated slots.",
      "ai_pitfalls": "A provider may hold codes in all 15 slots. When building specialty-based counts, unnest all 15 slots. The Primary Taxonomy Switch column (below) identifies which slot is the declared primary."
    },
    {
      "column_name": "Provider License Number_1 through _15",
      "type": "varchar(20) [15 columns]",
      "nullable": true,
      "example": "MD098765",
      "slot_range": "Provider License Number_1 to Provider License Number_15",
      "description": "State license numbers, paired with the taxonomy code in the same slot.",
      "ai_pitfalls": "CRITICAL: The presence of a license number in this field does NOT assert that the license is currently active. NPPES accepts the number at enrollment and does NOT validate it against state boards at each refresh. Active/inactive status must be sourced from the relevant state licensing board, not from this field."
    },
    {
      "column_name": "Provider License Number State Code_1 through _15",
      "type": "varchar(2) [15 columns]",
      "nullable": true,
      "example": "IL",
      "slot_range": "Provider License Number State Code_1 to Provider License Number State Code_15",
      "description": "Two-character state code for the corresponding license number slot.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Healthcare Provider Primary Taxonomy Switch_1 through _15",
      "type": "char(1) [15 columns]",
      "nullable": true,
      "example": "Y",
      "slot_range": "Healthcare Provider Primary Taxonomy Switch_1 to Healthcare Provider Primary Taxonomy Switch_15",
      "description": "Y=Primary taxonomy code for this slot. Only one slot per provider should have Y.",
      "ai_pitfalls": "Some providers have Y in multiple slots (data entry inconsistency). When this occurs, prefer the first slot with Y=Y."
    },
    {
      "column_name": "Healthcare Provider Taxonomy Group_1 through _15",
      "type": "varchar(70) [15 columns]",
      "nullable": true,
      "example": "",
      "slot_range": "Healthcare Provider Taxonomy Group_1 to Healthcare Provider Taxonomy Group_15",
      "description": "Optional taxonomy group identifier. Rarely populated.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Is Sole Proprietor",
      "type": "char(1)",
      "nullable": true,
      "example": "X",
      "description": "X=Yes, blank=No/Unknown. Indicates whether an NPI-1 provider operates as a sole proprietor.",
      "ai_pitfalls": "Only applicable to NPI-1 records."
    },
    {
      "column_name": "Is Organization Subpart",
      "type": "char(1)",
      "nullable": true,
      "example": "X",
      "description": "X=Yes, blank=No/Unknown. Indicates whether an NPI-2 organization is a subpart of a larger organization.",
      "ai_pitfalls": "Use Parent Organization LBN and Parent Organization TIN to identify the parent when this is X."
    },
    {
      "column_name": "Parent Organization LBN",
      "type": "varchar(70)",
      "nullable": true,
      "example": "REGIONAL HEALTH SYSTEM INC",
      "description": "Legal Business Name of the parent organization when Is Organization Subpart=X.",
      "ai_pitfalls": "Free text, not normalized. The same parent organization may appear with slightly different names across subpart records."
    },
    {
      "column_name": "Parent Organization TIN",
      "type": "varchar(9)",
      "nullable": true,
      "example": "",
      "description": "Tax Identification Number of the parent organization. Like EIN, this field is REDACTED in the public dissemination file.",
      "ai_pitfalls": "Always blank in the public file. Cannot be used for linkage."
    },
    {
      "column_name": "Other Provider Identifier_1 through _50",
      "type": "varchar(20) [50 columns]",
      "nullable": true,
      "example": "G12345",
      "slot_range": "Other Provider Identifier_1 to Other Provider Identifier_50",
      "description": "Up to 50 legacy or alternative identifiers (UPIN, Medicare legacy number, Medicaid provider ID, DEA number, etc.). Each identifier has a paired Type Code, State, and Issuer column.",
      "ai_pitfalls": "Not all identifier types are standardized. Type codes 01=Other, 04=Medicare UPIN, 05=Medicaid, 06=Medicare PIN, 07=NCPDP Provider Identifier, 08=State License Number (duplicates the taxonomy-slot license field), 09=Tax Identifier, others. Do not assume any type code is consistently populated."
    },
    {
      "column_name": "Other Provider Identifier Type Code_1 through _50",
      "type": "varchar(2) [50 columns]",
      "nullable": true,
      "example": "05",
      "slot_range": "Other Provider Identifier Type Code_1 to Other Provider Identifier Type Code_50",
      "description": "Type code for the identifier in the same slot. 01=Other, 04=Medicare UPIN, 05=Medicaid, 06=Medicare PIN, 07=NCPDP, 08=State License, 09=Tax ID, 10=Medicare Legacy Number.",
      "ai_pitfalls": null
    },
    {
      "column_name": "Other Provider Identifier State_1 through _50",
      "type": "varchar(2) [50 columns]",
      "nullable": true,
      "example": "IL",
      "slot_range": "Other Provider Identifier State_1 to Other Provider Identifier State_50",
      "description": "State for the identifier (e.g., for state Medicaid IDs).",
      "ai_pitfalls": null
    },
    {
      "column_name": "Other Provider Identifier Issuer_1 through _50",
      "type": "varchar(80) [50 columns]",
      "nullable": true,
      "example": "ILLINOIS DEPARTMENT OF HEALTHCARE AND FAMILY SERVICES",
      "slot_range": "Other Provider Identifier Issuer_1 to Other Provider Identifier Issuer_50",
      "description": "Name of the issuing organization for the identifier.",
      "ai_pitfalls": "Issuer names are free text and not normalized across records."
    }
  ]
}
