Healthgrades Scraper - Doctor Ratings, NPI & Review Monitor avatar

Healthgrades Scraper - Doctor Ratings, NPI & Review Monitor

Pricing

from $11.00 / 1,000 doctor returneds

Go to Apify Store
Healthgrades Scraper - Doctor Ratings, NPI & Review Monitor

Healthgrades Scraper - Doctor Ratings, NPI & Review Monitor

For reputation dashboards, practice-growth tools and provider directories: Healthgrades doctors by specialty and city or profile URL, with star rating, rating count, NPI checked in the US NPI Registry, address, phone, hospitals, insurance and latest reviews. Monitor returns only rating changes.

Pricing

from $11.00 / 1,000 doctor returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Get Healthgrades doctor profiles as clean JSON: star rating and number of ratings, specialty, NPI, practice name, address and phone, hospital affiliations, accepted insurance carriers and plans, education, languages and the latest patient reviews. Search by specialty and city or ZIP (Cardiology | New York, NY) or paste doctor profile URLs. Turn on Monitor and scheduled runs return only doctors whose rating or review count changed (with the previous values), so a reputation dashboard, a practice-growth tool or a provider directory does not re-download and pay for the same doctors every day.

  • Review change monitor. onlyChanges returns doctors whose Healthgrades star rating or number of ratings changed since the last run of the same watch, plus doctors that newly appear in a search, with previousRating, previousRatingCount, ratingChange and ratingCountChange. For searches, unchanged doctors are compared on the result page and their profiles are not even opened.
  • Checked against the official NPI Registry. Each doctor's NPI is looked up in the US government NPPES registry and the row gets what Healthgrades does not show: registry status (active or deactivated), the registered name and whether the surname matches, primary taxonomy and code, license number and license state, enumeration and last-update dates.
  • Full profile by default. Hospitals, insurance plans, education, board certifications, languages and up to 10 latest reviews (rating, date, author, text) come from each doctor's profile page.
  • Nothing guessed. A doctor with no ratings has ratingCount: 0 and rating: null, not a made-up 0-star rating. Values Healthgrades does not show are null.
  • No charge when Healthgrades cannot be read. Missing profiles, empty searches and pages that could not be read come back as free rows that say why.

Unofficial. Reads the public Healthgrades pages (healthgrades.com/physician/..., /dentist/..., /providers/... and /usearch), the same pages a person sees without logging in. Only public profile information; no login, no cookies, no API key.

What you get

One row per doctor. Example (production run on 2026-09-24, default input "Family Medicine | Austin, TX"; insurance lists and reviews shortened here: the row had 26 carriers and 3 reviews):

{
"status": "ok",
"changeType": null,
"healthgradesId": "2SGV3",
"name": "Adriana Guerra",
"displayName": "Dr. Adriana Guerra, MD",
"credentials": "MD",
"npi": "1104029735",
"primarySpecialty": "Family Medicine",
"specialties": [
"Family Medicine"
],
"rating": 4.7,
"ratingCount": 37,
"commentCount": 10,
"gender": "female",
"age": 50,
"yearsOfExperience": null,
"acceptsNewPatients": true,
"telehealth": true,
"isPatientFavorite": false,
"languages": [
"English",
"Spanish"
],
"practiceName": "Children's Medical Group PA",
"address": "711 W 38th St Ste G2",
"city": "Austin",
"state": "TX",
"zip": "78705",
"phone": "(512) 910-3800",
"fax": "(512) 824-0152",
"latitude": 30.30359,
"longitude": -97.74,
"officeCount": 1,
"hospitals": [
{
"name": "St. David's Medical Center",
"city": "Austin",
"state": "TX",
"healthgradesUrl": "https://www.healthgrades.com/hospital/st-davids-medical-center-222089"
}
],
"hospitalCount": 1,
"insuranceCarriers": [
"Cigna",
"Aetna",
"Curative",
"CareFirst Blue Cross Blue Shield"
],
"insurancePlans": [
{
"payor": "Cigna",
"plans": [
"Cigna"
]
},
{
"payor": "Aetna",
"plans": [
"Aetna"
]
}
],
"boardCertifications": [],
"education": [
{
"type": "Residency Hospital",
"name": "University of Illinois College of Medicine",
"year": 2007
}
],
"latestReviews": [
{
"rating": 5,
"date": "2024-11-10",
"author": "RDV",
"text": "Dr. Guerra is an excellent physician who really listens to patients and takes the time to consider all treatment options. She is brilliant and friendly. I highly recommend her."
}
],
"healthgradesVerifiedAt": "2026-09-15",
"photoUrl": "https://photos.healthgrades.com/img/prov/2/S/G/2SGV3_w120h160_v4100.jpg?name=Dr.%20Adriana%20Guerra%2C%20MD",
"profileUrl": "https://www.healthgrades.com/physician/dr-adriana-guerra-2sgv3",
"previousRating": null,
"previousRatingCount": null,
"ratingChange": null,
"ratingCountChange": null,
"previousCheckedAt": null,
"profileDetailsRead": true,
"npiRegistryChecked": true,
"npiRegistryFound": true,
"npiRegistryStatus": "active",
"npiRegistryName": "ADRIANA GUERRA",
"npiNameMatches": true,
"npiPrimaryTaxonomy": "Family Medicine",
"npiTaxonomyCode": "207Q00000X",
"npiLicenseNumber": "N3132",
"npiLicenseState": "TX",
"npiEnumerationDate": "2007-06-10",
"npiLastUpdated": "2013-11-26",
"target": "Family Medicine | Austin, TX",
"watchName": null,
"checkedAt": "2026-09-24T12:16:08.425Z"
}

