NPPES NPI Registry Scraper - Healthcare Providers avatar

NPPES NPI Registry Scraper - Healthcare Providers

Pricing

from $6.15 / 1,000 results

Go to Apify Store
NPPES NPI Registry Scraper - Healthcare Providers

NPPES NPI Registry Scraper - Healthcare Providers

Search the official NPPES NPI Registry for US healthcare provider data, no API key. Look up doctors, physicians and organizations by NPI number, name, taxonomy/specialty, city, state or ZIP. Export NPI, credentials, license, taxonomy, addresses, phone and fax to JSON, CSV or Excel.

Pricing

from $6.15 / 1,000 results

Rating

5.0

(2)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

1

Monthly active users

12 days ago

Last modified

Share

NPPES NPI Healthcare Provider Data Scraper

NPPES NPI Registry Scraper - Healthcare Provider Data (No API Key)

Scrape the official NPPES NPI Registry for US healthcare provider data with no API key. Search 8M+ doctors, physicians, dentists, nurses, pharmacies and healthcare organizations by NPI number, name, taxonomy / specialty, city, state or ZIP, and export clean medical provider leads to JSON, CSV or Excel. Every field the CMS registry exposes, mapped to a flat record with de-duplicated phone and fax contacts.

Here is one real result, with every field the actor returns:

{
"npi": "1649406133",
"enumerationType": "NPI-2",
"providerType": "Organization",
"status": "Active",
"fullName": "1692 TULLY DENTISTRY",
"organizationName": "1692 TULLY DENTISTRY",
"organizationalSubpart": "NO",
"parentOrganizationName": null,
"firstName": null,
"lastName": null,
"middleName": null,
"namePrefix": null,
"nameSuffix": null,
"credential": null,
"gender": null,
"soleProprietor": null,
"authorizedOfficialName": "PHUNG NGUYEN",
"authorizedOfficialFirstName": "PHUNG",
"authorizedOfficialMiddleName": "KIM",
"authorizedOfficialLastName": "NGUYEN",
"authorizedOfficialTitle": "Dentist",
"authorizedOfficialPhone": "4082792114",
"authorizedOfficialCredential": null,
"authorizedOfficialNamePrefix": "Mrs.",
"authorizedOfficialNameSuffix": null,
"primaryTaxonomyCode": "122300000X",
"primaryTaxonomyDesc": "Dentist",
"primaryTaxonomyGroup": "193400000X - Multiple Single Specialty Group",
"primaryTaxonomyLicense": "44749",
"primaryTaxonomyState": "CA",
"practiceAddress": "2114 SENIOR ROAD, SUITE 25",
"practiceAddressLine2": "SUITE 25",
"practiceCity": "SAN JOSE",
"practiceState": "CA",
"practiceZip": "95112",
"practiceCountry": "US",
"practiceCountryName": "United States",
"practiceAddressType": "DOM",
"practicePhone": "408-279-2114",
"practiceFax": "408-279-1828",
"mailingAddress": "1692 TULLY ROAD, #4",
"mailingAddressLine2": "#4",
"mailingCity": "SAN JOSE",
"mailingState": "CA",
"mailingZip": "95122",
"mailingCountry": "US",
"mailingCountryName": "United States",
"mailingAddressType": "DOM",
"mailingPhone": "408-223-6953",
"mailingFax": "408-223-0749",
"enumerationDate": "2009-06-10",
"lastUpdated": "2009-06-10",
"certificationDate": null,
"deactivationDate": null,
"reactivationDate": null,
"deactivationReasonCode": null,
"phones": ["408-223-6953", "408-279-2114", "4082792114"],
"faxes": ["408-223-0749", "408-279-1828"],
"allTaxonomies": [
{
"code": "122300000X",
"desc": "Dentist",
"group": "193400000X - Multiple Single Specialty Group",
"license": "44749",
"state": "CA",
"primary": true
}
],
"practiceLocations": null,
"otherNames": null,
"otherIdentifiers": null,
"endpoints": null,
"npiUrl": "https://npiregistry.cms.hhs.gov/provider-view/1649406133",
"observedAt": "2026-08-10T14:06:13.031Z",
"error": null
}

