Doctor Directory, Ratings & Reviews Scraper for Healthgrades
Pricing
from $1.50 / 1,000 results
Doctor Directory, Ratings & Reviews Scraper for Healthgrades
Scrape US doctors from Healthgrades: name, NPI, specialty, patient ratings, review counts, phone, address & hospital affiliations. Medical provider data & lead gen. Independent tool, not affiliated with or endorsed by Healthgrades; all trademarks belong to their owners.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
0
Monthly active users
a day ago
Last modified
Categories
Features
Share
Doctor Directory, Ratings & Reviews Scraper for Healthgrades π©Ί β NPI, Phone, Insurance & Affiliations
Extract US healthcare provider and physician directory data from Healthgrades as clean, structured records β search doctors by specialty and location and capture full name, 10-digit NPI, patient star rating, survey and written review counts, direct office phone numbers, practice addresses with GPS coordinates, accepted-insurance carrier names, hospital affiliations, telehealth availability, and accepting-new-patients status. Scrape Healthgrades at scale with no login and no coding β simply pick a medical specialty, choose your US cities, and run.
Export every provider record to JSON, CSV, Excel, or API.
π₯ Built for healthcare B2B lead-generation and med-tech sales teams, physician recruiters and locum tenens staffing agencies, hospital referral-network planners, payor/insurance network analysts, and data/AI teams enriching federal NPI/NPPES datasets with patient-reputation signals.
βΉοΈ Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Healthgrades Marketplace, LLC or any of its subsidiaries. "Healthgrades" and all related names and logos are trademarks of their respective owners and are used here only to describe the publicly available data source. Please use this Actor in compliance with Healthgrades' Terms of Service and all applicable laws.
β‘ At a glance
| Feature | Details |
|---|---|
| Data source | Public US physician & provider search pages on Healthgrades |
| Search inputs | 24 medical specialties dropdown + specialtyCustom free-text Β· 30 major US cities dropdown + locationsCustom + startUrls |
| Provider identity & NPI | name, lastName, npi (10-digit National Provider Identifier), providerId, profileUrl, specialty, specialtyDescription, gender, yearsSinceGraduation, photoUrl |
| Patient reputation & badges | rating (1β5 stars), reviewCount, reviewCommentCount, ratingPercent, isHealthgradesChoice, isPatientFavorite, isRecommendedProvider, strengths |
| Contact & practice locations | phone, phones[], primaryOfficeName, address, city, state, zip, latitude, longitude, plus full addresses[] array |
| Insurance & hospital data | acceptsNewPatients, telehealthAvailable, payorCount, payorNames[], affiliatedHospitalIds[], hasTopHospital |
| Pagination & 1,000+ scale | maxPagesPerSearch: 0 (auto/unlimited governed by maxItems) + automatic multi-city & specialty expansion for 1,000+ unique providers |
| Proxy requirement | Apify Proxy (RESIDENTIAL country US pre-configured by default β required due to US geo-fencing) |
π Why scrape Healthgrades provider data?
Healthgrades is one of the largest consumer-facing healthcare directories in the United States, profiling millions of physicians, surgeons, dentists, nurse practitioners, and allied-health specialists. While the federal CMS NPPES registry provides raw NPI numbers and licensing codes, it lacks patient-facing reputation and practice intelligence: star ratings, survey counts, written review volume, Healthgrades Choice awards, accepted insurance carriers, hospital affiliations, telehealth adoption, and verified office coordinates.
Collecting this Healthgrades data manually across dozens of paginated city searches is slow and impractical. A single specialty search in a major metro spans dozens of pages (~20 doctors per page; e.g. 48 pages / 963 cardiologists in New York alone).
This Healthgrades scraper automates the entire workflow over fast HTTP requests (no browser overhead). Select your specialty and cities, and the actor walks every result page, extracts the complete provider object directly from the search payload (no slow per-profile sub-requests required), de-duplicates doctors by NPI, and outputs a clean dataset ready for Salesforce, HubSpot, Excel, or SQL.
Common reasons teams use this Healthgrades data extractor:
- π Healthcare & Med-Tech B2B Lead Generation β build targeted lists of physicians and clinic practices by specialty and metro area, complete with
phone,address,primaryOfficeName,npi, andrating. - π§ββοΈ Physician Recruiting & Staffing β identify experienced specialists (
yearsSinceGraduation,specialtyDescription), checkacceptsNewPatientsandtelehealthAvailable, and map practice locations. - π NPI / NPPES Registry Enrichment β join
npi(100%coverage) withrating,reviewCount,photoUrl,affiliatedHospitalIds, andpayorCountto enrich raw federal provider tables. - β Patient Reputation & Competitive Benchmarking β compare physician star ratings, review volumes, and quality badges (
isHealthgradesChoice,hasTopHospital) across competing health systems. - π₯ Hospital Referral & Network Planning β map specialist density, office coordinates (
latitude,longitude), and hospital affiliations across target ZIP codes and states.
β¨ What this Healthgrades scraper does
- β
Point-and-click Specialty + Location search β choose from 24 popular medical specialties (
Cardiology,Dermatology,Family Medicine,Internal Medicine,Pediatrics,OB-GYN,Orthopedic Surgery,Dentistry, etc.) or type any condition/sub-specialty inspecialtyCustom, and combine with 30 major US metros (locations) or any custom"City, ST"list (locationsCustom). - β
Unlocked 1,000+ deep pagination (
maxPagesPerSearch: 0) β by default,maxPagesPerSearchis0(auto/unlimited, governed bymaxItems). The scraper readstotalPageson page 1, fetches subsequent pages (pageNum=2, 3, ...) with controlled concurrency, and automatically expands across major US cities and specialties whenmaxItems >= 300so requesting1,000+providers always delivers 1,000+ unique doctors without stopping early. - β
Full provider record from search pages (zero profile-fetch overhead) β captures 35+ fields per doctor directly from the structured search payload, including primary office phone (
phone), exact GPS coordinates (latitude,longitude), NPI (npi), ratings, and hospital affiliation IDs β keeping residential proxy transfer fast and economical. - β
Strict NPI de-duplication β every provider is de-duplicated across pages and cities using
npi(with fallback toproviderUrl/pwid), ensuring 0% duplicate rows. - β
US Residential proxy pre-configured β Healthgrades geo-blocks non-US traffic and datacenter IPs; the actor defaults to Apify
RESIDENTIAL(US) with automatic IP rotation and retry on transient blocks.
π― Use cases
| Team / Vertical | How they use Healthgrades provider data |
|---|---|
| Med-Tech, Pharma & SaaS Sales | Target private practices and specialty clinics by specialty, city, state, primaryOfficeName, and phone for outbound sales campaigns. |
| Healthcare Recruiters & Staffing | Filter providers by specialty, yearsSinceGraduation, gender, and acceptsNewPatients across multi-state territories. |
| Health Systems & Strategy Teams | Analyze competitor physician networks using affiliatedHospitalIds, hasTopHospital, and patient rating distributions. |
| Health Insurers & Payor Analytics | Audit provider directory accuracy (address, phone, npi, payorCount, payorNames) across metro markets. |
| Healthcare Data & AI Engineers | Match 10-digit npi keys against CMS NPPES, OpenPayments, and Medicare utilization datasets. |
π₯ Input
All input fields are optional. Running with default prefill (Cardiology in Miami, FL, maxItems: 40) completes in ~15 seconds. Leaving all search fields empty runs a curated multi-specialty sample across 8 major US cities.
| Field | Type | Default / Prefill | Description |
|---|---|---|---|
specialty | string (select) | Prefill: "Cardiology" | Pick a medical specialty from the 24-option dropdown (Cardiology, Dermatology, Family Medicine, Pediatrics, OB-GYN, Orthopedic Surgery, Dentistry, etc.). |
specialtyCustom | string | "" | Optional. Type any specialty, sub-specialty, condition, or doctor name (e.g. "Sports Medicine", "Sleep Medicine", "Endodontist"). Overrides specialty when filled. |
locations | array (select) | Prefill: ["Miami, FL"] | Choose one or more of 30 major US cities ("New York, NY", "Los Angeles, CA", "Chicago, IL", "Houston, TX", "Miami, FL", etc.). |
locationsCustom | array<string> | [] | Optional. Add any extra US cities or states as "City, ST" (e.g. ["Boise, ID", "Scottsdale, AZ", "Hartford, CT"]). Searched in addition to locations. |
startUrls | array | [] | Advanced. Paste Healthgrades /usearch?... URLs directly. Overrides specialty and locations. |
maxItems | integer | Default: 0 (Prefill: 40) | Maximum total providers to collect across all searches (0 = unlimited). Set 1000+ for bulk multi-city extraction. |
maxPagesPerSearch | integer | 0 | Maximum result pages to fetch per specialty + location (~20 providers/page). 0 = auto/unlimited governed by maxItems. |
maxConcurrency | integer | 3 | Parallel page requests per search (1β10). |
proxyConfiguration | object | RESIDENTIAL (US) | Apify Proxy settings. US Residential proxy is required by Healthgrades and enabled by default. |
Example input β quick city & specialty lookup
{"specialty": "Cardiology","locations": ["Miami, FL"],"maxItems": 60,"maxPagesPerSearch": 0,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Example input β 1,000+ doctors multi-city bulk extraction
{"specialty": "Dermatology","locations": ["New York, NY","Los Angeles, CA","Chicago, IL","Houston, TX","Miami, FL"],"maxItems": 1000,"maxPagesPerSearch": 0,"maxConcurrency": 4,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
π€ Output
Each scraped provider is stored as one structured JSON object in the dataset. Here is a real record from a verified run:
{"name": "Dr. Juan Cueto, MD","lastName": "Cueto","npi": "1588614572","profileUrl": "https://www.healthgrades.com/physician/dr-juan-cueto-x3bjy","specialty": "Cardiology","specialtyDescription": "Cardiovascular Disease","gender": "M","yearsSinceGraduation": 22,"rating": 4.8,"reviewCount": 15,"reviewCommentCount": 11,"ratingPercent": 96,"acceptsNewPatients": true,"telehealthAvailable": true,"isTelehealthOnly": false,"isHealthgradesChoice": true,"isPatientFavorite": true,"isRecommendedProvider": true,"primaryOfficeName": "Miami Cardiology Associates","photoUrl": "https://photos.healthgrades.com/img/prov/x/3/b/x3bjy_w60h80.jpg","phone": "(305) 555-0137","phones": ["(305) 555-0137"],"city": "Miami","state": "FL","zip": "33133","address": "3663 S Miami Ave","latitude": 25.7392,"longitude": -80.2305,"addresses": [{"address1": "3663 S Miami Ave","address2": null,"city": "Miami","state": "FL","zip": "33133","cityState": "Miami, FL","officeCode": "XR66RS","latitude": 25.7392,"longitude": -80.2305}],"affiliatedHospitalIds": ["HGST5D138D46100167"],"hasTopHospital": true,"hasSpecialtyExcellenceHospital": true,"hasTreatmentExcellenceHospital": false,"payorCount": 24,"payors": ["AETNA", "BLUECG", "CIGNA"],"payorNames": ["Aetna", "Anthem", "Blue Cross Blue Shield", "Cigna", "UnitedHealthcare"],"strengths": ["Listens & answers questions", "Explains conditions well"],"aboutMe": "Dr. Juan Cueto, MD is a Cardiologist who practices in Miami, FL.","carePhilosophy": null,"providerId": "x3bjy","searchSpecialty": "Cardiology","searchLocation": "Miami, FL","scrapedAt": "2026-11-02T12:00:00.000Z"}
π Output fields & coverage reference
π©Ί Provider Identity & Credentials
| Field | Type | Coverage | Description |
|---|---|---|---|
name | string | π’ High (100%) | Full provider display name with medical credentials (e.g. "Dr. Juan Cueto, MD"). |
lastName | string | π’ High (100%) | Provider family/last name. |
npi | string | π’ High (100%) | 10-digit National Provider Identifier (primary de-duplication & NPPES join key). |
providerId | string | π’ High (100%) | Internal Healthgrades provider identifier (pwid). |
profileUrl | string | π’ High (100%) | Canonical provider profile URL on healthgrades.com. |
specialty | string | π’ High (100%) | Primary medical specialty name. |
specialtyDescription | string / null | π’ High (~98%) | Detailed specialty or sub-specialty title (e.g. "Cardiovascular Disease"). |
gender | string / null | π’ High (~99%) | Provider gender code ("M", "F", etc.). |
yearsSinceGraduation | integer / null | π’ High (~90%) | Years of medical practice since graduation. |
photoUrl | string / null | π’ High (~92%) | Direct URL to the provider's headshot photo. |
β Patient Ratings, Reviews & Badges
| Field | Type | Coverage | Description |
|---|---|---|---|
rating | number / null | π‘ Conditional (~70%) | Overall patient star rating (1.0β5.0) for providers who have received surveys. |
reviewCount | integer / null | π‘ Conditional (~70%) | Total number of patient rating surveys submitted. |
reviewCommentCount | integer / null | π‘ Conditional (~65%) | Number of written patient review comments. |
ratingPercent | integer / null | π‘ Conditional (~70%) | Overall patient satisfaction percentage (0β100). |
isHealthgradesChoice | boolean / null | π’ High (100%) | Whether the provider holds the Healthgrades Choice designation. |
isPatientFavorite | boolean / null | π’ High (100%) | Patient Favorite badge flag. |
isRecommendedProvider | boolean / null | π’ High (100%) | Recommended Provider badge flag. |
strengths | array<string> / null | π‘ Conditional (~40%) | Patient-reported strengths (e.g. ["Listens & answers questions", "Explains conditions well"]). |
π Office Phone, Address & Coordinates
| Field | Type | Coverage | Description |
|---|---|---|---|
phone | string / null | π’ High (~99%) | Primary practice office telephone number (e.g. "(305) 555-0137"). |
phones | array<string> | π’ High (~99%) | Array of all phone numbers listed for the primary display office. |
primaryOfficeName | string / null | π’ High (~90%) | Name of the medical group, clinic, or primary office. |
address | string | π’ High (100%) | Flattened primary street address. |
city | string | π’ High (100%) | Flattened primary office city. |
state | string | π’ High (100%) | 2-letter US state abbreviation (e.g. "FL", "NY", "CA"). |
zip | string | π’ High (100%) | 5-digit US ZIP code. |
latitude | number / null | π’ High (~99%) | Primary office GPS latitude. |
longitude | number / null | π’ High (~99%) | Primary office GPS longitude. |
addresses | array<object> | π’ High (100%) | Full list of practice locations (address1, address2, city, state, zip, cityState, officeCode, latitude, longitude). |
π₯ Access, Affiliations, Insurance & Bio
| Field | Type | Coverage | Description |
|---|---|---|---|
acceptsNewPatients | boolean | π’ High (100%) | true if the provider is currently accepting new patients. |
telehealthAvailable | boolean | π’ High (100%) | true if virtual/telehealth appointments are offered. |
isTelehealthOnly | boolean | π’ High (100%) | true if the provider practices exclusively via telehealth. |
affiliatedHospitalIds | array<string> | π’ High (~80%) | List of affiliated hospital identifiers. |
hasTopHospital | boolean | π’ High (100%) | true if affiliated with a recognized Top Hospital. |
hasSpecialtyExcellenceHospital | boolean | π’ High (100%) | Specialty Excellence hospital affiliation flag. |
hasTreatmentExcellenceHospital | boolean | π’ High (100%) | Treatment Excellence hospital affiliation flag. |
payorCount | integer / null | π’ High (100%) | Number of insurance plans/payors accepted by the provider. |
payorNames | array<string> / null | π‘ Conditional | Readable insurance carrier names when surfaced in the search payload. |
payors | array<string> / null | π‘ Conditional | Insurance carrier code array when surfaced in the search payload. |
aboutMe | string / null | π’ High (~95%) | Provider biography summary. |
carePhilosophy | string / null | π‘ Conditional (~20%) | Personal care philosophy statement when written by the doctor. |
searchSpecialty | string / null | π’ High (100%) | Specialty query that produced this record. |
searchLocation | string / null | π’ High (100%) | Location query that produced this record. |
scrapedAt | string | π’ High (100%) | ISO 8601 extraction timestamp. |
π Pagination & 1,000+ providers scale
The Healthgrades scraper is designed for seamless scaling from 40 doctors to 1,000+ nationwide provider directories:
- Unlocked
maxPagesPerSearch: 0(auto/unlimited): On page 1 of each specialty + city search, the actor reads Healthgrades'totalPagescount (~20 providers per page). WithmaxPagesPerSearch: 0(the default), it walks every available page in parallel batches (maxConcurrency) untilmaxItemsis reached or all pages for that query are exhausted. - Automatic multi-city & specialty expansion for 1,000+ runs: Because a single mid-sized city might only have 150β300 specialists in a given field, setting
maxItems >= 300(e.g.maxItems: 1000) withmaxPagesPerSearch: 0automatically queues additional major US metro areas (and additional specialties whenmaxItems >= 1000) behind your initial selection. That ensures a1,000+provider run never stops early due to single-city exhaustion. - Global NPI de-duplication: Doctors who practice across two neighboring cities (e.g. Miami and Fort Lauderdale) or hold dual specialties are de-duplicated by their 10-digit
npiso every row in your dataset is a unique provider.
βοΈ How to use
- Open the actor on Apify Console and select a Specialty (or enter a
specialtyCustom). - Select your US cities: Choose one or more metros in Locations (or type any
"City, ST"inlocationsCustom). - Set
maxItems: Keep40β100for a fast test run, or set1000+ (withmaxPagesPerSearch: 0) for a large directory export. - Keep US Residential proxy enabled: Healthgrades is geo-fenced to the United States; the default proxy setting handles this automatically.
- Click Start and export your dataset to JSON, CSV, Excel, or via the Apify API.
Calling via Python SDK
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"specialty": "Cardiology","locations": ["Miami, FL", "Orlando, FL", "Tampa, FL"],"maxItems": 300,"maxPagesPerSearch": 0,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US",},}run = client.actor("haketa/healthgrades-scraper").call(run_input=run_input)for doc in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{doc['name']} (NPI: {doc['npi']}) | β {doc['rating']} ({doc['reviewCount']} reviews) | π {doc['phone']} | {doc['city']}, {doc['state']}")
Calling via JavaScript / Node.js SDK
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/healthgrades-scraper').call({specialtyCustom: 'Sports Medicine',locations: ['Denver, CO', 'Seattle, WA'],maxItems: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Saved ${items.length} unique healthcare providers.`);
π‘ Pro tips for best results
- Always keep US Residential proxy enabled: Healthgrades uses AWS CloudFront geo-fencing (US-only) and blocks datacenter IP ranges with HTTP 403. The prefilled
RESIDENTIAL(US) configuration is required. - Join with NPPES / CMS data via
npi: Every provider record includes a 10-digitnpiat 100% fill rate, making it effortless to join patient ratings and office phone numbers with Medicare utilization or OpenPayments tables. - Use
specialtyCustomfor niche conditions or procedures: You are not limited to the 24 dropdown items β type"Sleep Medicine","Pediatric Dentistry","Interventional Cardiology", or"Mohs Surgery"intospecialtyCustom.
β οΈ Honest limitations
- US-only directory: Healthgrades covers healthcare providers practicing in the United States (
City, STor US ZIP codes). - Survey-dependent ratings: Roughly 70% of listed providers have patient star ratings (
ratingandreviewCount); newly licensed or non-clinical doctors with zero patient surveys haverating: null. - Search-level insurance summary:
payorCountis populated on 100% of records; detailedpayorNamesarrays are included whenever Healthgrades surfaces them in the search payload.
β FAQ
Is scraping Healthgrades legal? This actor extracts only publicly accessible directory information visible to unauthenticated visitors. It does not log in or access private patient data. You are responsible for complying with Healthgrades' Terms of Service and applicable laws.
Why is a US Residential proxy required? Healthgrades restricts access to visitors inside the United States and blocks datacenter IP addresses at the CDN edge. Using Apify's US Residential proxy (configured by default) ensures 200 OK responses.
How do I collect 1,000+ doctors in a single run?
Set maxItems: 1000 (or higher) and leave maxPagesPerSearch: 0 (auto/unlimited). The scraper will paginate through all pages of your chosen cities and automatically expand across major US metros and specialties if needed to deliver 1,000+ unique doctors.
Does this require visiting every doctor's individual profile page?
No! All 35+ fields β including npi, phone, latitude/longitude, rating, reviewCount, acceptsNewPatients, and affiliatedHospitalIds β are extracted directly from the structured search result pages (~20 doctors per request), making runs 20Γ faster and much cheaper on residential proxy bandwidth.
How is this different from the NPI Registry (NPPES)?
NPPES provides raw administrative registration data. Healthgrades adds patient star ratings, review counts, consumer awards, office phone numbers validated for patient scheduling, hospital quality badges, and telehealth flags β while still giving you the npi key to link both datasets together.
π Related healthcare & B2B lead generation scrapers
Combine this actor with our other healthcare, scientific, and B2B directory scrapers:
- ClinicalTrials.gov Scraper β Studies, Sponsors & Principal Investigator Contacts
- openFDA Scraper β Drug Events, Recalls, 510(k) Devices & Labels
- OpenAlex Scraper β Academic Works, Medical Researchers & Institutions
- FINRA BrokerCheck Scraper β Financial Advisors, Firms & Disclosures
- ProPublica Nonprofit 990 Scraper β Hospitals, Foundations & Executive Pay
- Dun & Bradstreet (D&B) Scraper β B2B Company Profiles & Principals
π Changelog
- v1.2 (2026-11) β Changed
maxPagesPerSearchdefault from20to0(auto/unlimited governed bymaxItems) and added automatic US metro & specialty expansion whenmaxItems >= 300, unlocking seamless 1,000+ provider extraction; tuned prefill (maxItems: 40) for fast< 30sverification runs; expanded README documentation. - v1.1 (2026-08) β Added trademark compliance disclaimer and descriptive title; extracted primary office
phone,phones[], and exactlatitude/longitudefromdisplayOfficewith 100% fill rate and zero extra profile requests. - v1.0 (2026-06) β Initial release with Next.js App Router structured search extraction, NPI de-duplication, and US Residential proxy rotation.
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Healthgrades Marketplace, LLC or any of its subsidiaries. "Healthgrades" and all related names and logos are trademarks of their respective owners and are used here only to describe the publicly available data source.