Checked against the Healthgrades profile pages in a browser right after the run: 5 of 5 doctors had the same name, star rating and number of ratings ("4.7 Star Rating Based on 37 reviews"), NPI, phone, address and hospital on the page.

The NPI Registry columns are what Healthgrades does not have. Example from the same kind of run: Healthgrades lists Dr. Prateek Baghel under Cardiology, while the NPI Registry lists his primary taxonomy as "Student in an Organized Health Care Education/Training Program" (code 390200000X) with no license, which is the kind of mismatch the registry check is for.

ColumnMeaning
statusok for a doctor row. Other values are free rows that say why nothing was returned (below)
changeTypefirst-check (first run of this watch), new (not seen by this watch before), reviews-added, reviews-removed, rating-changed (same number of ratings, different average) or unchanged. null when neither onlyChanges nor watchName is set (a one-off run compares nothing and remembers nothing)
healthgradesId, name, displayName, credentialsHealthgrades' provider ID, the name, the name as shown ("Dr. Adriana Guerra, MD") and the credentials
npiThe NPI number shown on Healthgrades
primarySpecialty, specialtiesSpecialties as Healthgrades lists them
rating, ratingCount, commentCountStar rating (1-5), number of ratings, number of written comments (search results only)
previousRating, previousRatingCount, ratingChange, ratingCountChange, previousCheckedAtWhat this watch saw last time and the difference. Null on a first check or a new doctor
gender, age, yearsOfExperience, languagesAs shown on the profile or in the search result
acceptsNewPatients, telehealth, isPatientFavoriteHealthgrades' flags
practiceName, address, city, state, zip, phone, fax, latitude, longitude, officeCountPrimary office
hospitals, hospitalCountAffiliated hospitals (name, city, state, Healthgrades link)
insuranceCarriers, insurancePlansAccepted insurance carriers, and each carrier's plans (profile only)
boardCertifications, educationAs listed on the profile
latestReviewsNewest patient reviews on the profile (rating, date, author, text), up to maxReviewsPerDoctor
healthgradesVerifiedAt, photoUrl, profileUrlWhen Healthgrades last verified the profile, the photo (null when Healthgrades shows only a silhouette) and the profile link
profileDetailsReadtrue when the profile page was read; false for search-only rows (then profile-only columns are null, meaning "not read", not "none")
npiRegistryChecked, npiRegistryFound, npiRegistryStatus, npiRegistryName, npiNameMatchesResult of the NPPES lookup of this NPI
npiPrimaryTaxonomy, npiTaxonomyCode, npiLicenseNumber, npiLicenseState, npiEnumerationDate, npiLastUpdatedFrom the NPPES registry
target, watchName, checkedAtThe search or URL this row came from, your watch name, and the time of the check
noteFree rows only: why nothing (or not everything) was returned

