Pricing
Pay per event
NPI Registry Provider Scraper
Search the public CMS NPI Registry and export provider contact details, specialties, taxonomy codes, addresses, credentials, and NPI metadata.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Search the public CMS NPI Registry and export provider records with contact details, taxonomy/specialty data, addresses, credentials, and source metadata.
Use this actor when you need a clean provider list for healthcare operations, credentialing, lead enrichment, market mapping, or compliance research.
What does NPI Registry Provider Scraper do?
- ๐ Searches the CMS NPI Registry public API.
- ๐ฅ Exports one dataset row per provider record.
- ๐ Includes mailing and practice-location address fields.
- โ๏ธ Captures phone and fax values when the registry provides them.
- ๐งพ Includes taxonomies, primary license, status, and dates.
- ๐งโโ๏ธ Handles individual providers and organizations.
- ๐งฉ Supports batch searches and exact NPI lookups.
Who is it for?
- Healthcare operations teams building provider directories.
- Credentialing teams checking NPI status and specialty data.
- Sales and marketing teams researching healthcare provider leads.
- Data enrichment teams matching provider CRM records.
- Recruiters mapping physicians, clinics, facilities, and specialties.
- Analysts studying provider density by city, state, ZIP, or taxonomy.
Why use this actor?
The CMS NPI Registry is public, but raw API output is nested and inconvenient for spreadsheet workflows. This actor turns registry responses into flat, export-friendly rows while preserving nested details as JSON fields. It also handles pagination, batching, deduplication, and metadata so your team can focus on analysis.
How much does it cost to scrape NPI Registry providers?
This actor uses pay-per-event pricing.
There is a small start charge per run and a per-provider charge for each saved NPI record.
Use a low maxResults value for first tests, then increase it for production exports.
Final tiered pricing is validated during cloud cost testing before publication.
Input options
mode: choosesearchorlookup.maxResults: total provider records to save.searches: optional batch of search filter objects.npiNumbers: exact NPI values for lookup mode.firstNameandlastName: individual provider filters.organizationName: facility, clinic, practice, or company name.taxonomyDescription: specialty text such as Cardiology or Dentist.city,state,postalCode,countryCode: location filters.enumerationType: individual providers (NPI-1) or organizations (NPI-2).useFirstNameAlias: include common first-name aliases supported by CMS.
Example search input
{"mode":"search","maxResults":50,"state":"MA","city":"Boston","taxonomyDescription":"Cardiology"}
Example batch input
{"mode":"search","maxResults":100,"searches":[{"state":"MA","city":"Boston","taxonomyDescription":"Cardiology"},{"state":"NY","city":"New York","taxonomyDescription":"Family Medicine"}]}
Example lookup input
{"mode":"lookup","maxResults":10,"npiNumbers":["1730958521"]}
Output data
The dataset contains provider identity, contact, taxonomy, and metadata fields.
| Field | Description |
|---|---|
npi | National Provider Identifier. |
providerName | Individual or organization display name. |
providerType | Individual, organization, or unknown. |
status | Registry status value. |
locationPhone | Practice-location phone when available. |
primaryTaxonomyDescription | Main specialty description. |
primaryTaxonomyCode | Main taxonomy code. |
primaryLicenseNumber | License attached to primary taxonomy. |
taxonomyDescriptions | Semicolon-separated specialty descriptions. |
identifiersJson | Additional identifiers as JSON. |
endpointsJson | Registry endpoint data as JSON. |
practiceLocationsJson | Additional practice locations as JSON. |
sourceApiUrl | Exact CMS API URL used. |
fetchedAt | Actor fetch timestamp. |
Output example
{"npi":"1730958521","providerName":"SARAH MARGARET BEARGIE PharmD","providerType":"individual","locationCity":"BOSTON","locationState":"MA","locationPhone":"617-724-1939","primaryTaxonomyDescription":"Pharmacist"}
Tips for best results
- Start with a city, state, and specialty to keep searches targeted.
- Use
enumerationTypewhen you only want individuals or organizations. - Use batch searches for territory lists or specialty lists.
- Keep the first run small to inspect output columns.
- Increase
maxResultsafter you confirm the search filters are correct. - Use exact
npiNumbersfor enrichment or verification workflows.
Pagination and limits
The actor requests pages from the CMS API and stops when it reaches maxResults or no more records are returned.
The CMS API has practical pagination limits, so very broad searches should be split by city, state, specialty, or ZIP code.
Targeted searches produce cleaner and more useful provider lists.
Integrations
- Export to CSV for spreadsheet review.
- Send records to a CRM enrichment pipeline.
- Join by
npiwith internal provider records. - Use
taxonomyCodesto segment specialties. - Use
locationStateandlocationPostalCodefor territory mapping. - Use
sourceApiUrlas an audit trail for compliance review.
API usage with Node.js
import{ ApifyClient }from'apify-client';const client =newApifyClient({token: process.env.APIFY_TOKEN});const run =await client.actor('automation-lab/npi-registry-provider-scraper').call({mode:'search',maxResults:50,state:'MA',city:'Boston',taxonomyDescription:'Cardiology'});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient()run = client.actor('automation-lab/npi-registry-provider-scraper').call(run_input={'mode':'search','maxResults':50,'state':'MA','city':'Boston','taxonomyDescription':'Cardiology',})print(run['defaultDatasetId'])
API usage with cURL
curl-X POST 'https://api.apify.com/v2/acts/automation-lab~npi-registry-provider-scraper/runs?token=$APIFY_TOKEN'\-H'Content-Type: application/json'\-d'{"mode":"search","maxResults":50,"state":"MA","city":"Boston","taxonomyDescription":"Cardiology"}'
MCP usage
Connect this actor through Apify MCP at:
https://mcp.apify.com/?tools=automation-lab/npi-registry-provider-scraper
Claude Code setup:
$claude mcp add apify-npi-registry https://mcp.apify.com/?tools=automation-lab/npi-registry-provider-scraper
Claude Desktop JSON configuration:
{"mcpServers":{"apify-npi-registry":{"url":"https://mcp.apify.com/?tools=automation-lab/npi-registry-provider-scraper"}}}
Example prompts:
- "Find cardiology providers in Boston and summarize specialties."
- "Look up these NPI numbers and return phone and address fields."
- "Build a provider list for physical therapists in Austin, Texas."
Data quality notes
The actor returns data exactly as published by the CMS NPI Registry. Some providers omit phone, fax, endpoint, or license fields. Address and taxonomy values can reflect registry updates submitted by providers or organizations. Always verify critical business decisions against the official source.
Legality
This actor uses the public CMS NPI Registry API. The NPI Registry is intended for public provider lookup, but users remain responsible for following applicable laws, platform terms, privacy rules, and healthcare compliance requirements. Do not use exported data for spam or unlawful targeting.
FAQ
Is this an official CMS tool?
No. This is an independent Apify actor that reads the public CMS NPI Registry API and formats results for exports and automations.
Can I search multiple provider specialties?
Yes. Add multiple objects to searches, one per specialty, city, state, organization, or other filter combination.
Troubleshooting
Why did I get fewer records than expected?
The CMS API may have fewer matching providers for your exact filters. Try broader specialty text, remove city, or split by state and ZIP code.
Why are phone numbers missing?
Phone and fax fields are optional in registry records. The actor saves them when the CMS response includes them.
Why does a broad state search stop early?
Very broad queries can hit API pagination limits. Split the workload by city, ZIP prefix, specialty, or organization name for better coverage.
Related scrapers
- https://apify.com/automation-lab/google-maps-lead-finder
- https://apify.com/automation-lab/yelp-scraper
- https://apify.com/automation-lab/doctoralia-mexico-scraper
- https://apify.com/automation-lab/apple-maps-places-scraper
Changelog
- Initial version: CMS NPI Registry search and exact NPI lookup.
Support
If a run fails, include the run URL, input JSON, and a short description of the expected providers.
Quick reference
- Use
mode: searchfor discovery. - Use
mode: lookupfor exact NPI enrichment. - Use
maxResultsto control spend. - Use
searchesfor batch territories. - Use
taxonomyDescriptionfor specialties. - Use
enumerationType: NPI-1for individuals. - Use
enumerationType: NPI-2for organizations. - Export JSON when you need nested taxonomy details.
- Export CSV when you need spreadsheet-friendly leads.
