CMS NPI Registry logo

Open data · Coming soon

NPI Registry Provider Lookup

Search the public NPPES NPI Registry by specialty and place. Or check a list of NPI numbers in one go. You get names, taxonomies and practice addresses in a table.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

npi1225787708
typeNPI-2
name31 ELMGROVE DENTAL LLC

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: 25 in Maximum providers. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Search the CMS NPPES NPI Registry for US providers by taxonomy and practice location, or look up NPI numbers in a batch. Get provider names, taxonomies, published licence details and practice addresses in an Apify Dataset.

  • Search by taxonomy description, state, city, ZIP code, provider type or provider name.
  • Look up up to 200 NPI numbers in one input. Duplicate inputs are removed.
  • Read pages from NPPES and remove duplicate provider records.
  • Save a row for each returned NPI, with the primary taxonomy and all published taxonomies.
  • With onlyNew, save only NPI numbers that are new to your baseline.

Who uses it

Healthcare data teams

Match and clean an NPI list in one batch.

Directory builders

List practices by specialty, state and city.

Market researchers

Count providers of one type in an area.

Price

Prices will be shown after release.

Questions

Does this check a medical licence?

No. It shows published licence fields. Ask the licensing authority to verify.

Can I get doctors' emails or phones?

No. Personal contact fields are left out. Some organization rows may show the practice phone.

Does onlyNew find changed addresses?

No. It only finds new NPI numbers. Compare full exports to see edits.

Do I need an NPPES key?

No. The registry is public. You only need an Apify account.

Can I get doctors' e-mail addresses or personal phone numbers?

No. Individual contact fields are omitted, and no contact enrichment is performed.

Can I export the whole US registry?

No. Use the CMS downloadable files for national bulk coverage. This Actor supports bounded searches and lookup batches.

Details

Step by step on Apify
  1. Open Input.
  2. Keep taxonomyDescription: Dentist, state: RI, city: Providence and maxResults: 25.
  3. Click Start.
  4. Open the Providers output and export the Dataset as JSON, CSV or Excel.
  5. Read Run summary for the completion status, saved count and missing NPI numbers.
Use cases
TaskInputUseful output
Build a practice directoryTaxonomy + state + cityNPI, organization, taxonomy, practice address
Match an existing NPI listnpisNPI, name, type, source dates and missing-number summary
Review published taxonomy detailsName or NPIPrimary taxonomy, all taxonomy codes and published licence fields
Tips for better results
  • You can check up to 200 NPI numbers per run. Duplicates are removed.
  • Use onlyNew to get only NPI numbers you have not seen before.
  • For the whole US registry, use the CMS bulk files instead.
Limits and good to know
  • Up to 200 NPI inputs and 1000 saved providers. NPPES returns at most 200 records per request. This Actor scans the first 1000 candidates, rather than the whole national registry
  • Search results are a bounded live sample. They are not a snapshot of a fixed total, and source records can change between pages
  • Up to 220 source attempts, 4 MiB per response and 8 MiB across a run. Requests are serial with at least 1.1 seconds between attempts. Retries respect Retry-After within the shared deadline
  • Search source work stops after 120 seconds; lookup source work stops after 240 seconds. Both stop before the platform timeout. A large batch may therefore stop before all NPIs are processed
  • MAX_RESULTS means the saved-row cap was reached; narrow filters or raise the cap within the allowed range. SOURCE_WINDOW_LIMIT means the scanned source window ended
  • A source error fails the run and writes error, or partial if rows were already saved. Existing Dataset rows remain available. An input error also fails the run
  • NPI Registry provides active records. A missing result may be unknown, unavailable or deactivated; the API alone cannot tell which. CMS publishes deactivation information separately
  • NPI issuance does not prove a current licence, credential, quality, insurance participation or Medicare enrolment. Data may contain outdated information supplied by providers

Troubleshooting

SymptomLikely causeAction
Input error before source requestsBad checksum, mixed modes or unsupported filterReview the input fields. Clear search prefills for lookup.
Empty Dataset with not_foundNo active record matchesCheck spelling, taxonomy wording and filters; review notFoundNpis.
Empty Dataset with complete and unchanged > 0All returned NPIs were already in the onlyNew baselineUse onlyNew: false for a full export.
partial and CHARGE_LIMITCustomer budget reachedIncrease the permitted charge or request fewer providers.
SOURCE_RATE_LIMIT, SOURCE_TIMEOUT or SOURCE_UNAVAILABLERegistry throttling or an outageWait and retry a small request. Preserve the existing Dataset.
BASELINE_INVALID or BASELINE_SAVE_ERRORInvalid baseline or a storage problemCheck your named KVS; use a new stateKey for a fresh history.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "npi": "1225787708",
  "type": "NPI-2",
  "name": "31 ELMGROVE DENTAL LLC",
  "organization": "31 ELMGROVE DENTAL LLC",
  "credential": null,
  "primaryTaxonomy": {
    "code": "1223G0001X",
    "description": "Dentist, General Practice",
    "primary": true,
    "licenseNumber": null,
    "licenseState": null
  },
  "practiceAddress": {
    "address1": "31 ELMGROVE AVE",
    "address2": null,
    "city": "PROVIDENCE",
    "state": "RI",
    "postalCode": "029064103",
    "countryCode": "US"
  },
  "phone": "401-421-9350",
  "status": "A",
  "enumerationDate": "2022-03-22",
  "lastUpdated": "2022-03-22"
}
Input settings (11)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
NPI numbersnpisarray
Maximum providersmaxResultsinteger25
Only new NPI numbersonlyNewbooleanfalse
Baseline keystateKeystring"npi-provider-baseline"
Taxonomy descriptiontaxonomyDescriptionstring"Dentist"
Statestatestring"RI"
Citycitystring"Providence"
Postal codepostalCodestring
Provider typeenumerationTypestring""
Organization nameorganizationNamestring
Last namelastNamestring

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure