Doctor Directory, Ratings & Reviews Scraper for Healthgrades avatar

Doctor Directory, Ratings & Reviews Scraper for Healthgrades

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Doctor Directory, Ratings & Reviews Scraper for Healthgrades

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

0

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Doctor Directory, Ratings & Reviews Scraper for Healthgrades 🩺 β€” NPI, Phone, Insurance & Affiliations

Apify Actor Healthcare

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

FeatureDetails
Data sourcePublic US physician & provider search pages on Healthgrades
Search inputs24 medical specialties dropdown + specialtyCustom free-text Β· 30 major US cities dropdown + locationsCustom + startUrls
Provider identity & NPIname, lastName, npi (10-digit National Provider Identifier), providerId, profileUrl, specialty, specialtyDescription, gender, yearsSinceGraduation, photoUrl
Patient reputation & badgesrating (1–5 stars), reviewCount, reviewCommentCount, ratingPercent, isHealthgradesChoice, isPatientFavorite, isRecommendedProvider, strengths
Contact & practice locationsphone, phones[], primaryOfficeName, address, city, state, zip, latitude, longitude, plus full addresses[] array
Insurance & hospital dataacceptsNewPatients, telehealthAvailable, payorCount, payorNames[], affiliatedHospitalIds[], hasTopHospital
Pagination & 1,000+ scalemaxPagesPerSearch: 0 (auto/unlimited governed by maxItems) + automatic multi-city & specialty expansion for 1,000+ unique providers
Proxy requirementApify 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, and rating.
  • πŸ§‘β€βš•οΈ Physician Recruiting & Staffing β€” identify experienced specialists (yearsSinceGraduation, specialtyDescription), check acceptsNewPatients and telehealthAvailable, and map practice locations.
  • πŸ”— NPI / NPPES Registry Enrichment β€” join npi (100% coverage) with rating, reviewCount, photoUrl, affiliatedHospitalIds, and payorCount to 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 in specialtyCustom, and combine with 30 major US metros (locations) or any custom "City, ST" list (locationsCustom).
  • βœ… Unlocked 1,000+ deep pagination (maxPagesPerSearch: 0) β€” by default, maxPagesPerSearch is 0 (auto/unlimited, governed by maxItems). The scraper reads totalPages on page 1, fetches subsequent pages (pageNum=2, 3, ...) with controlled concurrency, and automatically expands across major US cities and specialties when maxItems >= 300 so requesting 1,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 to providerUrl / 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 / VerticalHow they use Healthgrades provider data
Med-Tech, Pharma & SaaS SalesTarget private practices and specialty clinics by specialty, city, state, primaryOfficeName, and phone for outbound sales campaigns.
Healthcare Recruiters & StaffingFilter providers by specialty, yearsSinceGraduation, gender, and acceptsNewPatients across multi-state territories.
Health Systems & Strategy TeamsAnalyze competitor physician networks using affiliatedHospitalIds, hasTopHospital, and patient rating distributions.
Health Insurers & Payor AnalyticsAudit provider directory accuracy (address, phone, npi, payorCount, payorNames) across metro markets.
Healthcare Data & AI EngineersMatch 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.