The most complete NPPES NPI scraper available. It returns every field the CMS NPPES registry exposes for each provider, including the authorized official, all taxonomies, both practice and mailing addresses, and every phone and fax number, and gives you a full set of filters plus direct NPI lookup to target exactly the providers you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor queries the CMS NPPES registry (the national directory of US healthcare providers with an NPI number), applies the filters you pass as input, paginates through the matching providers, and writes one normalized record per provider to the run's dataset. You can look up exact providers by NPI number, or search by name, organization, specialty (taxonomy), city, state, ZIP code and more.

Each record is flattened for analysis: the provider identity, the authorized official for organizations, the primary taxonomy plus the full allTaxonomies list, both the practice and mailing addresses, and de-duplicated phones and faxes arrays. Missing source values are returned as null, never invented.

Why this scraper

It is a strict superset of the other NPPES / NPI actors on the market: it accepts every filter they do, returns every field they do, and adds more.

CapabilityThis actorTypical NPI/NPPES actors
Search by NPI number, name, org, taxonomy, city, state, ZIPYesYes
Filter by provider type (individual / organization)YesMost
Exact NUCC taxonomy code filterYesRare
Search by authorized official name (namePurpose)YesNo
First-name aliases / nicknames toggleYesNo
Non-US / country-code searchYesRare
Break the ~1200-per-query ceiling (fetchAllResults)Yes, nationwide state-split + de-dupeSome
Full allTaxonomies[] with license number and stateYesSome
Both practice and mailing address, address typeYesSome
De-duplicated phones[] and faxes[] across all addressesYesNo
Authorized official (name parts, title, phone, credential)YesPartial
otherNames[], otherIdentifiers[] (Medicaid), endpoints[], practiceLocations[]YesRare
Deactivation / reactivation / certification datesYesNo
Fields per record6825 to 45
No API key, no proxy requiredYesVaries

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 dentists in California.

{
"taxonomyDescription": "Dentist",
"state": "CA",
"maxProviders": 10
}

To look up exact providers, fill npiNumbers (one 10-digit NPI per line); the search filters are then ignored. The NPPES API requires at least one substantive search criterion (state, last name, organization name, or postal code) when not using NPI lookup.

Input reference

FieldTypeRequiredDefaultDescription
maxProvidersintegerno10Maximum provider records to collect across all pages. NPPES returns at most ~1200 per single query; use fetchAllResults or narrow filters for larger pulls.
fetchAllResultsbooleannofalseBreak the ~1200-per-query ceiling. When on, the actor runs a nationwide pull by splitting the search into one query per US state/territory and de-duplicating by NPI. Leave state empty when using this. Respects maxProviders and your spend limit.
npiNumbersstring[]no(empty)Look up exact providers by 10-digit NPI, one per line. When filled, the search filters are ignored.
enumerationTypeenumno(any)NPI-1 (individual) or NPI-2 (organization). Empty returns both.
firstNamestringno(empty)Individual first name. Supports a trailing wildcard, for example john*.
lastNamestringno(empty)Individual last name. Supports a trailing wildcard, for example sm*.
organizationNamestringno(empty)Organization (NPI-2) name. Supports a trailing wildcard, for example dental*.
taxonomyDescriptionstringnoDentist (prefill)Provider taxonomy / specialty, for example Dentist, Pharmacy, Internal Medicine, Chiropractor.
taxonomyCodestringno(empty)Exact NUCC taxonomy code to keep only providers who carry it, for example 122300000X (Dentist) or 207R00000X (Internal Medicine). Applied on top of the other filters.
citystringno(empty)City of the provider address.
stateenumnoCA (prefill)Two-letter US state or territory code, for example CA, NY, TX, PR.
postalCodestringno(empty)US ZIP code. Supports a trailing wildcard, for example 902*.
addressPurposeenumno(any)Which address the city/state/ZIP filters match: LOCATION, MAILING, PRIMARY, SECONDARY.
namePurposeenumnoProviderFor NPI-2 searches, match first/last name against the Provider record or the authorized official (AO).
countryCodestringnoUSTwo-letter country code for non-US addresses, for example CA, MX, GB.
useFirstNameAliasenumnoTrueWhen searching by first name, also match common nicknames/aliases (True), or exact match only (False).

