Physician Directory + NPI Cross-Reference
Pricing
Pay per usage
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
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.
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 | normalizedv vresults[] 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
| Method | Path | Description | Charge |
|---|---|---|---|
| GET | / | Service info, pricing, source list | none |
| GET | /health | Liveness check | none |
| 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 + statecurl -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 NPIcurl -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
| Event | Price | What you get |
|---|---|---|
apify-actor-start | $0.10 per run (per GB memory) | Standby instance warm |
physician-discovered | $0.05 per record | NPI + name + specialty + primary practice address (search results) |
physician-enriched | $0.25 per record | Full 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 (taxonomy207RC0000X) plus pharmacists with cardiology certs (1835C0206X). Filter bytaxonomy_codeprefix207RCfor 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
- Email Validator API — pair with email guesses for SMTP verification ($0.002 per check)
- Domain WHOIS Lookup — pull practice domain registration ($0.005 per domain)
- Company Enrichment API — full company profile from a domain ($0.01 per company)
- Obituary Life-Insurance Lead Scraper — sister actor for final-expense insurance prospecting
- Funded Startup Tracker — TC RSS + SEC EDGAR fusion for VC outreach
- ATS Hire-Trigger Intent Scraper — Greenhouse + Lever + Ashby intent signals
- Shopify DTC Brand Discovery — DTC brand finder + Klaviyo tech-stack detection
Built by George The Developer. Source-of-record at github.com/the-ai-entrepreneur-ai-hub/physician-directory-npi-docs.