Healthgrades Provider Scraper avatar

Healthgrades Provider Scraper

Pricing

$1.50 / 1,000 provider-scrapeds

Go to Apify Store
Healthgrades Provider Scraper

Healthgrades Provider Scraper

Collect public Healthgrades provider listings and profile details with filters and bounded enrichment.

Pricing

$1.50 / 1,000 provider-scrapeds

Rating

0.0

(0)

Developer

Sam Towers

Sam Towers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Healthgrades scraper

Collect public Healthgrades provider listings and profile details without a browser or login. Results are written to the default dataset and can be filtered by rating, reviews, sponsorship, and phone availability.

Functional input

Supply either startUrls (Healthgrades directory/search URLs) or a grid of non-empty specialties and locations. Main options are maxItems (default 200), maxPagesPerSearch (10), includeProviderDetails (true), excludeSponsored, minRating, minReviewCount, requirePhone, maxConcurrency (maximum 5), requestDelaySeconds, maxRetries, and optional proxyUrl.

{"specialties":["Cardiology"],"locations":["Miami, FL"],"maxItems":20,"requirePhone":true}

Functional output and charging

The CLI emits one JSON object per accepted, deduplicated provider. Records include provider/profile identity, listing rating and review data, enrichment fields where available, detailFetched, search/page/source/time provenance, and billableEvent: "provider-scraped". The successful row-emission callback is the only billable boundary: duplicates and rows removed by filters are never emitted or counted. If a later request fails, previously emitted rows remain valid billable deliveries.

$python -m healthgrades_scraper.cli input.json > providers.jsonl

On Apify, configure the same JSON fields in the Actor input. Each delivered unique provider row is charged as one provider-scraped event at the configured pay-per-event price. Duplicate, filtered, or undelivered rows are not charged.

Profile enrichment uses JSON-LD plus DOM fields, paces requests, retries refused/transient requests on a fresh connection, and marks an unsuccessfully enriched row with detailFetched: false. Use requirePhone when incomplete or phone-free rows must be excluded.

The source is public Healthgrades HTML and may rate-limit high request volume. Keep concurrency and request rates bounded; use a proxy only when direct requests are blocked. The scraper does not require login and does not guarantee that every profile exposes every detail.

Development

$python -m pytest -q