# Pakistan Doctor & Clinic Database — oladoc.com Scraper (`jungle_synthesizer/oladoc-pakistan-doctor-clinic-directory-scraper`) Actor

Scrapes every doctor profile on oladoc.com, Pakistan's largest doctor-booking platform — name, specialty, credentials, and a fee for every practice location, plus patient reviews and ratings.

- **URL**: https://apify.com/jungle\_synthesizer/oladoc-pakistan-doctor-clinic-directory-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Pakistan Doctor & Clinic Database — oladoc.com Scraper

Scrapes every doctor profile on [oladoc.com](https://oladoc.com), Pakistan's largest doctor-booking platform. Returns name, specialty, credentials, consultation fees, and patient reviews for 27,000+ physicians across every Pakistani city.

***

### Pakistan Doctor & Clinic Database Scraper Features

- Covers the full directory — every city, every specialty, not just what a search box happens to return
- Returns a **fee per practice location**, not one averaged number. A doctor who sees patients at three hospitals shows up with three fees, because that's how oladoc actually prices them
- Extracts qualifications (MBBS, FCPS, MRCP, and the rest of Pakistan's credential alphabet), years of experience, and PMDC verification status
- Pulls visible patient reviews with the reviewer's recommendation and the review text
- Flags video-consultation availability and its fee separately from in-person pricing
- Captures the services a doctor offers and the conditions they treat, where the profile publishes them

***

### Who Uses Pakistan Doctor Data?

- **Pharma and medical-device field teams** — build a territory list of specialists by city and specialty, since Pakistan has no public physician registry to pull from instead
- **Health insurance and telehealth companies** — size specialist supply by city before deciding where to launch or expand
- **Hospital groups and clinic networks** — benchmark consultation fees against competitors in the same city
- **Market research firms** — track Pakistan's private healthcare sector by specialty and region

***

### How Pakistan Doctor & Clinic Database Scraper Works

1. Point it at the full doctor directory, or cap it with `maxItems` for a quick sample.
2. The actor visits each profile and pulls identity, credentials, and every practice location's fee.
3. Visible patient reviews and ratings come along for the ride, where the profile has any.
4. You get one JSON record per doctor. Stop it early and resume later — you're not charged twice for the same doctor.

***

### Input

```json
{
  "maxItems": 10
}
```

| Field      | Type    | Default | Description |
|------------|---------|---------|-------------|
| `maxItems` | integer | 10      | Maximum number of doctor profiles to scrape. Set to `0` to crawl the full directory (27,000+ profiles) across resumed runs. |

#### Resuming a large crawl

Every run emits a `resumeCursor` in its Output. If a large crawl stops before it finishes — because it hit `maxItems`, your spend cap (`maxTotalChargeUsd`), or was aborted — start a new run with **the same input** plus that `resumeCursor` to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.

- You are **not re-charged** for records the earlier run already delivered.
- Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its `resumeCursor` is no longer valid.
- `resumeCursor` is opaque — supply it unmodified.

***

### Pakistan Doctor & Clinic Database Scraper Output Fields

```json
{
  "profile_url": "https://oladoc.com/pakistan/lahore/dr/pulmonologist/taha-waqas/577065",
  "doctor_id": "577065",
  "full_name": "Assist Prof. Dr. Taha Waqas",
  "specialty": "Pulmonologist",
  "specialty_slug": "pulmonologist",
  "secondary_specialties": ["Critical Care Physician", "Sleep Medicine Doctor"],
  "qualifications": ["M.B.B.S", "F.C.P.S (Pulmonology)"],
  "experience_years": 14,
  "city": "Lahore",
  "locations": [
    "Online Video Consultation | Speak to doctor through a video call | Rs. 2500 | Available Mon, Oct 05",
    "Shalamar Hospital | Shalimar Link Road, Lahore | Rs. 3000 | Available tomorrow"
  ],
  "consultation_fee": 3000,
  "fee_currency": "PKR",
  "online_consultation_fee": 2500,
  "video_consultation_available": true,
  "satisfaction_percent": 97,
  "review_count": 707,
  "wait_time_minutes": 15,
  "patient_reviews": ["Anwar | I recommend the doctor | \"Very humble and kind.\" | 1 year ago"],
  "services_offered": ["Blood Gas Analysis", "General Pulmonary & Critical Care"],
  "conditions_treated": [],
  "profile_photo_url": "https://d1t78adged64l7.cloudfront.net/images/profile-pics/doctors/...",
  "next_available_slot": "Available Mon, Oct 05",
  "is_verified": true,
  "scraped_at": "2026-10-01T15:02:04.846Z"
}
```

| Field                          | Type    | Description |
|--------------------------------|---------|-------------|
| `profile_url`                  | string  | Canonical oladoc.com profile URL for this doctor |
| `doctor_id`                    | string  | Trailing numeric id from the profile URL |
| `full_name`                    | string  | Doctor's full name as published, including title |
| `specialty`                    | string  | Primary medical specialty |
| `specialty_slug`               | string  | URL slug for the primary specialty |
| `secondary_specialties`        | array   | Additional specialties listed alongside the primary one |
| `qualifications`               | array   | Published credential strings (MBBS, FCPS, MRCP, MCPS, ...) |
| `experience_years`             | integer | Years of experience as published on the profile |
| `city`                         | string  | City where the doctor practises |
| `locations`                    | array   | One entry per practice location — name, address, fee, and next available slot. A doctor commonly practises at several locations, each at a different fee |
| `consultation_fee`             | number  | In-person consultation fee at the doctor's primary physical location, in PKR. Null for video-only doctors |
| `fee_currency`                 | string  | ISO currency code for the fee fields (always PKR) |
| `online_consultation_fee`      | number  | Video consultation fee in PKR, where offered |
| `video_consultation_available` | boolean | Whether the doctor offers a video consultation location |
| `satisfaction_percent`         | number  | Patient satisfaction score (0-100), where the doctor has reviews |
| `review_count`                 | integer | Number of patient reviews counted toward `satisfaction_percent` |
| `wait_time_minutes`            | integer | Published typical wait time in minutes, where shown |
| `patient_reviews`              | array   | One entry per visible patient review — reviewer, recommendation, text, and relative date |
| `services_offered`             | array   | Services the doctor offers, as published on the profile |
| `conditions_treated`           | array   | Conditions the doctor treats, where the specialty publishes a distinct list |
| `profile_photo_url`            | string  | Doctor's profile photo URL, where published |
| `next_available_slot`          | string  | Next available appointment slot for the doctor's first listed location |
| `is_verified`                  | boolean | Whether the profile carries oladoc's "PMDC Verified" badge |
| `scraped_at`                   | string  | ISO-8601 timestamp when the record was scraped |

***

### FAQ

#### How do I scrape oladoc.com doctor profiles?

Run the actor with a `maxItems` value, or leave it at `0` to work through the full directory. No account, login, or API key for oladoc.com required.

#### What data can I get from oladoc.com?

Pakistan Doctor & Clinic Database Scraper returns identity, specialty, credentials, experience, and a fee for every practice location a doctor lists — plus patient reviews, satisfaction scores, and verification status where oladoc publishes them.

#### Does this cover doctors across all of Pakistan, or just one city?

All of them. The actor works through oladoc's complete doctor directory — every city, every specialty — rather than one search result at a time.

#### Why do some doctors show multiple fees?

Because they practise at multiple hospitals or clinics, and oladoc prices each location separately. The `locations` array carries one fee per address instead of flattening it to a single number.

#### How much does it cost to run?

Pakistan Doctor & Clinic Database Scraper is billed per record returned, not per minute of compute — so a 50-profile sample costs a fraction of a full-directory run.

***

### Need More Features?

Need a different field, a filter, or another Pakistani healthcare directory covered? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use Pakistan Doctor & Clinic Database Scraper?

- **Complete coverage** — pulls from oladoc's full directory, so you get the whole corpus, not whatever a search query happens to surface
- **Fee per location, not a guess** — most directories flatten a doctor's pricing to one number. This one keeps the fee tied to the hospital or clinic it belongs to, which is the only way the number is actually useful
- **No public alternative** — Pakistan has no national physician registry, so this is the closest thing to one

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

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

Maximum number of doctor profiles to scrape. Leave at 0 to crawl the full sitemap (27,000+ profiles) across resumed runs.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/oladoc-pakistan-doctor-clinic-directory-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/oladoc-pakistan-doctor-clinic-directory-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10
}' |
apify call jungle_synthesizer/oladoc-pakistan-doctor-clinic-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/oladoc-pakistan-doctor-clinic-directory-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/dS3xCsUvaxtz4Q6pj/builds/FvTMMydCV67mDkYcl/openapi.json
