# WhatClinic Global Clinic Treatment Price Scraper (`jungle_synthesizer/whatclinic-global-clinic-treatment-price-scraper`) Actor

Extracts clinic-level treatment prices from WhatClinic, the global medical-tourism aggregator covering 100+ countries. One row per clinic-treatment-price, plus service flags (languages spoken, international-patient handling, airport pickup, accommodation) lead-only clinic scrapes don't carry.

- **URL**: https://apify.com/jungle\_synthesizer/whatclinic-global-clinic-treatment-price-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

## WhatClinic Global Clinic Treatment Price Scraper

Clinic-level treatment prices from WhatClinic, the global medical-tourism directory covering
100+ countries. Every run returns **one row per clinic-treatment-price** — not one row per
clinic — so the output is directly usable as a price benchmark rather than a plain contact list.

### What you get

Each record is a single priced treatment offered by a single clinic:

- **Clinic identity & location** — name, brochure page URL, country, city, full address,
  latitude/longitude, phone (when the clinic publishes it directly), treatment category
  (dentists, cosmetic-plastic-surgery, fertility, hair-loss, eye-care, ...).
- **The price** — `treatment_name`, `price_from`, `price_to`, and the `currency` as WhatClinic
  displays it for that clinic. Many clinics publish a price range rather than a single figure;
  some publish no exact price at all ("free consultation" or "price on request") — those rows
  carry `null` price fields rather than a fabricated number.
- **Reputation signals** — WhatClinic ServiceScore (`quality_score`, 0-10), review count and
  average rating.
- **Medical-tourism service flags** — `languages_spoken`, `accepts_international_patients`,
  `airport_pickup`, `accommodation_arranged`, `payment_options`, `accreditations` (national/
  international memberships such as ISO or JCI), staff (`doctors`, `doctor_count`), and
  `opening_hours`.

A clinic that has zero priced treatments still contributes one row (with the treatment/price
fields null) so its metadata isn't dropped from the corpus.

### Input

| Field      | Type    | Description                                              |
|------------|---------|----------------------------------------------------------|
| `maxItems` | integer | Maximum number of clinic-treatment-price rows to scrape. |

There is no category or country filter — every run draws from WhatClinic's full clinic
directory across every treatment category and every country it covers, so `maxItems` is the
only knob: a small value is a fast sample, a large value (or leaving it unset for an unlimited
run) walks progressively deeper into the corpus.

### Coverage

WhatClinic lists tens of thousands of clinics across 100+ countries and every treatment
category it publishes (dental, cosmetic/plastic surgery, fertility, hair restoration, eye
care, weight loss, orthopaedics, and more). This actor draws from the same directory the site
itself uses to enumerate every clinic, so nothing is scoped to a single market or specialty.

### Resuming a large crawl

A full, unbounded run can take a long time. `OUTPUT.resumeCursor` is populated automatically at
the end of every run — pass it back in as `resumeCursor` on your next run to continue exactly
where the previous one left off instead of starting over (and being charged again for rows you
already have).

### Notes

- Prices are exactly what WhatClinic publishes for that clinic — this actor does not convert,
  estimate, or normalize currency. Compare `currency` alongside `price_from`/`price_to` when
  aggregating across clinics that display in different currencies.
- `phone` is only populated for clinics that show their number directly on the page; many
  clinics route contact through an on-page enquiry form instead, and are left null.

# 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 clinic-treatment-price rows to scrape.

## 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/whatclinic-global-clinic-treatment-price-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/whatclinic-global-clinic-treatment-price-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/whatclinic-global-clinic-treatment-price-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/whatclinic-global-clinic-treatment-price-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/iiNthA1QADB7y3QbF/builds/8Rtf9TcJ32WbnGv7v/openapi.json
