NPI Healthcare Provider Scraper (NPPES) avatar

NPI Healthcare Provider Scraper (NPPES)

Pricing

Pay per usage

Go to Apify Store
NPI Healthcare Provider Scraper (NPPES)

NPI Healthcare Provider Scraper (NPPES)

Bulk-query the official CMS NPPES NPI Registry and export structured US healthcare provider leads — doctors, dentists, specialists — to JSON or CSV. Filter by state, city, specialty, and name. 7 M+ providers covered.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share


🎯 What this scrapes

The NPPES NPI Registry is the authoritative federal directory of every healthcare provider in the United States. Every active physician, dentist, chiropractor, nurse practitioner, hospital, and medical group is listed here — complete with verified location address, telephone number, fax, speciality taxonomy, licence number, and enumeration status.

The registry's own API is publicly accessible, but turning it into a reliable bulk export takes real engineering: paginating past NPPES's 200-record-per-request ceiling, normalising the nested taxonomy and address objects, handling partial-result pages near the 1 200-result query cap, and coercing dates and flags into consistent types. We handle all of that and hand you back one richly-typed row per provider.

Feed it a state + specialty combination and you have a targeted lead list in minutes. Pharma field reps, dental-supply sales teams, and healthcare-data vendors have been paying $50 per thousand records from SaaS list brokers for data that the federal government publishes for free. This Actor fetches it directly and undercuts the going rate by roughly 96 %.

🔥 What we handle for you

  • 🔁 Automatic pagination — the NPPES API returns at most 200 records per request. We page through all available results (up to ~1 200 per query combination) and merge them transparently.
  • 🧱 Rate-limit-aware backoff — when the CMS endpoint pushes back we slow down, honour Retry-After headers, and retry up to 5 times with exponential backoff before surfacing an error.
  • 🧊 Pydantic-validated rows — every field is typed at write time. Booleans are booleans. Dates arrive as ISO-8601 strings. Taxonomy codes, licence numbers, and address fields are normalised across individual and organisational providers.
  • 🌐 Proxy-ready — the NPPES API is a public federal endpoint and direct routing works on most infrastructure. The proxy configuration field is there when you need it.
  • 💰 Pay-Per-Event pricing — you pay only for records that land in your dataset. No data, no charge beyond the small run warm-up fee.
  • 📦 Export in any format — Apify Console exports the dataset as JSON, CSV, or Excel with one click. Pull via API for automated pipelines.

💡 Use cases

  • Pharma / medical-device field rep territory lists — pull every GP or specialist in a sales territory by state + taxonomy and load into your CRM.
  • Dental-supply prospecting — filter by dentist taxonomy and state for a fresh dentist contact list at a fraction of the cost of a list broker.
  • Healthcare-data vendor pipelines — bulk-export the registry by specialty and resell structured datasets to compliance, billing, or referral-network products.
  • Credentialing verification — cross-reference provider NPI numbers, licence states, and taxonomy codes for onboarding workflows.
  • Insurance network gap analysis — identify active providers in a region and compare against your network panel.
  • Academic and policy research — map provider density and specialty distribution by state or ZIP.

⚙️ How to use it

  1. Click Try for free — no credit card required.
  2. Set at least one search filter: state, specialty, city, or provider name.
  3. Optionally set enumerationType to restrict to individuals (NPI-1) or organisations (NPI-2).
  4. Set maxItems — 200 is the default; the NPPES query cap is ~1 200 per combination.
  5. Click Start. Results stream into the dataset in real time.
  6. Export from Storage → Dataset as JSON, CSV, or Excel.

📥 Input

FieldTypeRequiredDefaultNotes
statestringone of2-letter state code (CA, NY, TX …). Filters by address state.
citystringone ofCity name within the chosen state.
postalCodestringone of5-digit ZIP code.
taxonomyDescriptionstringone ofSpecialty keyword: dentist, chiropractor, internal medicine, etc.
enumerationTypestringnobothNPI-1 (individual), NPI-2 (organisation), or both.
firstNamestringone ofFilter by provider first name (individuals).
lastNamestringone ofFilter by provider last name (individuals).
organizationNamestringone ofFilter by practice or organisation name.
maxItemsintegerno200Max records to return (1–1200). NPPES hard-caps a single query at ~1 200.
proxyConfigurationobjectno{"useApifyProxy": false}Apify Proxy settings. Direct routing works for NPPES on most infrastructure.

At least one "one of" field is required to avoid returning the entire registry.

Example input

{
"state": "CA",
"taxonomyDescription": "dentist",
"enumerationType": "NPI-1",
"maxItems": 200,
"proxyConfiguration": {
"useApifyProxy": false
}
}

📤 Output

Every row is one NPI registry provider record.

FieldTypeNotes
npistring10-digit National Provider Identifier.
enumeration_typestringNPI-1 (individual) or NPI-2 (organisation).
namestringProvider display name — org name or "First Last" for individuals.
credentialstring | nullCredential suffix (MD, DDS, DO, RN …).
statusstring | nullActive or Inactive.
primary_taxonomystring | nullNUCC taxonomy code for the primary speciality.
specialtystring | nullHuman-readable taxonomy description.
licensestring | nullState licence number for the primary taxonomy.
license_statestring | nullState that issued the licence.
address_line1string | nullStreet address (LOCATION purpose).
citystring | nullCity.
statestring | null2-letter state code.
postal_codestring | nullZIP code.
countrystring | nullCountry code (usually US).
phonestring | nullOffice phone number.
faxstring | nullOffice fax number.
sole_proprietorboolean | nullTrue if enumerated as a sole proprietor.
genderstring | nullProvider gender (individual providers only).
enumeration_datestring | nullDate the NPI was first assigned (ISO-8601).
last_updatedstring | nullDate the record was last updated in NPPES (ISO-8601).
scraped_atstring | nullWhen this row was recorded (ISO-8601 UTC).

Example output

{
"npi": "1234567890",
"enumeration_type": "NPI-1",
"name": "Jane Smith",
"credential": "DDS",
"status": "Active",
"primary_taxonomy": "122300000X",
"specialty": "Dentist",
"license": "CA12345",
"license_state": "CA",
"address_line1": "123 Main St",
"city": "Los Angeles",
"state": "CA",
"postal_code": "90001",
"country": "US",
"phone": "310-555-0100",
"fax": "310-555-0101",
"sole_proprietor": true,
"gender": "F",
"enumeration_date": "2010-03-15",
"last_updated": "2024-11-01",
"scraped_at": "2026-06-07T10:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you only pay when these events fire:

EventUSDWhat triggers it
actor-start$0.005One-off warm-up charge per run
result$0.002Per provider record written to the dataset

Example: 1 000 provider records at the rates above = $2.00. No subscription, no minimum, no card required to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • NPPES query cap — the registry limits skip to 1 000, so any single state + specialty combination returns at most ~1 200 records. For large specialties (e.g. all physicians in California) you will need to paginate by city or ZIP code range across multiple runs.
  • No email addresses — NPPES does not publish provider email addresses. Phone and fax are included; email is not part of the public registry.
  • US providers only — the NPPES registry covers US-based or US-licensed providers. International providers are out of scope.
  • Data freshness — NPPES records reflect CMS update cycles. Providers who recently enrolled or updated their information may appear with a short delay. The last_updated field indicates the record's freshness.
  • Deactivated NPIs — by default the API returns both active and inactive providers. Filter by status == "Active" post-export if you only want active practitioners.

❓ FAQ

Is this data public and legal to use?

Yes. The NPPES NPI Registry is a public federal dataset maintained by CMS (Centers for Medicare & Medicaid Services). It is published under a public domain licence with no restrictions on use. This Actor queries the public API endpoint documented at npiregistry.cms.hhs.gov.

Why can't I get all dentists in California in one run?

NPPES limits individual API queries to 200 records per page and caps the skip offset at 1 000, which means any single query combination is bounded at approximately 1 200 results. California alone has tens of thousands of active dentists. To get them all, segment by city or ZIP code range and run multiple Actor jobs, then merge the datasets.

What is the difference between NPI-1 and NPI-2?

NPI-1 (Individual) is assigned to licensed healthcare practitioners — physicians, dentists, nurses, physical therapists, and so on. NPI-2 (Organisational) is assigned to provider organisations — hospitals, group practices, dental chains, and labs. Set enumerationType to target one type or leave it as both to return all.

How current is the data?

The NPPES registry is updated continuously as providers enrol, update, or deactivate. The last_updated field on each row tells you when CMS last touched that record. For most use cases the data is current within days.

Can I get email addresses?

NPPES does not publish email addresses. If you need emails you will need to enrich the NPI data with a separate email-finder tool after export.

What is the NPI taxonomy code?

The NUCC Health Care Provider Taxonomy code identifies a provider's speciality (e.g. 122300000X = Dentist). Each NPI record may have multiple taxonomy codes; this Actor surfaces the one marked primary. Full NUCC taxonomy reference: nucc.org.

💬 Your feedback

Spotted a bug, need a new filter, or want ZIP-code-range pagination built in? Open an issue on the Issues tab in Apify Console — we read every report and ship fixes weekly.