# NPI Registry Scraper — US Healthcare Providers Directory (`hipersoft/npi-registry-scraper`) Actor

Directory of US doctors, dentists, hospitals & clinics: NPI, name, specialty, license, address, phone & fax. Search by name, specialty, city, state or ZIP, or look up NPIs. Export JSON, CSV or Excel.

- **URL**: https://apify.com/hipersoft/npi-registry-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.001 / provider scraped

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

## NPI Registry Scraper — US Healthcare Providers Directory

Build a clean, structured directory of **US healthcare providers** — doctors, dentists, nurses, therapists, pharmacies, hospitals, clinics and medical groups — with the **NPI Registry Scraper**. Search by name, specialty, organization, city, state or ZIP code and export one flat row per provider as **JSON, CSV or Excel**.

Every provider in the United States has a unique **National Provider Identifier (NPI)**. This scraper turns that public directory into ready-to-use data for **lead generation, market research, credentialing, provider outreach, referral networks, healthcare recruiting and data enrichment**.

### What it does

- 🔎 **Search by many filters** — provider first/last name, organization name, medical specialty (taxonomy), city, state, ZIP code and country.
- 🏥 **Individuals *and* organizations** — restrict to individual practitioners (doctors, dentists, nurses) or organizations (hospitals, clinics, groups), or pull both.
- 🔢 **Direct NPI lookup** — paste a list of 10-digit NPI numbers to fetch those exact records.
- 📇 **Rich contact detail** — practice address, city, state, ZIP, phone and fax for each provider.
- 🧾 **Credential + license** — specialty description, taxonomy code, credential (MD, DDS, RN…), license number and license state.
- 📤 **Export anywhere** — download as JSON, CSV or Excel, or pull straight into Google Sheets, a CRM or your database.

### Example output

```json
{
  "npi": "1760813802",
  "entityType": "Organization",
  "name": "101 DENTAL GROUP",
  "organizationName": "101 DENTAL GROUP",
  "credential": null,
  "status": "A",
  "primaryTaxonomy": "Dentist, General Practice",
  "taxonomyCode": "1223G0001X",
  "licenseNumber": "54634",
  "licenseState": "CA",
  "address": "22500 SHERMAN WAY, SUITE 100",
  "city": "CANOGA PARK",
  "state": "CA",
  "postalCode": "913072306",
  "country": "US",
  "phone": "818-999-9900",
  "fax": "818-999-9901"
}
```

### How to use it

1. Set your filters — for example **state = `CA`** and **specialty = `Dentist`**, or a **last name**, or an **organization name**. You can also paste **NPI numbers** for a direct lookup.
2. Set **Max providers** to cap how many records you want.
3. Run the actor and download the results as **JSON, CSV or Excel**.

**Tip:** each distinct filter set returns up to about 1,200 records. To pull a large market, narrow by **city** or **specialty** and run several focused searches (e.g. per city or per specialty) rather than one broad one.

### Input fields

| Field | Description |
|-------|-------------|
| **NPI numbers** | Look up specific 10-digit NPI numbers directly (ignores the filters below). |
| **Provider type** | Any, Individual, or Organization. |
| **Specialty / taxonomy** | e.g. `Dentist`, `Pediatrics`, `Chiropractor`, `Pharmacy`. Wildcards with `*`. |
| **First name / Last name** | Individual provider name. Wildcards with `*`. |
| **Organization name** | Practice or facility name. Wildcards with `*`. |
| **City / State / ZIP** | Practice-location filters. State is a two-letter code (`CA`, `NY`, `TX`). |
| **Country code** | Two-letter country code (defaults to US). |
| **Max providers** | Maximum number of records to collect (0 = no limit). |

### Output fields

`npi`, `entityType`, `name`, `firstName`, `lastName`, `organizationName`, `credential`, `gender`, `status`, `enumerationDate`, `lastUpdated`, `primaryTaxonomy`, `taxonomyCode`, `licenseNumber`, `licenseState`, `taxonomies`, `address`, `city`, `state`, `postalCode`, `country`, `phone`, `fax`, `mailingAddress`, `mailingCity`, `mailingState`.

### Popular use cases

- **Healthcare lead generation** — build targeted lists of dentists, physicians or clinics by city and specialty.
- **Medical recruiting** — find and reach practitioners by specialty and location.
- **Credentialing & verification** — confirm NPI, taxonomy, license number and status.
- **Market & competitor research** — map provider density by specialty across regions.
- **CRM enrichment** — enrich existing records with NPI, specialty and practice contact detail.
- **Referral networks** — discover providers by specialty near a ZIP code.

### FAQ

**Do I need any account or key to run this?**
No. Just set your filters and run — everything needed is built in.

**Which countries are covered?**
The directory covers healthcare providers registered in the United States and its territories.

**How fresh is the data?**
Each record includes its own `lastUpdated` date so you can see when a provider's information was last maintained.

**Can I export to Excel or Google Sheets?**
Yes — results download as JSON, CSV or Excel, and integrate with Sheets, CRMs and databases.

**How many records can I pull at once?**
Each distinct filter set returns up to ~1,200 records. Split large markets into focused searches by city or specialty to go deeper.

***

Reliable, structured **US healthcare provider data** — by name, specialty, organization or location — exported clean and ready to use.

# Actor input Schema

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

Look up specific 10-digit NPI numbers directly. When set, the filters below are ignored. Leave empty to search by filters.

## `entityType` (type: `string`):

Restrict to individual practitioners or organizations.

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

Filter by specialty description — e.g. 'Dentist', 'Pediatrics', 'Chiropractor', 'Pharmacy'. Wildcards allowed with \* (min 2 chars).

## `firstName` (type: `string`):

Individual provider first name. Wildcards allowed with \* (min 2 chars).

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

Individual provider last name. Wildcards allowed with \* (min 2 chars).

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

Organization / practice name. Wildcards allowed with \* (min 2 chars).

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

Practice-location city — e.g. 'Miami'.

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

Two-letter state code — e.g. 'CA', 'NY', 'TX'.

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

Practice ZIP code. Wildcards allowed with \* (e.g. '9021\*').

## `countryCode` (type: `string`):

Two-letter country code (default US when blank) — e.g. 'US'.

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

Maximum number of providers to collect (0 = no limit). Note: each distinct filter set returns up to 1,200 records — narrow by city or specialty to reach more.

## Actor input object example

```json
{
  "npiNumbers": [],
  "entityType": "",
  "state": "CA",
  "maxItems": 200
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# 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 = {
    "npiNumbers": [],
    "state": "CA"
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/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 = {
    "npiNumbers": [],
    "state": "CA",
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/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 '{
  "npiNumbers": [],
  "state": "CA"
}' |
apify call hipersoft/npi-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/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/gETrakIdUIAXStvYE/builds/6zfmpYQnbVliLyk5n/openapi.json
