# Practo Doctors & Healthcare Clinics Lead Scraper (`growthscrapers/practo-doctors-scraper`) Actor

Extract doctors, clinics and hospitals from Practo India: name, specialty, degrees, experience, clinic address, consultation fee, patient recommendation %, reviews, timings, geo-coordinates and profile URL. Search by specialty + city or paste Practo listing URLs.

- **URL**: https://apify.com/growthscrapers/practo-doctors-scraper.md
- **Developed by:** [Ishant Dubey](https://apify.com/growthscrapers) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 results

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🩺 Practo Doctors & Healthcare Clinics Lead Scraper

**Extract doctors, clinics and hospitals from [Practo](https://www.practo.com) — India's largest doctor directory — in minutes.** Get the doctor's name, specialty, degrees & college, years of experience, clinic name, full address with PIN code, GPS coordinates, consultation fee, patient recommendation %, number of patient stories, clinic timings, services and the direct Practo profile link. Hospitals and clinics come with star rating, review count, doctor count and booking phone line.

Just type what you would search on Google — `dentist in bangalore`, `skin specialist in pune`, `hospitals in delhi` — and download a clean spreadsheet. No coding, no browser extensions, no copy-paste.

***

### ✨ Why this scraper?

- 🔎 **Plain-English search** — `<specialty> in <city>` or `<specialty> in <area>, <city>`. 60+ spelling aliases understood: *gynaecologist, ENT, child specialist, skin doctor, eye specialist, Gurugram, Bengaluru, Kochi, Vizag, Mysuru…*
- 🏥 **Doctors, clinics AND hospitals** — one actor for all three Practo listing types.
- 🎓 **Rich doctor profiles** — degrees with college and passing year, experience, fee, recommendation %, patient stories, other-clinic count, services.
- 📍 **Location-ready** — full address, locality, city, PIN code, latitude & longitude for territory mapping and route planning.
- 🧹 **Clean, deduplicated data** — one row per profile, tracking parameters stripped from URLs, numbers as real numbers.
- ⚡ **Fast & reliable** — reads Practo's server-rendered listing data (10 profiles per request) with automatic retries, rotating Apify Proxy and a DOM fallback parser.
- 🇮🇳 **All India** — set City to `All` to sweep the 10 biggest Practo cities, or list your own (`Delhi, Gurgaon, Noida`).

### 👥 Who uses it?

| Team | What they do with the data |
|---|---|
| 💊 **Pharma & medical-device marketing** | Build specialty-wise doctor target lists (e.g. every dermatologist in Mumbai with 10+ years of experience) for MR visits and sampling. |
| 🧪 **Diagnostic labs & pathology sales** | Map high-volume clinics by locality and PIN code for tie-ups and sample-collection routes. |
| 💻 **Clinic software / HealthTech SaaS** | Find independent clinics and multi-location practices to pitch EMR, appointment and billing tools. |
| 🧑‍⚕️ **Medical recruitment agencies** | Source doctors by specialty, degree and experience band. |
| 📊 **Market research & consultants** | Benchmark consultation fees, doctor density and patient ratings across cities and specialties. |
| 🏢 **Healthcare real estate & insurers** | Analyse hospital coverage, doctor counts and ratings by area. |

### 🚀 How to use

1. Click **Try for free**.
2. Add one or more **Search Queries**, e.g. `dentist in bangalore`, `pediatrician in vasant vihar, delhi`, `hospitals in pune`.
3. *(Optional)* paste **Direct Practo Listing URLs** — any Practo listing page, including filters you applied on the website.
4. Set **Maximum Results** and press **Start**.
5. Download results as **Excel, CSV, JSON, XML or HTML**, or pull them via API / Make / Zapier / n8n.

#### Input example

```json
{
    "searchQueries": ["dentist in bangalore", "dermatologist in delhi", "hospitals in pune"],
    "city": "All",
    "maxItems": 500,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

| Field | Description |
|---|---|
| `searchQueries` | `<specialty> in <city>` searches. Add `<area>, ` before the city to target a neighbourhood. `hospitals` / `clinics` return establishments. |
| `city` | Used when a query has no city, or when no queries are given. Comma-separate several cities. `All` = 10 biggest Practo cities. |
| `specialization` | Used only when Search Queries is empty (default `General` = General Physician). |
| `startUrls` | Practo listing URLs to scrape as-is. |
| `maxItems` | Total unique results across all queries (1 – 20,000). |
| `proxyConfiguration` | Apify Proxy settings (default works for most runs). |

**Supported specialties include:** General Physician, Dentist, Dermatologist, Pediatrician, Gynecologist, ENT, Orthopedist, Cardiologist, Ophthalmologist, Psychiatrist, Psychologist, Physiotherapist, Homoeopath, Ayurveda, Dietitian/Nutritionist, Urologist, Neurologist, Gastroenterologist, Pulmonologist, Oncologist, Endocrinologist, Nephrologist, Diabetologist, Trichologist, Cosmetologist, Sexologist — plus Hospitals and Clinics.

### 📦 Sample output

**Doctor**

```json
{
    "entityType": "doctor",
    "doctorName": "Dr. Jay P Patel",
    "specialty": "Dentist",
    "qualifications": "MDS - Periodontics, BDS",
    "qualificationDetails": [
        { "degree": "MDS - Periodontics", "college": "Sumandeep Vidyapith University, Vadodara", "year": 2013 },
        { "degree": "BDS", "college": "Bhavnagar University", "year": 2008 }
    ],
    "experience": 18,
    "clinicName": "Ora Dental Clinic",
    "clinicType": "Clinic",
    "otherClinicsCount": 0,
    "address": "Dandia Bazar, Opposite To Corporation Bank, Piramitha Rd., Vadodara, 390001",
    "locality": "Dandia Bazar",
    "city": "Vadodara",
    "pincode": "390001",
    "latitude": 22.29996,
    "longitude": 73.198199,
    "consultationFee": 300,
    "consultationFeeText": "₹300",
    "ratingPercentage": 99,
    "reviewCount": 529,
    "timings": "Mon, Tue, Wed, Thu, Fri, Sat, Sun: 09:00-21:00",
    "services": ["Acrylic Partial Denture", "Artificial Teeth", "BPS Dentures Fixing"],
    "clinicUrl": "https://www.practo.com/vadodara/Clinic/ora-dental-clinic-vadodara",
    "profileUrl": "https://www.practo.com/vadodara/doctor/jay-p-patel-dentist?practice_id=756165&specialization=Dentist",
    "practoId": "368138",
    "practiceId": "756165",
    "searchQuery": "dentist in vadodara",
    "scrapedAt": "2026-10-20T22:13:11.668Z"
}
```

**Hospital**

```json
{
    "entityType": "hospital",
    "clinicName": "Manipal Hospital Varthur Road (formerly Columbia Asia Hospital)",
    "specialty": "Multi-speciality",
    "address": "Survey No. 10P & 12P, Whitefield Main Rd, Varthur Kodi, Ramagondanahalli, Bangalore, 560066",
    "city": "Bangalore",
    "consultationFeeText": "₹0 - ₹1950",
    "rating": 4,
    "reviewCount": 2606,
    "phone": "+918045002241",
    "doctorsCount": 83,
    "timings": "MON - SUN 00:00AM - 11:55PM",
    "profileUrl": "https://www.practo.com/bangalore/hospital/columbia-asia-hospital1-whitefield"
}
```

### 📋 Output fields

| Field | Doctors | Clinics / Hospitals |
|---|:-:|:-:|
| Name (`doctorName` / `clinicName`) | ✅ | ✅ |
| Specialty | ✅ | ✅ (multi-speciality) |
| Degrees + college + year | ✅ | – |
| Experience (years) | ✅ | – |
| Clinic name, full address, locality, city, PIN | ✅ | ✅ |
| Latitude / longitude | ✅ | ✅ |
| Consultation fee | ✅ | ✅ (range) |
| Patient recommendation % | ✅ | – |
| Star rating | – | ✅ |
| Patient stories / reviews | ✅ | ✅ |
| Booking phone line | – | ✅ |
| Doctors count, year established | – | ✅ |
| Timings | ✅ | ✅ |
| Services | ✅ | – |
| Photo, clinic URL, Practo profile URL, Practo IDs | ✅ | ✅ |

### 💡 Tips

- **Go granular for big cities** — add locality searches next to the city search (`dentist in koramangala, bangalore`, `dentist in indiranagar, bangalore`) to focus on the neighbourhoods you sell into. Duplicates across searches are removed automatically.
- **Several cities at once** — leave the city out of the query and set City to `Delhi, Gurgaon, Noida, Ghaziabad, Faridabad`.
- **Exact Practo filters** — apply sort/filters on practo.com, copy the URL and paste it into Direct Practo Listing URLs.
- **Schedule it** — run weekly to track new doctors, fee changes and rating movement.

### ❓ FAQ

**Does it collect doctors' personal phone numbers or emails?**
No. Practo does not publish doctors' personal contact details. The scraper returns only publicly displayed profile information; for hospitals and clinics it returns the public Practo booking line when listed.

**How many results can I get?**
Up to 20,000 per run. Practo shows 10 profiles per page; the scraper walks every page of each listing automatically.

**Is it legal?**
The actor collects publicly available business-directory information only. You are responsible for using the data in line with applicable laws (including India's DPDP Act) and Practo's terms — for example, no unsolicited bulk messaging.

**Something not working?**
Open an issue on the **Issues** tab with your input and run ID and we will look into it.

***

🔑 **Keywords:** Practo scraper, Practo doctors scraper, Practo data extractor, doctor database India, doctor list India, doctors leads India, dentist list, dermatologist list, pediatrician list, gynecologist list, clinic leads India, hospital list India, healthcare leads, medical leads, pharma leads, MR doctor list, doctor directory scraper, healthcare data India, Practo API alternative, doctor consultation fee data, doctor ratings India.

# Actor input Schema

## `searchQueries` (type: `array`):

Plain-English searches in the format '<specialty> in <city>' (e.g. 'dentist in bangalore', 'skin specialist in pune', 'hospitals in delhi', 'clinics in mumbai'). Target a neighbourhood with a comma: 'dentist in vasant vihar, delhi'. Common aliases are understood (gynaecologist, ENT, child specialist, Gurugram, Bengaluru, Kochi...). If a query has no city, the 'City' field below is used.

## `city` (type: `string`):

City used when a search query has no 'in <city>' part, or when Search Queries is empty. Separate several cities with commas (e.g. 'Delhi, Gurgaon, Noida'). 'All' scans India's 10 biggest Practo cities (Delhi, Mumbai, Bangalore, Hyderabad, Chennai, Pune, Kolkata, Gurgaon, Noida, Ahmedabad).

## `specialization` (type: `string`):

Used only when Search Queries is empty. Examples: General (general physician), Dentist, Dermatologist, Pediatrician, Gynecologist, ENT, Orthopedist, Cardiologist, Ophthalmologist, Psychiatrist, Physiotherapist, Homoeopath, Ayurveda, Hospitals, Clinics.

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

Optional Practo listing pages to scrape as-is, including any filters you applied on Practo (e.g. 'https://www.practo.com/delhi/dentist/vasant-vihar', 'https://www.practo.com/bangalore/hospitals'). Works for doctor, clinic and hospital listings.

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

Maximum number of unique doctors / clinics / hospitals to extract across all queries.

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

Apify Proxy keeps the scraper unblocked. The default (Apify Proxy, automatic) works for most runs.

## Actor input object example

```json
{
  "searchQueries": [
    "dentist in bangalore",
    "dermatologist in delhi",
    "pediatrician in mumbai"
  ],
  "city": "All",
  "specialization": "General",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

The main dataset with scraped Practo doctors, clinics and hospitals.

# 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 = {
    "searchQueries": [
        "dentist in bangalore",
        "dermatologist in delhi",
        "pediatrician in mumbai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("growthscrapers/practo-doctors-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 = { "searchQueries": [
        "dentist in bangalore",
        "dermatologist in delhi",
        "pediatrician in mumbai",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("growthscrapers/practo-doctors-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 '{
  "searchQueries": [
    "dentist in bangalore",
    "dermatologist in delhi",
    "pediatrician in mumbai"
  ]
}' |
apify call growthscrapers/practo-doctors-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,growthscrapers/practo-doctors-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/y5iTu5qpxf9KKNx6i/builds/lKNdiAiefE2aoNSVm/openapi.json