Filters combine with logical AND. When npiNumbers is filled, all other filters are ignored.

Output reference

One dataset item per provider. Types: string, array, object, or null when the source value is absent.

FieldTypeDescription
npistring10-digit National Provider Identifier (unique per provider).
enumerationTypestringNPI-1 (individual) or NPI-2 (organization).
providerTypestringIndividual or Organization.
statusstringProvider status, for example Active.
fullNamestringProvider full name (person or organization).
organizationNamestringOrganization legal business name (NPI-2), or null.
organizationalSubpartstringWhether the org is a subpart (YES/NO), or null.
parentOrganizationNamestringParent organization name, or null.
firstName / lastName / middleNamestringIndividual provider name parts (NPI-1), or null.
namePrefix / nameSuffixstringIndividual name prefix/suffix, or null.
credentialstringIndividual credential (for example DDS), or null.
genderstringIndividual gender code, or null.
soleProprietorstringSole proprietor flag, or null.
authorizedOfficialNamestringFull name of the organization's authorized official, or null.
authorizedOfficialFirstName / ...MiddleName / ...LastNamestringAuthorized official name parts, or null.
authorizedOfficialTitlestringAuthorized official title, or null.
authorizedOfficialPhonestringAuthorized official phone, or null.
authorizedOfficialCredentialstringAuthorized official credential, or null.
authorizedOfficialNamePrefix / ...NameSuffixstringAuthorized official prefix/suffix, or null.
primaryTaxonomyCodestringPrimary taxonomy (specialty) code.
primaryTaxonomyDescstringPrimary taxonomy description.
primaryTaxonomyGroupstringTaxonomy grouping, or null.
primaryTaxonomyLicensestringState license number for the primary taxonomy, or null.
primaryTaxonomyStatestringState that issued the primary taxonomy license, or null.
practiceAddress / practiceAddressLine2stringPractice location street address.
practiceCity / practiceState / practiceZipstringPractice location city, state, ZIP.
practiceCountry / practiceCountryNamestringPractice country code and name.
practiceAddressTypestringPractice address type (for example DOM).
practicePhone / practiceFaxstringPractice phone and fax, or null.
mailingAddress / mailingAddressLine2stringMailing street address.
mailingCity / mailingState / mailingZipstringMailing city, state, ZIP.
mailingCountry / mailingCountryNamestringMailing country code and name.
mailingAddressTypestringMailing address type.
mailingPhone / mailingFaxstringMailing phone and fax, or null.
enumerationDatestringDate the NPI was enumerated (YYYY-MM-DD).
lastUpdatedstringDate the record was last updated (YYYY-MM-DD).
createdEpochnumberRecord creation timestamp (Unix epoch, milliseconds), or null.
lastUpdatedEpochnumberLast-update timestamp (Unix epoch, milliseconds), or null.
certificationDatestringCertification date, or null.
deactivationDate / reactivationDatestringDeactivation / reactivation dates, or null.
deactivationReasonCodestringReason code if deactivated, or null.
phonesstring[]De-duplicated list of all phone numbers on file.
faxesstring[]De-duplicated list of all fax numbers on file, or null.
allTaxonomiesarrayAll taxonomies with code, desc, group, license, state, primary.
practiceLocationsarrayAdditional practice locations, or null.
otherNamesarrayOther names / DBA entries, or null.
otherIdentifiersarrayOther provider identifiers, or null.
endpointsarrayHealth information exchange endpoints, or null.
npiUrlstringPublic NPPES provider-view page.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"taxonomyDescription": "Dentist", "state": "CA", "maxProviders": 10}). This organization has a DBA name and multiple taxonomies:

