# NPI Healthcare Provider Scraper - Leads by Specialty (`oriented_wallpaper/npi-healthcare-leads`) Actor

Scrape the official CMS NPPES NPI Registry — every licensed US healthcare provider — by specialty, state, city or name. Get name, specialty, NPI, phone, fax, address & license as clean contactable leads. Filter active / with-phone, dedupe. Export CSV/JSON/Excel. No API key.

- **URL**: https://apify.com/oriented\_wallpaper/npi-healthcare-leads.md
- **Developed by:** [Flash Scrape](https://apify.com/oriented_wallpaper) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## NPI Healthcare Provider Scraper - Leads by Specialty

**This NPI scraper turns the official CMS NPPES registry into clean, contactable healthcare-provider leads** — every licensed US doctor, dentist, therapist, pharmacy, clinic, and facility. Search by **specialty, state, city, ZIP, or name** and get one flat row per provider: name + credential, specialty, NPI, status, **phone**, fax, full practice address, and license. Filter to active / with-phone, dedupe, and export to CSV, JSON, or Excel.

Built for **medical-device & pharma sales, healthcare recruiters, billing/RCM & MSO services, insurance, and B2B marketers** who need callable provider leads by specialty + location — straight from the authoritative government source, no API key.

---

### Why this beats a generic "doctor list"

- **Authoritative + current** — the official CMS NPPES NPI Registry (every US provider must enroll), not a stale scraped list.
- **Phone on most records** — the practice-location phone, so leads are callable out of the box.
- **0-100 `lead_score`** — a contactability score (phone, active status, license, payer IDs, multiple locations, recency) so you can work the best leads first.
- **Decoded payer IDs** — `medicare_id`, `medicaid_id`, and other identifiers pulled out of the registry — a feature paid provider databases charge for, free here.
- **Every practice location** — a `practice_locations` array (address + phone per site) and a `location_count`, not just the primary address rivals stop at — map a provider's whole footprint.
- **Specialty-precise** — search by taxonomy ("physical therapist", "dermatology", "pharmacy") instead of fuzzy keywords, with `taxonomy_group` + `taxonomy_code` and all secondary specialties.
- **Direct/FHIR `secure_endpoints`** surfaced for health-IT and interoperability outreach.
- **Clean flat rows** — NPPES returns deeply nested JSON; this flattens it to a spreadsheet, with the primary specialty and practice address extracted for you.
- **No API key, no anti-bot, no proxies** — public government data.

---

### How to use it

1. Enter a **specialty** (taxonomy) and/or a **state / city / ZIP** — or a specific provider/organization name.
2. Choose provider type (individuals, organizations, or both) and optional filters (active only, has-phone).
3. Run → get a clean, deduped provider list.

#### Input

| Field | Type | Description |
|---|---|---|
| `taxonomy` | string | Specialty, e.g. `dentist`, `physical therapist`, `pharmacy`. |
| `state` | string | Two-letter state code (e.g. `CA`). |
| `city` | string | City (optional). |
| `postalCode` | string | ZIP (optional). |
| `providerType` | string | All / Individuals / Organizations. |
| `firstName` / `lastName` / `organizationName` | string | Name search (optional; wildcards OK). |
| `maxItems` | integer | Max providers (NPPES caps any single search at 1,200). |
| `onlyActive` | boolean | Keep only active-status NPIs. Default `true`. |
| `onlyWithPhone` | boolean | Keep only providers with a phone. |

> **Tip:** NPPES caps any single query at 1,200 results. For a whole specialty nationwide, run it once **per state** (and per city for dense specialties) to get full coverage.

**Example input:**

```json
{
  "taxonomy": "dentist",
  "state": "CA",
  "providerType": "individual",
  "onlyWithPhone": true,
  "maxItems": 500
}
````

#### JSON output sample

```json
{
  "npi": "1234567890",
  "lead_score": 90,
  "provider_type": "Individual",
  "name": "Jane Smith",
  "credential": "DDS",
  "primary_specialty": "Dentist, General Practice",
  "taxonomy_group": null,
  "taxonomy_code": "1223G0001X",
  "all_specialties": ["Dentist, General Practice", "Dentist, Orthodontics"],
  "status": "Active",
  "phone": "415-555-0123",
  "fax": "415-555-0124",
  "address": "123 Market St, Suite 200, San Francisco, CA, 94103",
  "city": "San Francisco",
  "state": "CA",
  "postal_code": "94103",
  "practice_locations": [
    { "address": "456 Mission St, San Francisco, CA, 94105", "city": "San Francisco", "state": "CA", "phone": "415-555-0150" }
  ],
  "location_count": 2,
  "license": "12345",
  "license_state": "CA",
  "medicare_id": "1A2B3C4D5E",
  "medicaid_id": "02770029",
  "other_ids": [{ "type": "MEDICAID", "id": "02770029", "state": "CA" }],
  "secure_endpoints": [],
  "other_names": [],
  "sole_proprietor": "YES",
  "enumeration_date": "2008-05-23",
  "last_updated": "2024-02-10",
  "has_phone": true,
  "has_payer_id": true
}
```

Results render as a clean, sortable table on the Output tab and export to CSV, JSON, or Excel.

***

### Use cases

- **Medical-device & pharma sales** — build a calling list of every cardiologist / dentist / PT in a territory.
- **Healthcare recruiting** — source providers by specialty + location.
- **Billing / RCM / MSO outreach** — target independent practices (sole proprietors) by specialty.
- **Insurance & networks** — verify and enrich provider rosters by NPI.
- **Market sizing** — count providers by specialty across states.

***

### Use with AI agents & automation

Run from the Apify **MCP** server so AI agents (Claude, ChatGPT, Cursor) can pull provider leads as a tool call, schedule runs via **Make**, **n8n**, or **Zapier** to feed a CRM, or sync the dataset to **Google Sheets**. Clean flat JSON drops into sales pipelines with no glue code.

***

### Pricing

**Pay-per-event — charged per provider lead delivered.** Source data is the free public NPPES API (no proxy or third-party cost). See the Apify Store page for the current per-result price.

***

### FAQ

**Where does the data come from?** The official **NPPES NPI Registry** maintained by CMS (the U.S. Centers for Medicare & Medicaid Services) — public, authoritative data every US provider must enroll in.

**Do I need an API key?** No. It works key-free.

**Is there an email field?** NPPES does not publish provider emails — it exposes the practice **phone**, fax, and address. Pair with a website-email finder if you need email.

**Why only 1,200 per search?** That's NPPES's own cap per query. Run per-state (and per-city for big specialties) to cover an entire specialty.

**Is this legal?** NPPES data is **public US government data** released for exactly this kind of use. Follow applicable calling/marketing laws (TCPA, Do-Not-Call) when you contact providers.

**Can I export to CSV or Google Sheets?** Yes — CSV, JSON, or Excel from the Output tab, or sync to Google Sheets via Make, n8n, or Zapier.

***

### Other Flash Scrape scrapers

- [Google Maps Leads Scraper](https://apify.com/oriented_wallpaper/google-maps-leads-opener) — local business leads
- [Yelp Leads Scraper](https://apify.com/oriented_wallpaper/yelp-leads-scraper) — business leads + email
- [FDA Recall Scraper](https://apify.com/oriented_wallpaper/fda-recall-scraper) — drug/device/food recalls
- [Trustpilot Reviews Scraper](https://apify.com/oriented_wallpaper/trustpilot-reviews-scraper) — company reviews
- [Indeed Jobs Scraper](https://apify.com/oriented_wallpaper/indeed-jobs-scraper) — job listings

# Actor input Schema

## `taxonomy` (type: `string`):

Provider specialty to search, e.g. 'dentist', 'physical therapist', 'chiropractor', 'family medicine', 'pharmacy'.

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

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

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

City name (optional).

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

ZIP code (optional). Supports a 5-digit code.

## `providerType` (type: `string`):

Individual practitioners, organizations, or both.

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

Individual provider first name (optional; supports wildcards like 'Jo\*').

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

Individual provider last name (optional; supports wildcards).

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

Organization/facility name (optional; supports wildcards).

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

Maximum providers to return (NPPES caps any single search at 1,200 — narrow by specialty + state + city for full coverage).

## `onlyActive` (type: `boolean`):

Keep only providers with an active NPI status.

## `onlyWithPhone` (type: `boolean`):

Drop providers with no practice phone number (best for cold calling).

## Actor input object example

```json
{
  "taxonomy": "dentist",
  "state": "CA",
  "providerType": "all",
  "maxItems": 100,
  "onlyActive": true,
  "onlyWithPhone": false
}
```

# Actor output Schema

## `results` (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 = {
    "taxonomy": "dentist",
    "state": "CA"
};

// Run the Actor and wait for it to finish
const run = await client.actor("oriented_wallpaper/npi-healthcare-leads").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 = {
    "taxonomy": "dentist",
    "state": "CA",
}

# Run the Actor and wait for it to finish
run = client.actor("oriented_wallpaper/npi-healthcare-leads").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 '{
  "taxonomy": "dentist",
  "state": "CA"
}' |
apify call oriented_wallpaper/npi-healthcare-leads --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "NPI Healthcare Provider Scraper - Leads by Specialty",
        "description": "Scrape the official CMS NPPES NPI Registry — every licensed US healthcare provider — by specialty, state, city or name. Get name, specialty, NPI, phone, fax, address & license as clean contactable leads. Filter active / with-phone, dedupe. Export CSV/JSON/Excel. No API key.",
        "version": "0.1",
        "x-build-id": "G3zjJfUsf2YVpIMJQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/oriented_wallpaper~npi-healthcare-leads/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-oriented_wallpaper-npi-healthcare-leads",
                "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/oriented_wallpaper~npi-healthcare-leads/runs": {
            "post": {
                "operationId": "runs-sync-oriented_wallpaper-npi-healthcare-leads",
                "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/oriented_wallpaper~npi-healthcare-leads/run-sync": {
            "post": {
                "operationId": "run-sync-oriented_wallpaper-npi-healthcare-leads",
                "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",
                "properties": {
                    "taxonomy": {
                        "title": "Specialty / taxonomy",
                        "type": "string",
                        "description": "Provider specialty to search, e.g. 'dentist', 'physical therapist', 'chiropractor', 'family medicine', 'pharmacy'."
                    },
                    "state": {
                        "title": "State",
                        "type": "string",
                        "description": "Two-letter US state code, e.g. 'CA', 'TX', 'NY'."
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "City name (optional)."
                    },
                    "postalCode": {
                        "title": "ZIP / postal code",
                        "type": "string",
                        "description": "ZIP code (optional). Supports a 5-digit code."
                    },
                    "providerType": {
                        "title": "Provider type",
                        "enum": [
                            "all",
                            "individual",
                            "organization"
                        ],
                        "type": "string",
                        "description": "Individual practitioners, organizations, or both.",
                        "default": "all"
                    },
                    "firstName": {
                        "title": "First name",
                        "type": "string",
                        "description": "Individual provider first name (optional; supports wildcards like 'Jo*')."
                    },
                    "lastName": {
                        "title": "Last name",
                        "type": "string",
                        "description": "Individual provider last name (optional; supports wildcards)."
                    },
                    "organizationName": {
                        "title": "Organization name",
                        "type": "string",
                        "description": "Organization/facility name (optional; supports wildcards)."
                    },
                    "maxItems": {
                        "title": "Max providers",
                        "minimum": 1,
                        "maximum": 1200,
                        "type": "integer",
                        "description": "Maximum providers to return (NPPES caps any single search at 1,200 — narrow by specialty + state + city for full coverage).",
                        "default": 100
                    },
                    "onlyActive": {
                        "title": "Active providers only",
                        "type": "boolean",
                        "description": "Keep only providers with an active NPI status.",
                        "default": true
                    },
                    "onlyWithPhone": {
                        "title": "Only providers with a phone",
                        "type": "boolean",
                        "description": "Drop providers with no practice phone number (best for cold calling).",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