FieldTypeDefault / PrefillDescription
specialtystring (select)Prefill: "Cardiology"Pick a medical specialty from the 24-option dropdown (Cardiology, Dermatology, Family Medicine, Pediatrics, OB-GYN, Orthopedic Surgery, Dentistry, etc.).
specialtyCustomstring""Optional. Type any specialty, sub-specialty, condition, or doctor name (e.g. "Sports Medicine", "Sleep Medicine", "Endodontist"). Overrides specialty when filled.
locationsarray (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.).
locationsCustomarray<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.
startUrlsarray[]Advanced. Paste Healthgrades /usearch?... URLs directly. Overrides specialty and locations.
maxItemsintegerDefault: 0 (Prefill: 40)Maximum total providers to collect across all searches (0 = unlimited). Set 1000+ for bulk multi-city extraction.
maxPagesPerSearchinteger0Maximum result pages to fetch per specialty + location (~20 providers/page). 0 = auto/unlimited governed by maxItems.
maxConcurrencyinteger3Parallel page requests per search (1–10).
proxyConfigurationobjectRESIDENTIAL (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

FieldTypeCoverageDescription
namestring🟒 High (100%)Full provider display name with medical credentials (e.g. "Dr. Juan Cueto, MD").
lastNamestring🟒 High (100%)Provider family/last name.
npistring🟒 High (100%)10-digit National Provider Identifier (primary de-duplication & NPPES join key).
providerIdstring🟒 High (100%)Internal Healthgrades provider identifier (pwid).
profileUrlstring🟒 High (100%)Canonical provider profile URL on healthgrades.com.
specialtystring🟒 High (100%)Primary medical specialty name.
specialtyDescriptionstring / null🟒 High (~98%)Detailed specialty or sub-specialty title (e.g. "Cardiovascular Disease").
genderstring / null🟒 High (~99%)Provider gender code ("M", "F", etc.).
yearsSinceGraduationinteger / null🟒 High (~90%)Years of medical practice since graduation.
photoUrlstring / null🟒 High (~92%)Direct URL to the provider's headshot photo.

⭐ Patient Ratings, Reviews & Badges

FieldTypeCoverageDescription
ratingnumber / null🟑 Conditional (~70%)Overall patient star rating (1.0–5.0) for providers who have received surveys.
reviewCountinteger / null🟑 Conditional (~70%)Total number of patient rating surveys submitted.
reviewCommentCountinteger / null🟑 Conditional (~65%)Number of written patient review comments.
ratingPercentinteger / null🟑 Conditional (~70%)Overall patient satisfaction percentage (0–100).
isHealthgradesChoiceboolean / null🟒 High (100%)Whether the provider holds the Healthgrades Choice designation.
isPatientFavoriteboolean / null🟒 High (100%)Patient Favorite badge flag.
isRecommendedProviderboolean / null🟒 High (100%)Recommended Provider badge flag.
strengthsarray<string> / null🟑 Conditional (~40%)Patient-reported strengths (e.g. ["Listens & answers questions", "Explains conditions well"]).

πŸ“ Office Phone, Address & Coordinates

FieldTypeCoverageDescription
phonestring / null🟒 High (~99%)Primary practice office telephone number (e.g. "(305) 555-0137").
phonesarray<string>🟒 High (~99%)Array of all phone numbers listed for the primary display office.
primaryOfficeNamestring / null🟒 High (~90%)Name of the medical group, clinic, or primary office.
addressstring🟒 High (100%)Flattened primary street address.
citystring🟒 High (100%)Flattened primary office city.
statestring🟒 High (100%)2-letter US state abbreviation (e.g. "FL", "NY", "CA").
zipstring🟒 High (100%)5-digit US ZIP code.
latitudenumber / null🟒 High (~99%)Primary office GPS latitude.
longitudenumber / null🟒 High (~99%)Primary office GPS longitude.
addressesarray<object>🟒 High (100%)Full list of practice locations (address1, address2, city, state, zip, cityState, officeCode, latitude, longitude).

πŸ₯ Access, Affiliations, Insurance & Bio

FieldTypeCoverageDescription
acceptsNewPatientsboolean🟒 High (100%)true if the provider is currently accepting new patients.
telehealthAvailableboolean🟒 High (100%)true if virtual/telehealth appointments are offered.
isTelehealthOnlyboolean🟒 High (100%)true if the provider practices exclusively via telehealth.
affiliatedHospitalIdsarray<string>🟒 High (~80%)List of affiliated hospital identifiers.
hasTopHospitalboolean🟒 High (100%)true if affiliated with a recognized Top Hospital.
hasSpecialtyExcellenceHospitalboolean🟒 High (100%)Specialty Excellence hospital affiliation flag.
hasTreatmentExcellenceHospitalboolean🟒 High (100%)Treatment Excellence hospital affiliation flag.
payorCountinteger / null🟒 High (100%)Number of insurance plans/payors accepted by the provider.
payorNamesarray<string> / null🟑 ConditionalReadable insurance carrier names when surfaced in the search payload.
payorsarray<string> / null🟑 ConditionalInsurance carrier code array when surfaced in the search payload.
aboutMestring / null🟒 High (~95%)Provider biography summary.
carePhilosophystring / null🟑 Conditional (~20%)Personal care philosophy statement when written by the doctor.
searchSpecialtystring / null🟒 High (100%)Specialty query that produced this record.
searchLocationstring / null🟒 High (100%)Location query that produced this record.
scrapedAtstring🟒 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:

  1. Unlocked maxPagesPerSearch: 0 (auto/unlimited): On page 1 of each specialty + city search, the actor reads Healthgrades' totalPages count (~20 providers per page). With maxPagesPerSearch: 0 (the default), it walks every available page in parallel batches (maxConcurrency) until maxItems is reached or all pages for that query are exhausted.
  2. 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) with maxPagesPerSearch: 0 automatically queues additional major US metro areas (and additional specialties when maxItems >= 1000) behind your initial selection. That ensures a 1,000+ provider run never stops early due to single-city exhaustion.
  3. 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 npi so every row in your dataset is a unique provider.

βš™οΈ How to use

  1. Open the actor on Apify Console and select a Specialty (or enter a specialtyCustom).
  2. Select your US cities: Choose one or more metros in Locations (or type any "City, ST" in locationsCustom).
  3. Set maxItems: Keep 40–100 for a fast test run, or set 1000+ (with maxPagesPerSearch: 0) for a large directory export.
  4. Keep US Residential proxy enabled: Healthgrades is geo-fenced to the United States; the default proxy setting handles this automatically.
  5. Click Start and export your dataset to JSON, CSV, Excel, or via the Apify API.

Calling via Python SDK

from apify_client import ApifyClient
client = 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-digit npi at 100% fill rate, making it effortless to join patient ratings and office phone numbers with Medicare utilization or OpenPayments tables.
  • Use specialtyCustom for niche conditions or procedures: You are not limited to the 24 dropdown items β€” type "Sleep Medicine", "Pediatric Dentistry", "Interventional Cardiology", or "Mohs Surgery" into specialtyCustom.

⚠️ Honest limitations

  • US-only directory: Healthgrades covers healthcare providers practicing in the United States (City, ST or US ZIP codes).
  • Survey-dependent ratings: Roughly 70% of listed providers have patient star ratings (rating and reviewCount); newly licensed or non-clinical doctors with zero patient surveys have rating: null.
  • Search-level insurance summary: payorCount is populated on 100% of records; detailed payorNames arrays 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.


Combine this actor with our other healthcare, scientific, and B2B directory scrapers:


πŸ“‹ Changelog

  • v1.2 (2026-11) β€” Changed maxPagesPerSearch default from 20 to 0 (auto/unlimited governed by maxItems) and added automatic US metro & specialty expansion when maxItems >= 300, unlocking seamless 1,000+ provider extraction; tuned prefill (maxItems: 40) for fast < 30s verification runs; expanded README documentation.
  • v1.1 (2026-08) β€” Added trademark compliance disclaimer and descriptive title; extracted primary office phone, phones[], and exact latitude/longitude from displayOffice with 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.

⌂ 捒网址