NPI Registry Scraper
Pricing
from $0.30 / 1,000 provider records
NPI Registry Scraper
Search and export public CMS NPI Registry healthcare provider records by NPI, specialty, name, organization, and location.
Pricing
from $0.30 / 1,000 provider records
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Extract public healthcare provider records from the CMS NPI Registry. Search by NPI number, specialty, provider name, organization, city, state, ZIP, and entity type, then export normalized provider data to CSV, JSON, Excel, or the Apify API.
What does NPI Registry Scraper do?
- Build healthcare lead lists by specialty and geography.
- Enrich internal provider records with official NPI details.
- Find clinics, hospitals, pharmacies, and individual practitioners.
- Support compliance, KYC, provider network, and market research workflows.
Who is it for
- Healthcare sales and marketing teams building specialty-specific outreach lists.
- Provider network and credentialing teams checking official NPI details.
- Compliance, KYC, and due-diligence teams validating provider identities.
- Data enrichment teams matching internal provider records to official registry data.
Example input
{"taxonomyDescription": "Cardiology","city": "Seattle","state": "WA","maxResults": 20,"includeRaw": true}
Exact NPI lookup:
{"npiNumbers": ["1679576722"],"maxResults": 1}
Example output
{"npi": "1679576722","entityType": "individual","enumerationType": "NPI-1","firstName": "JANE","lastName": "DOE","organizationName": null,"credential": "MD","primarySpecialty": "Internal Medicine, Cardiovascular Disease","practiceCity": "SEATTLE","practiceState": "WA","practicePhone": "2065550100","enumerationDate": "2005-07-01","status": "A","url": "https://npiregistry.cms.hhs.gov/provider-view/1679576722","scrapedAt": "2026-07-08T08:00:00.000Z"}
Input settings
| Field | Type | Description |
|---|---|---|
npiNumbers | string[] | Exact 10-digit NPI numbers to look up. |
taxonomyDescription | string | Specialty or taxonomy text, such as Cardiology or Family Medicine. |
firstName / lastName | string | Individual provider name filters. |
organizationName | string | Hospital, clinic, pharmacy, group practice, or other organization name. |
city | string | Provider practice city. |
state | string | Two-letter US state code. |
postalCode | string | ZIP/postal code filter. |
countryCode | string | Two-letter country code. Defaults to US when omitted. |
enumerationType | string | NPI-1 for individuals, NPI-2 for organizations, or blank for both. |
maxResults | integer | Maximum provider records to save. Default: 20. |
includeRaw | boolean | Include the complete CMS source record in raw. |
proxyConfiguration | object | Optional proxy settings. Off by default because the registry is public. |
Provide at least one NPI number or one search filter.
Output fields
The dataset includes flat fields for easy spreadsheet use and structured fields for enrichment pipelines:
- Provider identity:
npi,entityType,enumerationType,firstName,middleName,lastName,organizationName,credential,gender,status. - Specialties:
primarySpecialty,specialties,taxonomyCodes,taxonomies. - Practice and mailing contact data: address, city, state, ZIP, country, phone, and fax fields.
- Registry dates:
enumerationDate,certificationDate,lastUpdated,createdEpoch,lastUpdatedEpoch. - Source details:
url,scrapedAt,endpoints,identifiers,otherNames,practiceLocations, and optionalraw.
Input recipes
Providers by specialty and state
{"taxonomyDescription": "Pediatrics","state": "CA","maxResults": 100}
Organizations in a city
{"organizationName": "clinic","city": "Austin","state": "TX","enumerationType": "NPI-2","maxResults": 50}
Known NPI enrichment
{"npiNumbers": ["1679576722", "1234567893"],"includeRaw": true}
Pricing
This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.
| Event | What is charged | Price |
|---|---|---|
start | One-time fee per run | $0.005 |
| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
|---|---|---|---|---|---|---|---|
result | Per NPI Registry provider record saved to the dataset | $0.575 / 1,000 | $0.5 / 1,000 | $0.39 / 1,000 | $0.3 / 1,000 | $0.2 / 1,000 | $0.14 / 1,000 |
Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.
API usage
Run the actor from code with the Apify API.
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/npi-registry-scraper').call({taxonomyDescription: 'Cardiology',state: 'WA',maxResults: 20});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python:
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/npi-registry-scraper').call(run_input={'taxonomyDescription': 'Cardiology','state': 'WA','maxResults': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL:
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~npi-registry-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"taxonomyDescription":"Cardiology","state":"WA","maxResults":20}'
MCP and agent usage
Connect AI agents through Apify MCP with:
https://mcp.apify.com/?tools=fetch_cat/npi-registry-scraper
Claude CLI setup:
$claude mcp add apify-npi-registry https://mcp.apify.com/?tools=fetch_cat/npi-registry-scraper
MCP JSON config:
{"mcpServers": {"apify-npi-registry": {"url": "https://mcp.apify.com/?tools=fetch_cat/npi-registry-scraper"}}}
Example prompts showing MCP usage:
- "Use MCP to run
fetch_cat/npi-registry-scraperand find 50 active cardiology providers in Seattle. Return NPI, name, specialty, phone, and address." - "Use the Apify MCP server and
fetch_cat/npi-registry-scraperto enrich these NPI numbers with official organization names and taxonomy codes."
Limits and tips
- Keep
maxResultslow for the first run, then scale once the filters return the right provider type. - The CMS registry can return zero results for overly specific combinations; broaden city, specialty, or name filters if needed.
- Exact NPI lookup is best for enrichment. Specialty and location search is best for lead generation.
- When looking up several NPIs, check the run summary for any unavailable identifiers. Provider records saved before a later unavailable lookup remain in the dataset.
Legality and responsible use
The actor exports public CMS NPI Registry data. Provider data is public registry data, but you are responsible for using it lawfully and respecting applicable healthcare, marketing, and privacy rules.
FAQ
Does this require a CMS account? No. It uses public NPI Registry records.
Can I look up exact NPIs? Yes. Add one or more 10-digit values in npiNumbers.
Why did my search return zero records? The filters may be too narrow or the specialty text may not match registry taxonomy wording. Try fewer filters or a broader specialty.
Can I export phone numbers and addresses? Yes. Practice and mailing address fields, phones, and fax numbers are included when CMS provides them.
Related actors
- Google Maps Lead Finder for local business lead lists.
- Google Maps Reviews Scraper for business review intelligence.
Support
If a run does not return the expected records, open an issue and include the run ID or run URL, input JSON, expected output, actual output, and a reproducible public URL from the NPI Registry when available.
Privacy and data handling
This Actor only requests the permissions needed to run the input you provide. It uses your input (such as URLs, search terms, identifiers, filters, and limits) only to fetch the requested public data from the relevant source site or API for this Actor, then writes results to your Apify dataset/key-value store.
Data may pass through Apify platform services and Apify Proxy during the run, and requests are sent only to the target site or public data provider required for this Actor's results. FetchCat does not send your inputs or outputs to advertising networks, data brokers, or model-training services, and does not retain run data outside Apify storage after the run except when you explicitly share run details for transient support debugging.
You are responsible for using this Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs. Review the output before storing, sharing, or combining it with other data.