{
"npi": "1013799931",
"enumerationType": "NPI-2",
"providerType": "Organization",
"status": "Active",
"fullName": "1706 SAPANA KOTHARY DDS INC",
"organizationName": "1706 SAPANA KOTHARY DDS INC",
"authorizedOfficialName": "SOFIA ZAMORANO",
"authorizedOfficialTitle": "office manager",
"authorizedOfficialPhone": "4085044935",
"primaryTaxonomyCode": "261QM1300X",
"primaryTaxonomyDesc": "Clinic/Center, Multi-Specialty",
"practiceAddress": "1706 WILLOW ST STE A",
"practiceCity": "SAN JOSE",
"practiceState": "CA",
"practiceZip": "95125-5216",
"practiceCountry": "US",
"practicePhone": "408-478-9081",
"enumerationDate": "2023-10-16",
"lastUpdated": "2023-10-16",
"certificationDate": "2023-10-16",
"phones": ["408-478-9081", "4085044935"],
"faxes": null,
"allTaxonomies": [
{ "code": "1223P0106X", "desc": "Dentist, Oral and Maxillofacial Pathology", "group": "193200000X - Multi-Specialty Group", "license": null, "state": null, "primary": false },
{ "code": "261QM1300X", "desc": "Clinic/Center, Multi-Specialty", "group": null, "license": null, "state": null, "primary": true }
],
"otherNames": [
{ "name": "WILLOW GLEN DENTAL SPECIALISTS", "type": "Doing Business As", "firstName": null, "middleName": null, "lastName": null, "prefix": null, "suffix": null, "credential": null }
],
"npiUrl": "https://npiregistry.cms.hhs.gov/provider-view/1013799931",
"observedAt": "2026-08-10T14:06:13.032Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~nppes-npi-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"taxonomyDescription":"Dentist","state":"CA","maxProviders":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~nppes-npi-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"lastName":"smith*","state":"NY","enumerationType":"NPI-1","maxProviders":100}'

Apify CLI:

apify call scrapers_lat/nppes-npi-scraper \
--input '{"npiNumbers":["1649406133"]}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per provider record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxProviders.
  • Source pagination ceiling. NPPES returns at most about 1200 records per single search query. Turn on fetchAllResults for a nationwide pull (the actor splits by state and de-duplicates), or split the work with narrower filters (add a city, ZIP, or taxonomy).

FAQ and troubleshooting

A run returned 0 records. Why? The filter combination matched nothing, or no substantive criterion was provided. NPPES requires at least one of state, last name, organization name, or postal code. Zero-result runs are not charged.

How do I fetch exact providers I already know? Fill npiNumbers with one 10-digit NPI per line. The search filters are then ignored and each NPI is fetched directly.

How do I find only individuals or only organizations? Set enumerationType to NPI-1 (individuals) or NPI-2 (organizations). Leave it empty to return both.

Can I search by specialty? Yes. Set taxonomyDescription to a specialty such as Dentist, Pharmacy or Internal Medicine. Combine with state and city to narrow results. For exact matching, set taxonomyCode to a NUCC code such as 122300000X (Dentist) or 207R00000X (Internal Medicine).

Do I need an API key or proxy? No. The actor reads the public CMS NPPES NPI Registry directly, so there is no API key, login, or proxy to configure. Just set your filters and run.

How do I collect more than 1200 providers? The NPPES API caps a single query at about 1200 records. Turn on fetchAllResults to run a nationwide pull: the actor queries each US state and territory separately and de-duplicates by NPI, so you can build a full specialty list well beyond 1200. Leave the state filter empty and set maxProviders to the total you want.

Can I use this for physician or medical provider lead lists? Yes. Filter by taxonomy/specialty plus state or city, then export the phones, faxes, practice and mailing addresses, credentials and taxonomy to CSV or Excel for your CRM. Note the registry does not contain email addresses or LinkedIn profiles, so those fields are not returned.

Why are some name fields null? Individual name fields are null for organizations, and organization fields are null for individuals. Missing source values are returned as null, never invented.

Is this an official CMS tool? No. This actor is independent and has no affiliation with CMS or NPPES. It reads only data that is publicly available through the NPPES NPI registry.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with CMS or NPPES. Accesses only publicly available data from the NPPES NPI registry.