# Vezeeta Doctors Scraper (`eabdelazim/vezeeta-doctors-scraper`) Actor

Scrape Vezeeta doctors in Egypt, Saudi Arabia, Jordan & Lebanon: names, specialties, fees, ratings, clinics, locations, insurance. Fast, no browser.

- **URL**: https://apify.com/eabdelazim/vezeeta-doctors-scraper.md
- **Developed by:** [Eslam Abdelazim](https://apify.com/eabdelazim) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 doctor 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

## Vezeeta Doctors Scraper

Extract doctor listings from **Vezeeta** — the largest doctor-booking platform in the Middle East — for **Egypt, Saudi Arabia, Jordan and Lebanon**. Get doctor names, specialties, consultation fees, ratings, review counts, waiting times, clinic addresses, GPS coordinates, insurance providers and profile links as clean JSON, CSV or Excel.

No browser, no login, no API key. The scraper reads Vezeeta's own search data directly, so a run of 1,000 doctors finishes in well under a minute.

### What can this Vezeeta scraper do?

- 🌍 **Four countries** — Egypt (18,000+ doctors), Saudi Arabia (2,900+), Jordan and Lebanon
- 🩺 **Every specialty** — dentistry, dermatology, pediatrics, psychiatry, cardiology and 40+ more, or all specialties at once
- 📍 **Country, city or neighbourhood level** — `egypt`, `cairo`, `nasr-city`, `al-riyadh`, `amman`, `beirut`…
- 💬 **English or Arabic output** — names, specialties and addresses in the language you choose; the English doctor name is always included
- 🏥 **Clinic visits, telehealth or home visits**
- 💰 **Fees as numbers** with the right currency (EGP, SAR, JOD, LBP), ready for analysis
- 🔗 **Paste Vezeeta URLs** if you prefer — the scraper reads country, specialty and location from the link
- 🚫 **No duplicates** — each doctor/clinic pair appears once per run
- 💵 **Pay per result** — you pay only for doctors actually saved, and the run stops at your spending limit

### What data does it extract?

| Field | Example |
|---|---|
| `doctorName` / `doctorNameEnglish` | `Hatem Ashmawy` |
| `title`, `gender` | `Doctor`, `male` |
| `specialty`, `specialtySlug`, `subSpecialties` | `Dentistry`, `dentistry`, `["Cosmetic Dentistry", "Endodontics"]` |
| `fees`, `currency` | `300`, `EGP` |
| `rating`, `ratingsCount` | `4.8`, `1240` |
| `waitingTimeMinutes` | `15` |
| `firstAvailableAppointment` | `2026-09-18T14:00:00` |
| `clinicName`, `facilityType` | `Smile Dental Center` |
| `city`, `area`, `address` | `Cairo`, `Nasr City`, `12 Abbas El Akkad St.` |
| `latitude`, `longitude` | `30.0561`, `31.3301` |
| `insuranceProviders`, `spokenLanguages`, `badges` | arrays |
| `acceptsOnlinePayment`, `requiresPrePayment`, `isSponsored`, `isNewDoctor` | booleans |
| `imageUrl`, `profileUrl` | links |
| `doctorId`, `clinicId`, `country`, `bookingType`, `language`, `scrapedAt` | metadata |

The scraper does **not** collect phone numbers, email addresses or any patient data. Vezeeta does not publish them in search results, and this Actor does not try to obtain them.

### Why scrape Vezeeta?

- **Healthcare market research** — count doctors per specialty and city, find under-served areas, track how supply changes over time
- **Pricing analysis** — compare consultation fees across neighbourhoods, specialties and countries
- **Health-tech and insurance** — map provider networks, see which insurers each clinic accepts
- **Location planning** — use GPS coordinates to find clinic density before opening a new branch or pharmacy
- **Academic research** — a structured dataset on private healthcare access in Egypt and the Gulf
- **Reputation monitoring** — follow ratings and review counts for a clinic group over time

### How to scrape Vezeeta doctors

1. Click **Try for free**.
2. Pick a **country**.
3. Type a **specialty** slug (for example `dentistry`) or leave it empty for all specialties.
4. Type a **city or area** slug (for example `cairo`) or leave it empty for the whole country.
5. Set **Maximum results** and click **Start**.
6. Download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.

#### Input example

```json
{
    "country": "egypt",
    "specialty": "dentistry",
    "location": "cairo",
    "bookingType": "physical",
    "language": "en",
    "maxResults": 500
}
```

#### Using Vezeeta URLs instead

Search on vezeeta.com, copy the address of the results page and paste it into **Vezeeta search URLs**:

```json
{
    "startUrls": [
        { "url": "https://www.vezeeta.com/en/doctor/dermatology/alexandria" },
        { "url": "https://saudi.vezeeta.com/ar/doctor/dentistry/al-riyadh" },
        { "url": "https://jordan.vezeeta.com/en/doctor/all-specialities/amman" }
    ],
    "maxResults": 1000
}
```

Country, specialty, location and language are read from each URL. `maxResults` applies to the whole run, across all URLs.

#### Output example

```json
{
    "doctorName": "Hana Agha",
    "doctorNameEnglish": "Hana Agha",
    "title": "Doctor",
    "gender": "female",
    "specialty": "Dentistry",
    "specialtySlug": "dentistry",
    "subSpecialties": ["Cosmetic Dentistry", "Pediatric Dentistry"],
    "fees": 30,
    "currency": "SAR",
    "rating": 4.9,
    "ratingsCount": 212,
    "waitingTimeMinutes": 10,
    "bookingType": "physical",
    "clinicName": "Example Dental Clinic",
    "city": "Riyadh",
    "area": "Al Olaya",
    "address": "Olaya St.",
    "latitude": 24.6953,
    "longitude": 46.6831,
    "country": "saudi-arabia",
    "insuranceProviders": ["Bupa Arabia", "Tawuniya"],
    "profileUrl": "https://saudi.vezeeta.com/en/dr/doctor-hana-agha-dentistry",
    "scrapedAt": "2026-09-17T10:00:00.000Z"
}
```

### Specialty and location slugs

Slugs are the words Vezeeta uses in its own URLs: `vezeeta.com/en/doctor/<specialty>/<location>`. **They differ between countries** — Riyadh is `al-riyadh`, not `riyadh`; pediatrics is `pediatrics-and-new-born` in Egypt but `pediatrics` in Saudi Arabia. If the run fails with "Vezeeta rejected the search", a slug is wrong. The safest way to get one is to run the search on Vezeeta and copy it from the address bar. Neighbourhood slugs (for example `nasr-city`, `maadi`) work too.

#### Egypt

**Cities:** cairo, giza, alexandria, north-coast, qalyubia, gharbia, menoufia, fayoum, el-dakahlia, el-sharqia, el-beheira, damietta, matrouh, assiut, el-ismailia, hurghada, sharm-el-sheikh, portsaid, suez, sohag, el-minia, kafr-el-sheikh, luxor, qena, aswan, beni-suef

**Specialties:** dermatology, dentistry, psychiatry, pediatrics-and-new-born, neurology, orthopedics, gynaecology-and-infertility, ear-nose-and-throat, cardiology, allergy-and-immunology, andrology-and-male-infertility, audiology, cardiology-and-thoracic-surgery, chest, diabetes-and-endocrinology, diagnostic-radiology, dietitian-and-nutrition, family-medicine, gastroenterology-and-endoscopy, general-practice, general-surgery, elders, hematology, hepatology, internal-medicine, interventional-radiology, ivf-and-infertility, laboratories, nephrology, neurosurgery, obesity-and-laparoscopic-surgery, oncology, oncology-surgery, ophthalmology, osteopathy, pain-management, pediatric-surgery, phoniatrics, physiotherapy-and-sport-injuries, plastic-surgery, rheumatology, spinal-surgery, urology, vascular-surgery, veterinary

#### Saudi Arabia

**Cities:** al-riyadh, jeddah, dammam, khobar, makkah, medina, taif, abha, tabuk, buraydah, unayzah, hail, najran, jazan, dhahran, al-ahsa, al-qatif, al-kharj, khamis-mushait, hafar-al-batin, muhayil, al-duwadimi, shaqra, wadi-ad-dawasir, anak, rabigh

**Specialties:** dermatology, dentistry, psychiatry, pediatrics, psychotherapy, neurology, orthopedics-and-sports-medicine, obstetrics-and-gynaecology, ear-nose-and-throat, allergy-and-immunology, andrology-and-male-infertility, audiology, cardiology-and-thoracic-surgery, cardiology-and-vascular-disease, chest-and-respiratory, diabetes-and-endocrinology, diagnostic-radiology, dietitian-and-nutrition, family-medicine, gastroenterology-and-endoscopy, general-practice, general-surgery, elders, hematology, hepatology, internal-medicine, ivf-and-female-infertility, laboratories, nephrology, neurosurgery, obesity-and-laparoscopic-surgery, oncology, oncology-surgery, ophthalmology, osteopathy, pain-management, pediatric-surgery, phoniatrics, physiotherapy, plastic-surgery, rheumatology, spinal-surgery, urology, vascular-surgery

#### Jordan

**Cities:** amman, zarqa, irbid

**Specialties:** same slugs as Egypt, plus `emergency-and-accidents-medicine`. Not available: diagnostic-radiology, interventional-radiology, elders, laboratories, oncology-surgery, osteopathy, veterinary.

#### Lebanon

**Cities:** beirut, bekaa, metn, keserwan, mount-lebanon, north, south

**Specialties:** dentistry, dermatology, plastic-surgery, pediatrics-and-new-born, gastroenterology-and-endoscopy, neurology, cardiology-and-vascular-disease, gynaecology-and-infertility, orthopedics, allergy-and-immunology, andrology-and-male-infertility, audiology, cardiology-and-thoracic-surgery, chest-and-respiratory, diabetes-and-endocrinology, dietitian-and-nutrition, ear-nose-and-throat, emergency-and-accidents-medicine, family-medicine, general-practice, general-surgery, elders, hematology, hepatology, internal-medicine, ivf-and-infertility, nephrology, obesity-and-laparoscopic-surgery, oncology, ophthalmology, pain-management, pediatric-surgery, phoniatrics, physiotherapy-and-sport-injuries, psychiatry, rheumatology, urology, vascular-surgery

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

This Actor uses **pay-per-result** pricing: you pay a small fixed price for each doctor saved to the dataset, and nothing for empty or failed searches. There is no monthly rental. The current price per 1,000 results is shown on the Pricing tab. Set **Maximum results**, or a maximum cost per run in the run options, and the scraper stops when the limit is reached.

Platform usage is tiny because no browser is used: the whole of Egypt (about 18,000 doctors) is around 370 requests.

### Tips

- Leave **specialty** empty to pull every specialty for a city in a single run.
- Run once per booking type if you need clinic, telehealth and home-visit listings; many doctors appear in more than one.
- A doctor working at two clinics appears twice, with different `clinicId`, fees and address. Use `doctorId` to group them.
- Schedule the Actor weekly or monthly to track fee and rating changes.
- A proxy is normally not needed. If requests start failing, turn on Apify Proxy in the input.

### FAQ

**Is it legal to scrape Vezeeta?**
The Actor collects only information that Vezeeta shows publicly to every visitor: professional listings of doctors and clinics. It does not collect phone numbers, emails or patient data, and it does not log in. Doctor names are still personal data under laws such as the GDPR, Egypt's Law 151/2020 and the Saudi PDPL, so make sure you have a legitimate reason to process them, and check Vezeeta's terms for your use case. If unsure, consult a lawyer.

**Can I get doctors' phone numbers?**
No. Vezeeta does not publish them, and this Actor will not add them.

**Does it scrape reviews text or full schedules?**
Not currently. It returns the rating, the number of ratings and the first available appointment. Open an issue if you need more.

**Does it cover the UAE, Kuwait or other countries?**
Vezeeta's doctor search currently covers Egypt, Saudi Arabia, Jordan and Lebanon, and so does this Actor.

**Why did I get fewer results than Vezeeta shows?**
Check **Maximum results** and your maximum cost per run first; the run stops at whichever is hit first. With several URLs, a doctor/clinic pair already saved from an earlier URL is skipped.

**Can I use it through an API?**
Yes. Use the Apify API, the `apify-client` package for JavaScript or Python, or integrations such as Make, Zapier, n8n and Google Sheets. See the API tab.

### Support

Found a bug, or Vezeeta changed something? Open an issue on the Issues tab. Issues are normally answered within one working day.

This Actor is not affiliated with or endorsed by Vezeeta.

# Actor input Schema

## `country` (type: `string`):

Vezeeta country site to search.

## `specialty` (type: `string`):

Specialty slug exactly as it appears in a Vezeeta URL, e.g. <code>dentistry</code>, <code>dermatology</code>, <code>pediatrics-and-new-born</code>. Leave empty to get every specialty. The README lists all slugs.

## `location` (type: `string`):

City or area slug as it appears in a Vezeeta URL, e.g. <code>cairo</code>, <code>alexandria</code>, <code>nasr-city</code>, <code>al-riyadh</code>. Slugs differ per country (see README). Leave empty to search the whole country.

## `bookingType` (type: `string`):

Clinic visits, video/phone consultations, or home visits.

## `language` (type: `string`):

Language of doctor names, specialties and addresses.

## `maxResults` (type: `integer`):

Stop after this many doctors. You are only charged for results actually saved.

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

Paste Vezeeta search URLs instead of using the fields above, e.g. <code>https://www.vezeeta.com/en/doctor/dentistry/cairo</code>. When set, country, specialty and location are read from each URL.

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

Usually not needed. Enable Apify Proxy only if requests start getting blocked.

## Actor input object example

```json
{
  "country": "egypt",
  "specialty": "dentistry",
  "location": "cairo",
  "bookingType": "physical",
  "language": "en",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `doctors` (type: `string`):

All scraped doctor listings.

# 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 = {
    "country": "egypt",
    "specialty": "dentistry",
    "location": "cairo",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("eabdelazim/vezeeta-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 = {
    "country": "egypt",
    "specialty": "dentistry",
    "location": "cairo",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("eabdelazim/vezeeta-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 '{
  "country": "egypt",
  "specialty": "dentistry",
  "location": "cairo",
  "maxResults": 50
}' |
apify call eabdelazim/vezeeta-doctors-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eabdelazim/vezeeta-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/fO8QLtsgn6Yt5loyS/builds/LqvbQuFbf5UJHG5mO/openapi.json
