NPI Registry Scraper avatar

NPI Registry Scraper

Pricing

from $0.30 / 1,000 provider records

Go to Apify Store
NPI Registry Scraper

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

Hanna Nosova

Maintained by Community

Actor 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

FieldTypeDescription
npiNumbersstring[]Exact 10-digit NPI numbers to look up.
taxonomyDescriptionstringSpecialty or taxonomy text, such as Cardiology or Family Medicine.
firstName / lastNamestringIndividual provider name filters.
organizationNamestringHospital, clinic, pharmacy, group practice, or other organization name.
citystringProvider practice city.
statestringTwo-letter US state code.
postalCodestringZIP/postal code filter.
countryCodestringTwo-letter country code. Defaults to US when omitted.
enumerationTypestringNPI-1 for individuals, NPI-2 for organizations, or blank for both.
maxResultsintegerMaximum provider records to save. Default: 20.
includeRawbooleanInclude the complete CMS source record in raw.
proxyConfigurationobjectOptional 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 optional raw.

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.

EventWhat is chargedPrice
startOne-time fee per run$0.005
EventWhat is chargedFree / no discountStarter / BronzeScale / SilverBusiness / GoldCustom / PlatinumCustom / Diamond
resultPer 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 ApifyClient
import os
client = 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().items
print(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-scraper and find 50 active cardiology providers in Seattle. Return NPI, name, specialty, phone, and address."
  • "Use the Apify MCP server and fetch_cat/npi-registry-scraper to enrich these NPI numbers with official organization names and taxonomy codes."

Limits and tips

  • Keep maxResults low 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.

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.