NPPES NPI Registry Scraper - Healthcare Providers
Pricing
from $6.15 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
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
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
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.
| Capability | This actor | Typical NPI/NPPES actors |
|---|---|---|
| Search by NPI number, name, org, taxonomy, city, state, ZIP | Yes | Yes |
| Filter by provider type (individual / organization) | Yes | Most |
| Exact NUCC taxonomy code filter | Yes | Rare |
Search by authorized official name (namePurpose) | Yes | No |
| First-name aliases / nicknames toggle | Yes | No |
| Non-US / country-code search | Yes | Rare |
Break the ~1200-per-query ceiling (fetchAllResults) | Yes, nationwide state-split + de-dupe | Some |
Full allTaxonomies[] with license number and state | Yes | Some |
| Both practice and mailing address, address type | Yes | Some |
De-duplicated phones[] and faxes[] across all addresses | Yes | No |
| Authorized official (name parts, title, phone, credential) | Yes | Partial |
otherNames[], otherIdentifiers[] (Medicaid), endpoints[], practiceLocations[] | Yes | Rare |
| Deactivation / reactivation / certification dates | Yes | No |
| Fields per record | 68 | 25 to 45 |
| No API key, no proxy required | Yes | Varies |
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxProviders | integer | no | 10 | Maximum provider records to collect across all pages. NPPES returns at most ~1200 per single query; use fetchAllResults or narrow filters for larger pulls. |
fetchAllResults | boolean | no | false | Break 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. |
npiNumbers | string[] | no | (empty) | Look up exact providers by 10-digit NPI, one per line. When filled, the search filters are ignored. |
enumerationType | enum | no | (any) | NPI-1 (individual) or NPI-2 (organization). Empty returns both. |
firstName | string | no | (empty) | Individual first name. Supports a trailing wildcard, for example john*. |
lastName | string | no | (empty) | Individual last name. Supports a trailing wildcard, for example sm*. |
organizationName | string | no | (empty) | Organization (NPI-2) name. Supports a trailing wildcard, for example dental*. |
taxonomyDescription | string | no | Dentist (prefill) | Provider taxonomy / specialty, for example Dentist, Pharmacy, Internal Medicine, Chiropractor. |
taxonomyCode | string | no | (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. |
city | string | no | (empty) | City of the provider address. |
state | enum | no | CA (prefill) | Two-letter US state or territory code, for example CA, NY, TX, PR. |
postalCode | string | no | (empty) | US ZIP code. Supports a trailing wildcard, for example 902*. |
addressPurpose | enum | no | (any) | Which address the city/state/ZIP filters match: LOCATION, MAILING, PRIMARY, SECONDARY. |
namePurpose | enum | no | Provider | For NPI-2 searches, match first/last name against the Provider record or the authorized official (AO). |
countryCode | string | no | US | Two-letter country code for non-US addresses, for example CA, MX, GB. |
useFirstNameAlias | enum | no | True | When 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.
| Field | Type | Description |
|---|---|---|
npi | string | 10-digit National Provider Identifier (unique per provider). |
enumerationType | string | NPI-1 (individual) or NPI-2 (organization). |
providerType | string | Individual or Organization. |
status | string | Provider status, for example Active. |
fullName | string | Provider full name (person or organization). |
organizationName | string | Organization legal business name (NPI-2), or null. |
organizationalSubpart | string | Whether the org is a subpart (YES/NO), or null. |
parentOrganizationName | string | Parent organization name, or null. |
firstName / lastName / middleName | string | Individual provider name parts (NPI-1), or null. |
namePrefix / nameSuffix | string | Individual name prefix/suffix, or null. |
credential | string | Individual credential (for example DDS), or null. |
gender | string | Individual gender code, or null. |
soleProprietor | string | Sole proprietor flag, or null. |
authorizedOfficialName | string | Full name of the organization's authorized official, or null. |
authorizedOfficialFirstName / ...MiddleName / ...LastName | string | Authorized official name parts, or null. |
authorizedOfficialTitle | string | Authorized official title, or null. |
authorizedOfficialPhone | string | Authorized official phone, or null. |
authorizedOfficialCredential | string | Authorized official credential, or null. |
authorizedOfficialNamePrefix / ...NameSuffix | string | Authorized official prefix/suffix, or null. |
primaryTaxonomyCode | string | Primary taxonomy (specialty) code. |
primaryTaxonomyDesc | string | Primary taxonomy description. |
primaryTaxonomyGroup | string | Taxonomy grouping, or null. |
primaryTaxonomyLicense | string | State license number for the primary taxonomy, or null. |
primaryTaxonomyState | string | State that issued the primary taxonomy license, or null. |
practiceAddress / practiceAddressLine2 | string | Practice location street address. |
practiceCity / practiceState / practiceZip | string | Practice location city, state, ZIP. |
practiceCountry / practiceCountryName | string | Practice country code and name. |
practiceAddressType | string | Practice address type (for example DOM). |
practicePhone / practiceFax | string | Practice phone and fax, or null. |
mailingAddress / mailingAddressLine2 | string | Mailing street address. |
mailingCity / mailingState / mailingZip | string | Mailing city, state, ZIP. |
mailingCountry / mailingCountryName | string | Mailing country code and name. |
mailingAddressType | string | Mailing address type. |
mailingPhone / mailingFax | string | Mailing phone and fax, or null. |
enumerationDate | string | Date the NPI was enumerated (YYYY-MM-DD). |
lastUpdated | string | Date the record was last updated (YYYY-MM-DD). |
createdEpoch | number | Record creation timestamp (Unix epoch, milliseconds), or null. |
lastUpdatedEpoch | number | Last-update timestamp (Unix epoch, milliseconds), or null. |
certificationDate | string | Certification date, or null. |
deactivationDate / reactivationDate | string | Deactivation / reactivation dates, or null. |
deactivationReasonCode | string | Reason code if deactivated, or null. |
phones | string[] | De-duplicated list of all phone numbers on file. |
faxes | string[] | De-duplicated list of all fax numbers on file, or null. |
allTaxonomies | array | All taxonomies with code, desc, group, license, state, primary. |
practiceLocations | array | Additional practice locations, or null. |
otherNames | array | Other names / DBA entries, or null. |
otherIdentifiers | array | Other provider identifiers, or null. |
endpoints | array | Health information exchange endpoints, or null. |
npiUrl | string | Public NPPES provider-view page. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null 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:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 (
resultevent). 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
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon 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
fetchAllResultsfor 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.
Related scrapers
- Healthgrades Doctors Scraper: US physician profiles and ratings.
- CMS Hospitals Scraper: Medicare-certified hospitals and quality data.
- CMS Open Payments Scraper: Industry payments to physicians and teaching hospitals.
- HHS OIG Exclusions Scraper: Providers excluded from federal healthcare programs.
- Florida MQA Health Scraper: Florida licensed health professionals.
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.
