Physician Directory + NPI Cross-Reference avatar

Physician Directory + NPI Cross-Reference

Pricing

Pay per usage

Go to Apify Store
Physician Directory + NPI Cross-Reference

Physician Directory + NPI Cross-Reference

Cross-reference NPI Registry plus state medical license boards into one verified physician contact record. Built for healthcare M&A brokers, PE rollups, physician recruiters. Pay per result.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

George Kioko

George Kioko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

14 hours ago

Last modified

Categories

Share

Healthcare M&A volume cleared $1B+ in 2025 across PE rollups (TUSK Practice Sales, Practice Transitions Group). DSO deal flow alone was 10+ practices/month in September 2025. Every one of those buyers needs the same thing: a clean physician contact list with NPI, specialty, primary practice address, license number, and a working email pattern. This actor returns that record on demand at per-call pricing.

Apify Store Pricing

Why this exists

Definitive Healthcare sells the physician directory market at $25,000-$100,000 per seat per year. That's the price umbrella for every healthcare-M&A team, PE rollup, MedSpa broker, and physician-recruitment firm that needs the same dataset. The NPI Registry has been free public data from CMS since 2007. Healthgrades, Vitals, and ZocDoc are public-web. State medical license boards are searchable in every US state. The data is there. Nobody has wired it into a single per-call API that returns one normalized record.

This actor does that. NPI Registry as the spine. State medical license board cross-reference for live status verification. Email guess generator for outreach. One call, one record, $0.05-$0.25 per row depending on enrichment level.

How it works

/search?specialty=&state= /enrich?npi=
| |
v v
+----------+----------+ +--------+----------+
| NPI Registry CMS | | NPI Registry CMS |
| (public, free) | | (single lookup) |
+----------+----------+ +--------+----------+
| |
| normalized | normalized
v v
results[] npiRecord
| |
| v
| +--------+----------+
| | CA Med Board |
| | (search.dca.ca) |
| | via VPS Go TLS |
| +--------+----------+
| |
| | license + status
| v
| +--------+----------+
| | Email Guesser |
| | (6 patterns x 3 |
| | domain seeds) |
| +--------+----------+
v v
+------+------+ +--------+--------+
| basic record | | enriched record |
| $0.05/row | | $0.25/row |
+-------------+ +-----------------+

Endpoints

MethodPathDescriptionCharge
GET/Service info, pricing, source listnone
GET/healthLiveness checknone
GET/search?specialty=&state=&city=&limit=Search NPI Registry, return basic records$0.05 per result
GET/enrich?npi=Single NPI -> full enrichment$0.25 per record
GET/enrich?name=&state=Name + state -> NPI lookup -> enrichment$0.25 per record
POST/enrich/bulk body {npis:[...]} (max 25)Bulk enrichment$0.25 per record

Quick start

# Search by specialty + state
curl -s "https://george-the-developer--physician-directory-npi.apify.actor/search?specialty=Cardiology&state=CA&limit=10" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN"
# Enrich a single NPI
curl -s "https://george-the-developer--physician-directory-npi.apify.actor/enrich?npi=1710071717" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN"
# Bulk enrich (max 25 NPIs)
curl -s -X POST "https://george-the-developer--physician-directory-npi.apify.actor/enrich/bulk" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"npis":["1710071717","1528076718","1962778159"]}'

Sample response

{
"ok": true,
"record": {
"npi": "1710071717",
"name": "ABDUL SATTAR ABBASI",
"credentials": "MD",
"specialty": "Internal Medicine, Cardiovascular Disease",
"specialty_group": "Other",
"taxonomy_code": "207RC0000X",
"primary_address": {
"street": "1045 ATLANTIC AVE, SUITE 912",
"city": "LONG BEACH",
"state": "CA",
"zip": "908133408",
"phone": "562-437-2801",
"fax": ""
},
"license": {
"state": "CA",
"license_number": "A24632",
"status": "unknown",
"note": "Cross-referenced from NPI taxonomy. Verify live status at search.dca.ca.gov if critical."
},
"email_guesses": [
{ "email": "abdul.abbasi@abbasimd.com", "verified": false },
{ "email": "aabbasi@abbasimd.com", "verified": false },
{ "email": "abdul.abbasi@abbasiinternalmedicine.com", "verified": false }
],
"enumeration_date": "2010-06-01",
"last_updated": "2024-12-01",
"status": "A",
"source": {
"npi_registry": "https://npiregistry.cms.hhs.gov/api/?version=2.1&number=1710071717",
"state_license_board": "https://search.dca.ca.gov/results?BOARDCODE=8002&LICENSETYPE=A&..."
}
}
}

Pricing

EventPriceWhat you get
apify-actor-start$0.10 per run (per GB memory)Standby instance warm
physician-discovered$0.05 per recordNPI + name + specialty + primary practice address (search results)
physician-enriched$0.25 per recordFull enrichment: NPI + state license cross-reference + 6 email guesses + all taxonomies + other identifiers

For comparison: Definitive Healthcare seats run $25K-$100K/yr. At $0.25/record, you can pull 100,000 enriched physician records for $25,000 once. That's the price umbrella this is sitting under.

Use cases

  • PE healthcare rollups building target lists across states for cardiology, orthopedics, dermatology, primary care, dental practice acquisition
  • MedSpa M&A brokers identifying medical directors and specialty practice owners for M&A outreach
  • Physician recruitment firms building active-license verified provider lists by specialty + region
  • Medical sales reps prospecting providers in target specialties (device manufacturers, pharma, RCM)
  • Healthcare research firms academic and competitive-intel firms running provider-density analyses
  • Provider credentialing teams verifying NPI + license + practice address in one call

Honest tradeoffs (v1)

  • State license live status: v1 wires CA Medical Board (search.dca.ca.gov) live cross-reference. CA-MBC sits behind an F5 WAF that intermittently blocks Chrome-fingerprinted requests. When the live check returns 0 rows, the actor falls back to the NPI Registry taxonomy license number with status:"unknown" and a note. FL, NY, TX coming in v2.
  • Healthgrades / Vitals / ZocDoc: deferred to v2. Healthgrades and Vitals require Cloudflare bypass, ZocDoc requires Datadome bypass. Adding them is the work for v2 once the v1 dataset proves the demand.
  • Email guessing: the 6 patterns generated are unverified guesses. The note on each guess says so. Pair them with my Email Validator API for SMTP-grade verification before sending outreach.
  • NPI Registry specialty filter: the public CMS API does substring match on taxonomy_description. A search for "Cardiology" returns Cardiologist MDs (taxonomy 207RC0000X) plus pharmacists with cardiology certs (1835C0206X). Filter by taxonomy_code prefix 207RC for MD-only cardiologists.
  • Org NPIs (NPI-2): included in search but enrichment treats them as the legal entity. For physician-level outreach, filter by enumeration_type:"NPI-1".

Test-payload short-circuit

Pass NPI 1234567890 or 0000000001 or 9999999999, or name John Doe Test, and the actor returns {ok:true, mocked:true} with no charge. Use these for CI smoke tests without burning credit.

curl -s "https://george-the-developer--physician-directory-npi.apify.actor/enrich?_test=true&npi=0000000001" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN"
# {"ok":true,"mocked":true,"reason":"test-payload short-circuit, NPI Registry skipped"}

More from this developer

Built by George The Developer. Source-of-record at github.com/the-ai-entrepreneur-ai-hub/physician-directory-npi-docs.