# NPPES NPI Registry Scraper - US Healthcare Provider Lookup (`recordsdata/nppes-npi-registry-scraper`) Actor

Search the official CMS NPPES NPI Registry for US healthcare providers and organizations: name, credentials, addresses, phone numbers, specialty taxonomies with license numbers, and enumeration status.

- **URL**: https://apify.com/recordsdata/nppes-npi-registry-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.47 / 1,000 provider records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3" alt="RecordsData" width="100%" />
</p>

## NPPES NPI Registry Scraper - US Healthcare Provider Lookup

### What does NPPES NPI Registry Scraper do?

**NPPES NPI Registry Scraper** searches the [official CMS NPPES NPI Registry](https://npiregistry.cms.hhs.gov/search), the US government's authoritative database of every National Provider Identifier (NPI) issued to healthcare providers and organizations. Look up an individual provider or a healthcare organization by name, NPI number, specialty, or location, and get their credentials, addresses, phone/fax numbers, and every specialty taxonomy with its associated license number and state.

No login, no anti-bot workarounds - this is a fully open US federal government API. Runs on the Apify platform with API access, scheduling, monitoring and CSV/Excel/JSON export.

### Why use NPPES NPI Registry Scraper?

- **Provider credentialing & compliance** - verify a healthcare provider's NPI, license, and specialty before onboarding them.
- **Medical billing & claims** - confirm NPI and taxonomy details required for insurance claims processing.
- **Healthcare lead generation** - build lists of providers or organizations by specialty and location.
- **Directory & network building** - populate an insurance network or referral directory with verified provider data.

### How NPPES NPI Registry Scraper compares to alternatives

| | This actor | Manual NPPES lookup | Generic NPI actors |
|---|---|---|---|
| Source | Official CMS NPPES API | Official site, one by one | Official or mirrored |
| Bulk search by name, state, specialty, org | Yes, in one run | One provider at a time | Varies |
| Taxonomies with state license numbers | Yes, per provider | Yes, manual copy | Varies |
| Export CSV, Excel, JSON, XML | One click | Copy-paste | Varies |
| Free preview | 10 providers on the free plan | n/a | Varies |

### How to use NPPES NPI Registry Scraper

1. Go to the **Input tab** and search by **last name** (individuals), **organization name**, exact **NPI numbers**, **specialty**, **state**, **city**, or **postal code** - combine filters for precision.
2. Set **max results** to control how many matching providers to return.
3. Click **Run**. Download results as JSON, CSV, or Excel from the dataset viewer.

### Input

- **Exact NPI numbers** *(optional)* - 10-digit NPIs to look up directly.
- **Last name contains** *(optional)* - search individual providers (NPI-1).
- **Organization name contains** *(optional)* - search organizations (NPI-2), e.g. hospitals, clinics.
- **Specialty / taxonomy contains**, **State**, **City**, **Postal code** *(all optional)* - narrow the search further.
- **Max results** - cap on how many records to return (10 on free plan).

Example input:

```json
{
    "organizationName": "hospital",
    "state": "TX",
    "maxItems": 200
}
```

### Output

```json
{
    "recordType": "provider-record",
    "npi": "1821205840",
    "enumerationType": "NPI-2",
    "name": "HOSPITAL",
    "status": "A",
    "phone": "972-230-0854",
    "addressLine1": "605 AUSTIN DR",
    "city": "DESOTO",
    "state": "TX",
    "postalCode": "751156605",
    "primaryTaxonomy": "General Acute Care Hospital",
    "primaryLicense": "581741",
    "primaryLicenseState": "TX"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field | Description |
| --- | --- |
| `npi` | 10-digit National Provider Identifier |
| `enumerationType` | `NPI-1` (individual) or `NPI-2` (organization) |
| `name` | Full provider name or organization name |
| `credential` | Professional credentials (e.g. MD, RN, DDS) |
| `status` | `A` (active) or `I` (inactive/deactivated) |
| `phone` / `fax` | Contact numbers at the primary address |
| `addressLine1` / `city` / `state` / `postalCode` | Primary address on file |
| `taxonomies` / `primaryTaxonomy` | Specialty classification(s) |
| `primaryLicense` / `primaryLicenseState` | License number and issuing state for the primary specialty |

### Pricing / Cost estimation

This actor uses **Pay Per Event** pricing - you only pay per **provider record** actually delivered, straight from a single API call with no extra fetch.

### Tips or Advanced options

- **Substring search is automatic** - name searches match anywhere in the name (an implicit wildcard is applied), so "hospital" also matches "Baptist Hospital" and similar.
- **Combine specialty + state** for targeted network-building (e.g. all Nurse Practitioners in California).
- **Use exact NPI numbers** for the fastest, most precise lookups when verifying known providers.

### FAQ, disclaimers, and support

**Is this legal?** NPPES is a fully public CMS (Centers for Medicare & Medicaid Services) registry - every NPI record is public information by federal design, with no login or paywall.

**Why do some providers have multiple taxonomies?** Providers can hold licenses in multiple specialties or states - the actor returns every taxonomy on file, with the primary one flagged separately.

Found a bug or need bulk NPI lookups at scale? Open an issue in the Issues tab or contact us for a **custom scraper** tailored to your credentialing or billing pipeline.

# Actor input Schema

## `npiNumbers` (type: `array`):

10-digit NPI numbers to look up exactly.

## `lastName` (type: `string`):

Search individual providers (NPI-1) by last name.

## `organizationName` (type: `string`):

Search organizations (NPI-2) by name.

## `taxonomyDescription` (type: `string`):

Filter by specialty description, e.g. "Nurse Practitioner" or "Family Medicine".

## `state` (type: `string`):

2-letter US state code, e.g. CA.

## `city` (type: `string`):

Filter by city name.

## `postalCode` (type: `string`):

Filter by ZIP/postal code.

## `maxItems` (type: `integer`):

Maximum number of matching providers/organizations to return.

## Actor input object example

```json
{
  "maxItems": 200
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/nppes-npi-registry-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/nppes-npi-registry-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call recordsdata/nppes-npi-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/nppes-npi-registry-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jJtYE7guYZPhzzJJ2/builds/ddB9XvGF1LItTTZ5c/openapi.json