Free rows (not charged)

statusWhen
no-resultsHealthgrades shows no doctors for this search
no-changeMonitor on: no doctor changed since the last run (one row per search, one for all profile URLs)
not-foundHealthgrades has no page at this URL (the doctor was removed or the URL is wrong)
bad-inputThe input could not be used (for example a search without a location)
unreadableThe page could not be read, even after asking again from other IP addresses. Nothing is remembered, so a later run returns it
blockedHealthgrades showed a check page. This Actor does not solve or bypass check pages; it stops
budget-reachedThe run hit the maximum total charge you set. Doctors not returned are not remembered, so the next monitor run returns them

Input

FieldTypeDefaultDescription
searcheslist of strings-`specialty, condition or name
startUrlslist of URLs-Doctor profile URLs (/physician/..., /dentist/..., /providers/...) or search URLs (/usearch?what=...&where=...). Up to 1,000 profiles
maxDoctorsPerSearchinteger 1-1,00020How many doctors to check per search, in Healthgrades' order (20 per page)
includeProfileDetailsbooleantrueFor search results, also read each returned doctor's profile (hospitals, insurance plans, education, reviews)
maxReviewsPerDoctorinteger 0-103Newest reviews to include per doctor
checkNpiRegistrybooleantrueLook up each NPI in the official NPPES NPI Registry
onlyChangesbooleanfalseMonitor: return only doctors whose rating or number of ratings changed, and new doctors
watchNamestring-Runs with the same watch name share what they have seen; give two schedules different names
resetMonitoringStatebooleanfalseForget what this watch remembered, so the run is a first check again

Examples

Cardiologists in Manhattan with full profiles:

{ "searches": ["Cardiology | New York, NY"], "maxDoctorsPerSearch": 40 }

Daily review monitor for your own doctors (schedule this; each run returns only the doctors whose rating or number of ratings changed):

{ "startUrls": ["https://www.healthgrades.com/physician/dr-adriana-guerra-2sgv3", "https://www.healthgrades.com/dentist/dr-angel-frazier-8n1gfif952"], "onlyChanges": true, "watchName": "my-practice" }

New and re-rated dermatologists in three cities, search page only (cheapest):

{ "searches": ["Dermatology | Chicago, IL", "Dermatology | Houston, TX", "Dermatology | 94103"], "maxDoctorsPerSearch": 100, "includeProfileDetails": false, "onlyChanges": true, "watchName": "derm-3-cities" }

How monitoring works

The Actor remembers, per watchName, each doctor's star rating and number of ratings the last time it saw them (in a named key-value store in your account). On the next run it compares: a doctor not seen before is new; more ratings is reviews-added, fewer is reviews-removed, the same number with a different average is rating-changed. With onlyChanges on, only changed and new doctors are returned and charged; a search with nothing to report comes back as one free no-change row. The run start fee is still charged on a run with no changes (it pays for the check). For searches, the comparison uses the rating shown on the search results page, so unchanged doctors' profile pages are not opened. Doctors that could not be read or returned are not remembered, so the next run returns them. Two runs with the same watch name at the same moment can overwrite each other's memory, so do not overlap schedules of one watch.

Pricing

Pay per event: a small start fee per run that returned at least one doctor (in monitor mode: per run that read and compared at least one doctor, even when nothing changed), plus a fee per doctor row returned. Free rows are never charged. A run where Healthgrades could not be read, a search with no doctors, or a URL with no profile charges nothing. If your maximum total charge for a run has no room for the start fee plus one doctor, the run requests nothing and charges nothing.

Limits

  • Ratings change over time; a row is what Healthgrades showed at checkedAt.
  • Search results follow Healthgrades' own order and its limit of 20 doctors per page. A search needs a location; without one Healthgrades answers for the place of the IP address.
  • Healthgrades shows up to 10 newest reviews on a profile page; older reviews are not read.
  • Healthgrades may show a check page to automated traffic; the Actor does not bypass it and returns a free blocked row instead.
  • Public profile information only. Do not use the output to contact patients or to verify credentials: Healthgrades itself says its data is not sufficient for credential verification.

Support

Found a doctor where the output differs from the Healthgrades page? Open an issue on the Issues tab with the run ID and it will be looked at.