# Healthgrades Provider Search Scraper (`cirkit/healthgrades-provider-search-scraper`) Actor

Search Healthgrades for US doctors by specialty and location and get the full result set back with the practice phone number, GPS coordinates and accepted insurance plans filled in - the fields competing Healthgrades actors leave null.

- **URL**: https://apify.com/cirkit/healthgrades-provider-search-scraper.md
- **Developed by:** [Crikit](https://apify.com/cirkit) (community)
- **Categories:** Lead generation, Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 1,000 provider returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Healthgrades Provider Search Scraper

**Scrape Healthgrades doctor profiles** by specialty and location across the US. This **Healthgrades scraper** returns the full result set with **practice phone number, GPS coordinates, and accepted insurance plans populated** — the three fields competing Healthgrades Actors typically leave null.

No Healthgrades API key, no login, and no headless browser. Results land in a structured dataset you can export to JSON, CSV, Excel, or XML, or pull straight from the Apify API.

### What is Healthgrades Provider Search Scraper?

Healthgrades Provider Search Scraper is an [Apify Actor](https://apify.com/actors) that extracts US doctor and provider profiles from [Healthgrades](https://www.healthgrades.com) and returns them as clean, structured records. Insurance acceptance is the field that makes provider data commercially useful. A provider list without it cannot answer the question patients and referral systems actually ask.

### What data can this Healthgrades scraper extract?

Every run writes one row per provider. Each row carries the provider's name, specialty, credentials, practice address with coordinates, phone number, accepted insurance plans, ratings, and review count.

### How to scrape Healthgrades provider listings

1. Open [Healthgrades Provider Search Scraper](https://apify.com/cirkit/healthgrades-provider-search-scraper) and click **Try for free**.
2. Set the specialty and location for the provider search.
3. Add any name filter if you are looking for specific providers.
4. Set the result cap to bound the run.
5. Export the dataset or read it from the Apify API.
6. Click **Start** and watch rows appear live in the **Output** tab.
7. Export the dataset as JSON, CSV, Excel, or XML — or fetch it from the [Apify API](https://docs.apify.com/api/v2) once the run finishes.

### Healthgrades Provider Search Scraper input options

| Input | Type | What it does | Default |
| --- | --- | --- | --- |
| `specialties` | array | What to search for, exactly as you would type it into Healthgrades: a specialty ("Cardiology", "Dermatology"), a... | `["Cardiology"]` |
| `locations` | array | Where to search. A city and state ("Austin, TX"), a ZIP code ("78701") or a state name all work. Healthgrades search... | `["Austin, TX"]` |
| `startUrls` | array | Paste Healthgrades /usearch result URLs straight out of your browser. Any filters already in the URL are kept as the... |  |
| `maxItems` | integer | Hard cap on how many providers this run returns, and therefore on what it costs. Duplicates are dropped before this... | `50` |
| `maxItemsPerSearch` | integer | Optional per-search cap, useful when you want an even spread across many cities instead of letting the first city... |  |
| `sort` | string | How Healthgrades orders the result set before this Actor reads it. | `"bestmatch"` |
| `acceptingNewPatientsOnly` | boolean | Keep only providers Healthgrades marks as accepting new patients. Filtered rows are never charged. | `false` |
| `minRating` | integer | Keep only providers whose patient rating is at least this many stars out of 5. Providers with no ratings yet are... |  |
| `includeBiography` | boolean | Include the provider's biography and care philosophy. These come free with the search page - no extra request and no... | `true` |

Proxy is configured through the standard `proxyConfiguration` object; the defaults shipped with this Actor are already tuned for the target site.

### Example output

```json
{
  "specialties": ["Cardiology", "Dermatology"],
  "locations": ["Austin, TX", "78701"],
  "maxItems": 100
}
```

### How much does it cost to scrape Healthgrades?

This Actor runs on **pay per result** pricing: **$0.0008 per provider** ($0.8 per 1,000).

| Results | Approximate cost |
| --- | --- |
| 1,000 | $0.80 |
| 10,000 | $8.00 |
| 100,000 | $80.00 |

You pay for rows you actually receive, so a search that returns nothing costs nothing beyond the start fee. Every Apify account includes free monthly usage credit, so you can trial Healthgrades Provider Search Scraper at no cost.

### What can you build with Healthgrades data?

#### Build referral networks

Specialty plus insurance acceptance plus location is exactly what a referral coordinator needs to match a patient to a provider who will actually see them.

#### Target healthcare sales and marketing

Practice phone numbers and locations support medical device, pharma, and health-IT outreach.

#### Analyse provider density and access

GPS coordinates across a specialty reveal care deserts and over-served areas.

#### Research insurance network coverage

Which plans providers accept, mapped geographically, shows where a payer's network is genuinely thin.

#### Enrich a healthcare CRM

Verified practice contact details backfill records that are otherwise stale or incomplete.

### Healthgrades scraping tips and limits

- Physicians are identifiable individuals and healthcare context makes their data sensitive. HIPAA does not cover public provider directories, but privacy law and anti-spam rules still apply to outreach.
- Insurance acceptance changes frequently. Re-pull rather than relying on a months-old dataset.
- Coordinates come through populated, so provider density analysis needs no geocoding step.
- Search by specialty and metro rather than by state for the most complete result sets.

### Integrations and automation

Run Healthgrades Provider Search Scraper on a [schedule](https://docs.apify.com/platform/schedules) to keep a Healthgrades dataset fresh, or trigger it from your own stack through the [Apify API](https://docs.apify.com/api/v2) and the official [JavaScript](https://docs.apify.com/sdk/js) and [Python](https://docs.apify.com/sdk/python) clients. Native [integrations](https://docs.apify.com/platform/integrations) push results into Google Sheets, Slack, Airtable, Zapier, Make, GitHub, or any webhook endpoint. The Actor also works as an [MCP](https://docs.apify.com/platform/integrations/mcp) tool, so an AI agent can call it directly.

### Related scrapers

| Actor | What it does |
| --- | --- |
| [Google Maps Business Scraper](https://apify.com/cirkit/google-maps-business-scraper) | Practice locations as local businesses with hours. |
| [Yelp Business Scraper](https://apify.com/cirkit/yelp-business-scraper) | Patient reviews and practice attributes. |
| [Yellow Pages Business Scraper](https://apify.com/cirkit/yellow-pages-business-scraper) | Additional practice contact data. |
| [ClinicalTrials.gov Study Search Scraper](https://apify.com/cirkit/clinicaltrials-study-search-scraper) | Trial sites and investigators. |

### Frequently asked questions

#### Does it return accepted insurance plans?

Yes, and this is the main differentiator. Accepted plans come back populated rather than null, which is what makes the data usable for referral and network analysis.

#### Are practice phone numbers included?

Yes. Practice phone and GPS coordinates are populated on the rows, which competing Healthgrades Actors commonly leave empty.

#### Do I need a Healthgrades API key?

No. Healthgrades Provider Search Scraper reads publicly available Healthgrades pages and endpoints directly, so there is no key to obtain, no OAuth app to register, and no account to connect.

#### Can I export Healthgrades data to CSV, Excel, or Google Sheets?

Yes. Every run stores results in an Apify dataset that exports to JSON, JSONL, CSV, Excel, XML, or HTML with one click, and the Google Sheets integration writes rows straight into a spreadsheet.

#### Can I run Healthgrades Provider Search Scraper on a schedule?

Yes. Apify schedules run the Actor hourly, daily, weekly, or on any cron expression, and webhooks can notify your systems the moment a run finishes.

#### Is it legal to scrape Healthgrades?

Scraping publicly available data is broadly lawful in the US and EU, but the answer depends on what you collect and how you use it. This Actor is built to gather public provider directory information Healthgrades publishes publicly — these are identifiable professionals, so handle the data under privacy and anti-spam law. Personal data carries extra obligations under GDPR and CCPA. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) and take your own legal advice for your use case.

### Support and feedback

Found a bug, a missing field, or a Healthgrades page shape this Actor does not handle yet? Open an issue from the **Issues** tab on the Actor page. Feature requests and custom-scraper enquiries are welcome there too.

# Actor input Schema

## `specialties` (type: `array`):

What to search for, exactly as you would type it into Healthgrades: a specialty ("Cardiology", "Dermatology"), a condition ("Fibromyalgia") or a procedure ("Colonoscopy"). Every specialty is searched in every location below, so 3 specialties x 4 cities is 12 searches.

## `locations` (type: `array`):

Where to search. A city and state ("Austin, TX"), a ZIP code ("78701") or a state name all work. Healthgrades search is always location-scoped, so at least one location is required whenever you set a specialty.

## `startUrls` (type: `array`):

Paste Healthgrades /usearch result URLs straight out of your browser. Any filters already in the URL are kept as the Actor pages through the results, so this is the way to use filters this input schema does not expose.

## `maxItems` (type: `integer`):

Hard cap on how many providers this run returns, and therefore on what it costs. Duplicates are dropped before this cap applies. Pages are only fetched while there is still room under the cap, so a low number here genuinely costs less.

## `maxItemsPerSearch` (type: `integer`):

Optional per-search cap, useful when you want an even spread across many cities instead of letting the first city consume the whole budget. Leave empty for no per-search limit.

## `sort` (type: `string`):

How Healthgrades orders the result set before this Actor reads it.

## `acceptingNewPatientsOnly` (type: `boolean`):

Keep only providers Healthgrades marks as accepting new patients. Filtered rows are never charged.

## `minRating` (type: `integer`):

Keep only providers whose patient rating is at least this many stars out of 5. Providers with no ratings yet are excluded when this is set. Filtered rows are never charged.

## `includeBiography` (type: `boolean`):

Include the provider's biography and care philosophy. These come free with the search page - no extra request and no extra charge - but they are long, so switch this off for a tidier CSV.

## `proxyConfiguration` (type: `object`):

Healthgrades serves this data to datacenter proxies, which is what the default uses. Switch to residential only if you see a run get blocked.

## Actor input object example

```json
{
  "specialties": [
    "Cardiology"
  ],
  "locations": [
    "Austin, TX"
  ],
  "startUrls": [],
  "maxItems": 50,
  "sort": "bestmatch",
  "acceptingNewPatientsOnly": false,
  "includeBiography": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `providers` (type: `string`):

Every healthcare provider matched by this run, one row each, deduplicated by NPI.

## `providersCsv` (type: `string`):

The same providers as a downloadable CSV file.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "specialties": [
        "Cardiology"
    ],
    "locations": [
        "Austin, TX"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("cirkit/healthgrades-provider-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "specialties": ["Cardiology"],
    "locations": ["Austin, TX"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("cirkit/healthgrades-provider-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "specialties": [
    "Cardiology"
  ],
  "locations": [
    "Austin, TX"
  ],
  "maxItems": 50
}' |
apify call cirkit/healthgrades-provider-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cirkit/healthgrades-provider-search-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1IXRuDtT1Ic0jMNZ8/builds/SfeOf1UH3oDxGaXBV/openapi.json
