# NPPES US Provider Directory (`dromb/nppes-us`) Actor

Search and lookup providers in the official CMS NPPES NPI Registry.

- **URL**: https://apify.com/dromb/nppes-us.md
- **Developed by:** [Dmitriy Gyrbu](https://apify.com/dromb) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 results

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## NPPES US Provider Directory Scraper

Extract public US healthcare provider records from the official CMS NPI Registry API. Search doctors, organizations, NPIs, locations, credentials, and registry details for lead generation, compliance checks, enrichment, healthcare analytics, and provider directory workflows.

### 🚀 Use Cases
- **Healthcare Provider Directory Enrichment**: Update your database with official NPI data.
- **NPI Lookup & Validation**: Instantly verify National Provider Identifiers.
- **Provider Lead Generation**: Identify healthcare providers by specialty or location.
- **Credential & Location Research**: Research provider credentials and practice addresses.
- **Healthcare Market Research**: Analyze provider distribution across regions.
- **CRM Enrichment**: Automate the addition of professional details to your CRM.
- **Compliance & Data QA**: Ensure provider data matches the official registry.

### 🛠 What it Does
This actor provides a streamlined interface to the CMS NPI Registry API, handling the technical complexities of request formatting, pagination, and data normalization.

- **Search Providers**: Filter by name, organization, city, state, ZIP, taxonomy, or entity type.
- **Lookup by NPI**: Retrieve the full record for a specific National Provider Identifier.
- **Probe API**: Quickly verify the connectivity and status of the official registry.
- **Normalized Output**: Receive clean, structured data ready for export or integration.
- **Run Summary**: Get a concise summary of processed records and status in the Key-Value Store.

### 📥 Inputs

| Field | Type | Description |
|-------|------|-------------|
| `operation` | string | **Required**. Operation to perform: `probe`, `search`, or `item`. |
| `npi` | string | Exact 10-digit NPI (for `item` operation). |
| `first_name` | string | Exact first name (for `search` operation). |
| `last_name` | string | Exact last name (for `search` operation). |
| `organization_name` | string | Exact organization name (for `search` operation). |
| `city` | string | Exact city (for `search` operation). |
| `state` | string | Exact 2-letter state code (for `search` operation). |
| `zip_code` | string | Exact 5-digit ZIP code (for `search` operation). |
| `entity_type` | string | Entity type: `I` (Individual) or `O` (Organization). |
| `taxonomy_code` | string | Exact taxonomy code (for `search` operation). |
| `page` | integer | Page number (default: 1, minimum: 1). |
| `limit` | integer | Results per page (default: 10, minimum: 1, maximum: 200). |

### 📤 Outputs

#### Dataset (Provider Records)
Each item in the dataset represents a normalized provider record:

- `npi`: National Provider Identifier
- `first_name`, `last_name`, `middle_name`: Provider's full name
- `organization_name`: Name of the organization
- `credential`: Professional credential (e.g., MD, DO, NP)
- `provider_gender`: Provider gender (M/F)
- `address_1`, `city`, `state`, `postal_code`: Primary practice location
- `enumeration_type`: Registry enumeration type
- `last_update_date`: Last record update date
- `is_sole_proprietor`: Sole proprietor indicator
- `taxonomy_primary_code`: Primary specialty code
- `taxonomies`: Full list of specialties and licenses
- `other_names`: Alternative names
- `practice_locations`: All registered addresses
- `endpoints`: EHR endpoints
- `raw_record`: The complete original response from CMS API

#### Key-Value Store (Run Summary)
The `OUTPUT` key contains a summary of the run:
- `status`: Run status (e.g., `success`, `not_found`, `error`)
- `total`: Total matching records in registry (search)
- `processed`: Records exported to dataset (search)
- `npi`: The specific NPI looked up (item)
- `api_available`: Boolean indicating API connectivity (probe)

### 💡 Examples

**Exact NPI Lookup**
```json
{
  "operation": "item",
  "npi": "1003979261"
}
````

**Search Providers in New York**

```json
{
  "operation": "search",
  "first_name": "Michael",
  "city": "NEW YORK",
  "limit": 5
}
```

**Check API Status**

```json
{
  "operation": "probe"
}
```

### 📉 Limits & Performance

- **Maximum Results**: 200 records per page.
- **Pagination**: Use the `page` parameter to retrieve subsequent results.
- **Rate Limiting**: The actor adheres to public API guidelines to ensure reliability.
- **No Proxy Required**: Works directly with the official public API.

### ⚖️ Data Source & Disclaimers

**Data Source**: This actor extracts data from the official [CMS NPI Registry API](https://npiregistry.cms.hhs.gov/api/).

- **Public Data**: All information is public registry data.
- **No Affiliation**: This actor is not affiliated with, endorsed by, or connected to CMS, HHS, or NPPES.
- **No Medical Advice**: This tool provides directory information and does not constitute medical advice or recommendations.
- **Lawful Use**: Users are responsible for the lawful use of the extracted data.
- **Freshness**: Data freshness depends entirely on the official CMS registry updates.

### 💰 Value Proposition

Built for reliable, repeatable provider data extraction without the need to maintain your own NPI API wrapper or handle raw JSON parsing.

# Actor input Schema

## `operation` (type: `string`):

Operation to perform: 'probe' to check API status, 'search' to find providers, or 'item' to get a specific provider by NPI.

## `npi` (type: `string`):

Exact 10-digit NPI (required for 'item' operation).

## `first_name` (type: `string`):

Exact first name (for 'search' operation).

## `last_name` (type: `string`):

Exact last name (for 'search' operation).

## `organization_name` (type: `string`):

Exact organization name (for 'search' operation).

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

Exact city (for 'search' operation).

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

Exact 2-letter state code (for 'search' operation).

## `zip_code` (type: `string`):

Exact 5-digit ZIP code (for 'search' operation).

## `entity_type` (type: `string`):

Entity type: 'I' (Individual) or 'O' (Organization).

## `taxonomy_code` (type: `string`):

Exact taxonomy code (for 'search' operation).

## `page` (type: `integer`):

Page number for pagination.

## `limit` (type: `integer`):

Results per page.

## Actor input object example

```json
{
  "operation": "search",
  "first_name": "Michael",
  "page": 1,
  "limit": 2
}
```

# 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("dromb/nppes-us").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("dromb/nppes-us").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 dromb/nppes-us --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dromb/nppes-us",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "NPPES US Provider Directory",
        "description": "Search and lookup providers in the official CMS NPPES NPI Registry.",
        "version": "0.0",
        "x-build-id": "OKnjL7h9KGHYdz4SE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dromb~nppes-us/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dromb-nppes-us",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/dromb~nppes-us/runs": {
            "post": {
                "operationId": "runs-sync-dromb-nppes-us",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/dromb~nppes-us/run-sync": {
            "post": {
                "operationId": "run-sync-dromb-nppes-us",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "operation"
                ],
                "properties": {
                    "operation": {
                        "title": "Operation",
                        "enum": [
                            "probe",
                            "search",
                            "item"
                        ],
                        "type": "string",
                        "description": "Operation to perform: 'probe' to check API status, 'search' to find providers, or 'item' to get a specific provider by NPI.",
                        "default": "search"
                    },
                    "npi": {
                        "title": "Npi",
                        "type": "string",
                        "description": "Exact 10-digit NPI (required for 'item' operation)."
                    },
                    "first_name": {
                        "title": "First_name",
                        "type": "string",
                        "description": "Exact first name (for 'search' operation).",
                        "default": "Michael"
                    },
                    "last_name": {
                        "title": "Last_name",
                        "type": "string",
                        "description": "Exact last name (for 'search' operation)."
                    },
                    "organization_name": {
                        "title": "Organization_name",
                        "type": "string",
                        "description": "Exact organization name (for 'search' operation)."
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "Exact city (for 'search' operation)."
                    },
                    "state": {
                        "title": "State",
                        "type": "string",
                        "description": "Exact 2-letter state code (for 'search' operation)."
                    },
                    "zip_code": {
                        "title": "Zip_code",
                        "type": "string",
                        "description": "Exact 5-digit ZIP code (for 'search' operation)."
                    },
                    "entity_type": {
                        "title": "Entity_type",
                        "enum": [
                            "I",
                            "O"
                        ],
                        "type": "string",
                        "description": "Entity type: 'I' (Individual) or 'O' (Organization)."
                    },
                    "taxonomy_code": {
                        "title": "Taxonomy_code",
                        "type": "string",
                        "description": "Exact taxonomy code (for 'search' operation)."
                    },
                    "page": {
                        "title": "Page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Page number for pagination.",
                        "default": 1
                    },
                    "limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Results per page.",
                        "default": 2
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
