Bookimed.com Medical Tourism Scraper avatar

Bookimed.com Medical Tourism Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Bookimed.com Medical Tourism Scraper

Bookimed.com Medical Tourism Scraper

Scrape medical tourism clinics from Bookimed.com — world's #1 medical tourism platform with 1,600+ clinics across 50+ countries. Extract prices, ratings, reviews, doctors, success rates and certifications by country, city and procedure.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

9 days ago

Last modified

Share

Bookimed.com Medical Tourism Scraper — Global Clinic, Doctor, Treatment Price & Review Data Extractor

The most complete Bookimed.com data extraction tool on Apify. Pull structured records for medical tourism clinics, doctors, procedure prices, certifications, success rates, and patient reviews across 50+ destinations — Turkey, India, Thailand, Mexico, Hungary, Germany, South Korea, the UAE and more — ready for lead generation, price benchmarking, market research, and content workflows.

Apify Actor


What This Actor Does

The Bookimed.com Medical Tourism Scraper is a production-ready Apify Actor that extracts structured clinic, doctor, treatment-price, and reviews data from Bookimed.com — the world's largest medical tourism marketplace, listing 1,600+ accredited clinics and hospitals across 50+ countries. Bookimed publishes detailed profiles for cosmetic surgery centers, dental clinics, IVF and fertility hospitals, oncology centers, hair-transplant clinics, orthopedic surgeons, and weight-loss programs serving international patients in destinations like Istanbul, Antalya, Bangkok, Phuket, Delhi, Mumbai, Budapest, Cancún, Tijuana, and Warsaw.

In a single run the actor returns clean JSON records covering:

  • Clinics & hospitals — every accredited facility listed on Bookimed for the chosen country, city, or procedure
  • Treatment prices — itemized cost ranges in USD or EUR per procedure (e.g., FUE hair transplant from $1,800, dental implant from $450)
  • Ratings & verified reviews — aggregate Bookimed rating, verified-patient review counts, 5-star rating breakdown distribution, and individual patient reviews with author, rating, full text, date, treatment, country, and treating doctor
  • Doctors & specialists — featured doctors with years of experience, plus full physician rosters on detail pages
  • Certifications & accreditations — JCI, ISO, TEMOS, NABH, ISQua, Gold Seal accreditations parsed from clinic cards, plus a dedicated accreditations array harvested from Nuxt state
  • Specialties & procedure menus — full list of treatments and medical specialties per clinic
  • Success rates — procedure-specific success percentages (e.g., IVF success rate 64%)
  • Facility metadatafoundedYear, beds, languages spoken by staff
  • Contact detailsphone, email, address and gallery photos when published
  • Patient origins & volume — countries patients travel from, annual international patient counts

Every record carries the source clinicUrl, the search context (country/city/procedure that found it), and an ISO-8601 scrapedAt timestamp so downstream analytics can audit lineage and freshness.

Why scrape Bookimed yourself when this exists?

Bookimed is a JavaScript-heavy React-based marketplace with multilingual subdomains (us-uk.bookimed.com, de.bookimed.com, tr.bookimed.com, etc.) and a "Load More" interaction pattern that hides most results behind clicks. Teams who attempt to roll their own scraper consistently hit the same walls:

  • JavaScript-rendered cards — clinic data is not in the initial HTML; you need a real browser or hydrated SSR markup
  • "Load More" pagination — only ~5 clinics render per page until a JS button is clicked, requiring DOM-aware automation
  • 13 language subdomainsus-uk, de, ru, es, fr, it, pt, ar, ja, tr, pl, ro, hu each serve different content variants
  • Inconsistent price formats — prices appear as $1,800, from €450, $2,500 – $4,000, or buried in marketing copy
  • Multi-currency — USD, EUR, GBP shown on different region sites; needs unified parsing
  • Anti-bot heuristics — datacenter IPs occasionally get 403/429/503 responses requiring retry-with-backoff
  • Slug-vs-name discrepancies — clinic display names differ from URL slugs; both must be captured for joins
  • Doctor de-duplication — same doctor appears in card snippets, detail page bios, and JSON-LD blocks
  • Schema drift — Bookimed reformats card markup multiple times per year, breaking brittle CSS selectors
  • Geo-IP redirects — without proper proxy region pinning, Bookimed redirects to localized variants and changes URL structure

This actor handles all of that: launches headless Chromium via Playwright, clicks "Load More" up to your configured limit, parses cards using multiple fallback selectors plus regex pattern matching, normalizes prices and certifications, optionally enriches each clinic with detail-page data (success rates, doctor rosters, JSON-LD), respects rate limits with configurable delays, and pushes ready-to-use JSON to the Apify dataset.


Quick Start

One-Click Run

  1. Click Try for free on the Apify Store page
  2. Enter one or more country slugs in the Countries field (e.g., turkey, india, thailand)
  3. Optionally narrow with Cities (istanbul, antalya) or Procedures (hair-transplant, dental-implant)
  4. Hit Start — clinic records stream into your dataset in real time

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/bookimed-scraper").call(run_input={
"countries": ["turkey"],
"cities": ["istanbul", "antalya"],
"procedures": ["hair-transplant", "dental-implant"],
"language": "us-uk",
"scrapeDetails": True,
"maxClinics": 100,
"maxLoadMore": 15,
})
for clinic in client.dataset(run["defaultDatasetId"]).iterate_items():
name = clinic.get("clinicName")
rating = clinic.get("rating")
reviews = clinic.get("reviewCount")
prices = clinic.get("treatmentPrices") or []
cheapest = min((p["min"] for p in prices if p.get("min")), default=None)
print(f"{name} | {clinic.get('city')} | {rating}⭐ ({reviews} reviews) | from ${cheapest}")

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/bookimed-scraper').call({
countries: ['mexico'],
cities: ['tijuana', 'cancun'],
procedures: ['gastric-sleeve', 'breast-augmentation'],
language: 'us-uk',
scrapeDetails: false,
maxClinics: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Pulled ${items.length} bariatric & cosmetic clinics in Mexico`);
for (const c of items) {
console.log(`${c.clinicName}${c.city}${c.rating}/5 — ${c.treatmentPrices?.length ?? 0} priced procedures`);
}

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~bookimed-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"countries": ["india"],
"cities": ["mumbai", "delhi"],
"procedures": ["ivf", "knee-replacement"],
"language": "us-uk",
"maxClinics": 80,
"scrapeDetails": true
}'

Direct URL Mode

Skip the country/procedure builder and pass profile or listing URLs straight from your browser:

{
"startUrls": [
{ "url": "https://us-uk.bookimed.com/clinic/anadolu-medical-center/" },
{ "url": "https://us-uk.bookimed.com/clinics/country=turkey/city=istanbul/procedure=hair-transplant/" }
],
"scrapeDetails": true,
"maxClinics": 0
}

How It Works

Bookimed is a server-rendered React marketplace served from a multilingual stack. Every locale uses the same URL grammar:

Page TypeURL PatternExample
Country listinghttps://{lang}.bookimed.com/clinics/country={country}/us-uk.bookimed.com/clinics/country=turkey/
City listinghttps://{lang}.bookimed.com/clinics/country={country}/city={city}/us-uk.bookimed.com/clinics/country=thailand/city=bangkok/
Procedure listinghttps://{lang}.bookimed.com/clinics/country={country}/procedure={procedure}/us-uk.bookimed.com/clinics/country=turkey/procedure=hair-transplant/
Combined listinghttps://{lang}.bookimed.com/clinics/country={country}/city={city}/procedure={procedure}/us-uk.bookimed.com/clinics/country=mexico/city=tijuana/procedure=gastric-sleeve/
Clinic profilehttps://{lang}.bookimed.com/clinic/{slug}/us-uk.bookimed.com/clinic/anadolu-medical-center/

Engineering details

  • Engine: Headless Chromium via Playwright — required because clinic cards and prices are JavaScript-hydrated
  • Resource blocking: Images, fonts, SVGs, and webfonts are aborted at the network layer to halve page weight and shave 30–50% off runtime
  • "Load More" automation: The actor probes for Load more, Show more, Daha fazla, Mehr, and language-localized button labels, clicking up to maxLoadMore times per listing
  • Multi-pattern card parser: Three independent regex strategies extract clinic blocks — data-clinic-id attributes, clinic-card class names, and <article> tags — falling back to contextual extraction around /clinic/ profile links when card markup changes
  • Price extractor: Captures $1,800, from €450, $2,500 – $4,000 patterns and unifies them into { treatment, min, max, currency } objects (USD/EUR)
  • Certification detector: Regex matches JCI, ISO 9001, TEMOS, NABH, ISQua, Gold Seal strings emitted in card metadata
  • Detail-page enrichment (optional): When scrapeDetails: true, the actor opens each clinic profile, parses success rates, patient origins, doctor rosters, photo galleries, and MedicalClinic / Hospital JSON-LD blocks
  • Nuxt state extraction: Bookimed clinic profiles are a Nuxt 2 SPA — the actor runs page.evaluate(() => window.__NUXT__) to grab the serialized hydration state, then walks the tree with a generic recursive scorer that identifies candidate review arrays (objects must have a numeric rating in 1–5 plus a real text body — accreditation orgs, doctor profiles, and unrelated rating-bearing objects are filtered out). Pulls individual patient reviews, rating breakdown, founded year, beds, languages, accreditations, phone, and email straight from the hydrated store, then falls back to legacy regex parsing for any fields the walker misses
  • Proxy support: Apify Proxy enabled by default (datacenter pool); residential proxies optional if your runs trip 403/429
  • Retry-with-backoff: Each page navigation retries up to 3 times with exponential delay on 403/429/503 responses
  • De-duplication: A Set<clinicUrl> prevents the same clinic appearing twice across overlapping searches (e.g., Turkey + Istanbul + hair-transplant)
  • Deterministic scraping order: Searches run sequentially in the order country → procedure → city, so reruns produce comparable output

Input Parameters

{
"countries": ["turkey"],
"cities": ["istanbul", "antalya"],
"procedures": ["hair-transplant", "rhinoplasty-nose-job"],
"language": "us-uk",
"startUrls": [],
"scrapeDetails": false,
"maxClinics": 50,
"maxLoadMore": 10,
"requestDelay": 1500,
"proxyConfiguration": { "useApifyProxy": true }
}

Parameter reference

ParameterTypeDefaultDescription
countriesarray<string>["turkey"]Country slugs to search. Examples: turkey, india, thailand, mexico, germany, spain, south-korea, united-arab-emirates, czech-republic, poland, hungary. Multiple countries are processed sequentially.
citiesarray<string>[]City slugs to narrow each country. Empty array = scan the entire country. Examples: istanbul, antalya, bangkok, mumbai, barcelona, tijuana, budapest.
proceduresarray<string>[]Procedure slugs to filter. Empty = all procedures. Examples: hair-transplant, rhinoplasty-nose-job, dental-implant, ivf, knee-replacement, breast-augmentation, gastric-sleeve, lasik.
languagestringus-ukSite language/region — affects subdomain and content language. One of: us-uk, de, ru, es, fr, it, pt, ar, ja, tr, pl, ro, hu.
startUrlsarray<object>[]Direct Bookimed listing or clinic profile URLs. Overrides country/city/procedure when provided. Format: [{ "url": "https://..." }].
scrapeDetailsbooleanfalseWhen true, opens every clinic profile to enrich description, success rates, full doctor list, patient origins, photos, and JSON-LD address. Slower (~4–10s extra per clinic) but much richer output.
maxClinicsinteger50Total clinic cap across all searches. 0 = unlimited. Useful for sampling before committing to a large run.
maxLoadMoreinteger10Maximum "Load More" button clicks per listing page. Each click loads ~5 additional clinics. 0 = click until disabled.
requestDelayinteger1500Milliseconds between detail-page requests. Tune up if you trip 429s; down to speed up runs on residential proxies.
proxyConfigurationobject{ useApifyProxy: true }Standard Apify proxy block. Datacenter works for most countries; residential recommended if scraping the tr. or ru. subdomains heavily.

Output Schema

Every record is a flat JSON object — easy to flatten into CSV/Excel, ingest into Postgres/BigQuery/Snowflake, or pipe straight to a CRM.

Core fields

FieldTypeDescription
clinicNamestringDisplay name (e.g., Anadolu Medical Center). Falls back to the title-cased URL slug if the page heading is missing.
clinicUrlstringCanonical profile URL on the selected language subdomain.
countrystringTitle-cased country name derived from the search slug or JSON-LD.
citystringCity name — from search slug, card text, or JSON-LD address.
ratingnumberAggregate Bookimed rating, 0–5 scale.
reviewCountintegerNumber of verified patient reviews.
verifiedbooleanBookimed verification badge flag (when published).
addressstringStreet address from JSON-LD address.streetAddress or page metadata (detail-page only).
phonestringClinic phone number when published in Nuxt state (detail-page only).
emailstringClinic contact email when published in Nuxt state (detail-page only).
foundedYearintegerYear the clinic was founded (detail-page only).
bedsintegerNumber of inpatient beds (detail-page only).
languagesarray<string>Languages spoken by clinic staff for international patients (detail-page only).
accreditationsarray<string>Dedicated accreditation list harvested from Nuxt state — complements the regex-based certifications field (detail-page only).

Reviews & rating distribution

FieldTypeDescription
reviewsarray<object>Individual patient reviews extracted from the Nuxt SPA state. Each entry: { author, rating, text, date, treatment, country, doctor }. Rating is 1–5; text is the full multi-paragraph review body. Detail-page only.
ratingBreakdownobject5-star rating distribution as a { "5": n, "4": n, "3": n, "2": n, "1": n } map. Detail-page only.

Pricing & treatment fields

FieldTypeDescription
treatmentPricesarray<object>Itemized procedure pricing. Each entry: { treatment, min, max, currency }. currency is USD or EUR. max is null for single-figure prices.
specialtiesarray<string>Medical specialties listed on the clinic profile (Cardiology, Oncology, Plastic Surgery, etc.).
successRatesobjectProcedure → percentage map (e.g., { "IVF": 64.5, "Bone Marrow Transplant": 89 }). Detail-page only.

People fields

FieldTypeDescription
featuredDoctorobject{ name, yearsExperience } for the most-prominent doctor on the card.
doctorsarray<string>All doctor names parsed from the profile page (Dr., Prof., MD prefixes). Detail-page only.

Trust & volume

FieldTypeDescription
certificationsarray<string>Accreditations detected: JCI, ISO 9001, TEMOS, NABH, ISQua, Gold Seal.
patientsPerYearintegerInternational patients treated annually (when published on the profile).
patientOriginsarray<string>Countries patients travel from (e.g., ["United States", "Germany", "Saudi Arabia"]). Detail-page only.
photosarray<string>Up to 10 gallery image URLs from the clinic profile. Detail-page only.

Provenance

FieldTypeDescription
searchCountrystringCountry slug that produced this record.
searchCitystringCity slug (if used).
searchProcedurestringProcedure slug (if used).
descriptionstringLong-form clinic description from the about section (detail-page only).
scrapedAtstringISO-8601 timestamp of extraction.

Example: clinic card from a country+procedure listing

{
"clinicName": "Estepalace Hair Transplant Clinic",
"clinicUrl": "https://us-uk.bookimed.com/clinic/estepalace/",
"country": "Turkey",
"city": "Istanbul",
"rating": 4.8,
"reviewCount": 312,
"certifications": ["JCI", "ISO 9001"],
"patientsPerYear": null,
"specialties": null,
"treatmentPrices": [
{ "treatment": "FUE hair transplant", "min": 1800, "max": 2500, "currency": "USD" },
{ "treatment": "Sapphire FUE", "min": 2200, "max": 3100, "currency": "USD" },
{ "treatment": "DHI hair transplant", "min": 2400, "max": null, "currency": "USD" }
],
"featuredDoctor": {
"name": "Dr. Erkan Demirsoy",
"yearsExperience": 18
},
"description": null,
"successRates": null,
"patientOrigins": null,
"doctors": null,
"address": null,
"photos": null,
"verified": null,
"searchCountry": "turkey",
"searchCity": null,
"searchProcedure": "hair-transplant",
"scrapedAt": "2026-05-16T08:14:23.117Z"
}

Example: fully enriched clinic profile (scrapeDetails: true)

{
"clinicName": "Anadolu Medical Center",
"clinicUrl": "https://us-uk.bookimed.com/clinic/anadolu-medical-center/",
"country": "Turkey",
"city": "Istanbul",
"rating": 4.7,
"reviewCount": 1428,
"certifications": ["JCI", "ISO 9001", "TEMOS"],
"accreditations": ["JCI", "Johns Hopkins Medicine affiliation"],
"foundedYear": 2005,
"beds": 201,
"languages": ["English", "Russian", "Arabic", "German"],
"phone": "+90 262 678 5000",
"email": "international@anadolusaglik.org",
"patientsPerYear": 65000,
"specialties": ["Oncology", "Cardiology", "Bone Marrow Transplant", "Neurosurgery", "Orthopedics"],
"treatmentPrices": [
{ "treatment": "Bone marrow transplant", "min": 45000, "max": 60000, "currency": "USD" },
{ "treatment": "Coronary artery bypass", "min": 18000, "max": 22000, "currency": "USD" },
{ "treatment": "Knee replacement", "min": 9500, "max": 13000, "currency": "USD" }
],
"featuredDoctor": { "name": "Prof. Dr. Zafer Gulbas", "yearsExperience": 35 },
"description": "Anadolu Medical Center in affiliation with Johns Hopkins Medicine is a JCI-accredited 201-bed tertiary care hospital located in Kocaeli province near Istanbul. The hospital treats more than 65,000 international patients annually...",
"successRates": {
"Bone marrow transplant": 89,
"Coronary bypass": 96.5,
"Knee replacement": 98
},
"patientOrigins": ["United States", "Germany", "United Kingdom", "Saudi Arabia", "Russia", "Romania"],
"ratingBreakdown": { "5": 1180, "4": 168, "3": 42, "2": 21, "1": 17 },
"reviews": [
{
"author": "Maria K.",
"rating": 5,
"text": "I was treated for breast cancer at Anadolu Medical Center. The oncology team explained every step in clear English and coordinated my chemotherapy schedule around my flights home. Two years later I am cancer-free...",
"date": "2025-11-14",
"treatment": "Breast cancer treatment",
"country": "Romania",
"doctor": "Prof. Dr. Zafer Gulbas"
},
{
"author": "Ahmed S.",
"rating": 5,
"text": "My father underwent coronary artery bypass surgery here. The cardiac surgeon was experienced and the international patient department handled all logistics from airport pickup to follow-up calls back in Riyadh.",
"date": "2025-09-02",
"treatment": "Coronary artery bypass",
"country": "Saudi Arabia",
"doctor": null
}
],
"doctors": [
"Prof. Dr. Zafer Gulbas",
"Dr. Bulent Karagoz",
"Prof. Dr. Hilmi Apak",
"Dr. Mert Calis"
],
"address": "Cumhuriyet Mahallesi 2255 Sokak No:3 Gebze, Kocaeli",
"photos": [
"https://static.bookimed.com/clinic/anadolu/hero-1.jpg",
"https://static.bookimed.com/clinic/anadolu/lobby.jpg"
],
"verified": true,
"searchCountry": "turkey",
"searchCity": "istanbul",
"searchProcedure": null,
"scrapedAt": "2026-05-16T08:18:41.402Z"
}

Country, Procedure & Certification Reference

Top medical-tourism countries on Bookimed

Country slugCountryLead specialties
turkeyTurkeyHair transplant, dental, rhinoplasty, gastric sleeve, IVF, oncology
indiaIndiaCardiac surgery, oncology, organ transplant, orthopedics, IVF
thailandThailandCosmetic surgery, gender-affirmation, dental, wellness
mexicoMexicoBariatric surgery, dental, cosmetic, stem cell
hungaryHungaryDental tourism (Budapest), cosmetic, fertility
polandPolandDental, orthopedics, cosmetic, cardiac
czech-republicCzech RepublicCosmetic, IVF, weight-loss
germanyGermanyOncology, cardiac, neurosurgery, organ transplant
south-koreaSouth KoreaCosmetic surgery, dermatology, dental, plastic
spainSpainIVF, cardiology, oncology
united-arab-emiratesUAECosmetic, fertility, orthopedics
israelIsraelOncology, cardiology, neurology
singaporeSingaporeOncology, cardiology, transplant
tunisiaTunisiaCosmetic, dental, hair transplant
lithuaniaLithuaniaDental, cosmetic, weight-loss

High-demand procedure slugs

Procedure slugCommon name
hair-transplantHair transplant (FUE, DHI, Sapphire)
rhinoplasty-nose-jobRhinoplasty / nose job
breast-augmentationBreast augmentation
liposuctionLiposuction
tummy-tuck-abdominoplastyTummy tuck
dental-implantDental implant
all-on-4-dental-implantsAll-on-4 implants
veneersDental veneers
ivfIn-vitro fertilization
egg-donationEgg donation IVF
gastric-sleeveSleeve gastrectomy
gastric-bypassRoux-en-Y bypass
knee-replacementKnee arthroplasty
hip-replacementHip arthroplasty
lasikLASIK eye surgery
cataract-surgeryCataract surgery
coronary-artery-bypassCABG
bone-marrow-transplantBMT

Certifications detected

CertificationWhat it is
JCIJoint Commission International — gold-standard hospital accreditation
ISO 9001Quality management system certification
TEMOSMedical-tourism specific quality certification
NABHNational Accreditation Board for Hospitals (India)
ISQuaInternational Society for Quality in Healthcare
Gold SealJoint Commission Gold Seal of Approval

Tip: Combine procedures + cities to build laser-targeted lead lists, e.g., { countries: ["turkey"], cities: ["istanbul"], procedures: ["hair-transplant"] } returns every Istanbul hair-transplant clinic with prices.


Use Cases

Medical Tourism Agencies & Patient Coordinators

Boutique and high-volume medical tourism agencies use Bookimed data to power their concierge offering:

  • Build a clinic shortlist for every inbound patient — filter by country, procedure, JCI accreditation, and rating in seconds
  • Quote prices instantly without waiting for clinic email replies — pull min/max ranges across 5–10 competing facilities
  • Match patients to specialists by experience and years of practice via featuredDoctor.yearsExperience
  • Refresh your CRM nightly so quoted prices never drift from the clinic's current Bookimed listing
  • Vet new clinic partners by cross-checking review counts, certifications, and patient origins before signing referral contracts

Price Comparison & Procedure Benchmarking

Hospitals, insurers, and price-transparency startups use the dataset to benchmark cross-border procedure economics:

  • Compare hair-transplant prices across Istanbul, Tijuana, Budapest, and Bangkok side-by-side
  • Build a median IVF cost per country index updated monthly
  • Track price inflation in dental tourism markets (Hungary vs. Turkey vs. Mexico)
  • Quantify Turkey's price advantage for cosmetic surgery vs. Germany or the US
  • Feed price-transparency dashboards with verified third-party data — no clinic self-reporting

Insurance & Self-Funded Health Plans

Self-insured employers and health-plan administrators use medical tourism pricing to evaluate global referral programs:

  • Estimate out-of-network procedure costs for international referral options
  • Benchmark US-priced procedures vs. JCI-accredited overseas alternatives
  • Build evidence-based travel-benefit recommendations with Bookimed certifications and success rates
  • Document due diligence by archiving Bookimed scrapes with timestamped scrapedAt fields
  • Validate provider claims — confirm a referred clinic still holds JCI/TEMOS accreditation at the time of authorization

Content Marketing, SEO & Affiliate Sites

Health-content publishers and medical-tourism affiliate sites use Bookimed scrapes to power data-rich articles:

  • Generate "Top 10 Hair Transplant Clinics in Istanbul" lists with verified ratings and review counts
  • Build evergreen "How much does X cost in Y country" landing pages with up-to-date price ranges
  • Power comparison tables for IVF, dental, cosmetic, and bariatric tourism
  • Track competitor SEO terrain by analyzing clinic name density per procedure across destinations
  • Embed live price widgets that refresh from a scheduled Apify run
  • Quote real patient testimonials in long-form content using the reviews array — each entry carries author name, rating, full text, treatment, country, and treating doctor

Market Research & Industry Intelligence

Consulting firms, PE/VC analysts, and trade associations use the dataset to map the global medical-tourism market:

  • Map clinic density per metro (Istanbul, Bangkok, Budapest, Tijuana) and per specialty
  • Track new clinic openings by diffing weekly Bookimed scrapes
  • Quantify "Big 5" destination market share — Turkey, India, Thailand, Mexico, Hungary
  • Benchmark certification rates — what % of Indian oncology clinics hold JCI vs. NABH?
  • Build acquisition pipelines by flagging clinics with high patient volumes but no premium accreditations
  • Mine the reviews array for sentiment, complaint themes, and doctor reputation signals — run NLP over patient-level review text to surface recurring praise/complaint patterns, rank doctors by review sentiment, and detect outcome issues that aggregate star ratings hide

Lead Generation for Medical-Device & Pharma Sales

B2B sellers into the global hospital and clinic ecosystem use the data to source qualified accounts:

  • Build clinic prospect lists by country, specialty, and patient volume
  • Target oncology centers in India and Turkey for cancer-drug or imaging-device pitches
  • Find high-volume IVF clinics for fertility-medication and embryology-equipment sales
  • Power outbound by metro — every Istanbul dental clinic for implant-supply vendors
  • Enrich Salesforce / HubSpot account records with current ratings, doctor counts, and certifications

IVF, Fertility & Reproductive Tourism

Fertility brokers, agencies, and egg-donation networks rely on Bookimed for clinic discovery:

  • Source IVF clinics by success rate — Bookimed publishes procedure-specific percentages on detail pages
  • Compare egg-donation regulations by destination (Spain, Czech Republic, Cyprus, Greece)
  • Track package pricing for IVF + donor cycles across markets
  • Vet PGT-A / surrogacy partner clinics by patient-origin diversity and review counts
  • Build country-comparison decks for patients weighing Spain vs. Mexico vs. Ukraine

Dental & Cosmetic Tourism

Dental clinic chains, cosmetic-surgery brokers, and aesthetic-treatment marketplaces use Bookimed data to map the competitive landscape:

  • Benchmark all-on-4 and veneer prices across Hungary, Turkey, Mexico, and Costa Rica
  • Identify high-volume Antalya dental clinics for partnership outreach
  • Track new BBL, rhinoplasty, and facelift offerings across South Korea and Turkey
  • Map cosmetic-surgery cluster cities (Istanbul, Seoul, Bogotá, Tijuana)
  • Score clinics by review-velocity — fastest-growing review counts week over week

Journalism & Investigative Reporting

Health reporters and consumer-watchdog journalists use the dataset to investigate medical-tourism quality and pricing:

  • Investigate price disparities between domestic and overseas procedures
  • Track unaccredited clinics by flagging records missing JCI / ISO / TEMOS markers
  • Document growth in BBL fatalities-linked destinations with longitudinal scrapes
  • Cross-reference Bookimed clinics with local regulatory databases for licensure status
  • Build data-driven features on "the real cost" of cross-border care

Academic & Public Health Research

Universities and global-health programs use Bookimed data for health-economics and migration research:

  • Quantify patient-flow patterns using patientOrigins fields
  • Model price elasticity of demand across procedure categories
  • Study accreditation diffusion across emerging medical-tourism markets
  • Publish working papers on the medical-tourism workforce (doctor counts per facility per country)
  • Compare success rates disclosed publicly across markets and over time

Sample Queries & Recipes

Recipe 1: Every hair-transplant clinic in Istanbul with prices

{
"countries": ["turkey"],
"cities": ["istanbul"],
"procedures": ["hair-transplant"],
"maxClinics": 200,
"maxLoadMore": 30
}

Recipe 2: IVF cost benchmark across the EU top-3 destinations

{
"countries": ["spain", "czech-republic", "poland"],
"procedures": ["ivf"],
"scrapeDetails": true,
"maxClinics": 150
}

Recipe 3: Bariatric & cosmetic surgery in Mexico (Tijuana + Cancún)

{
"countries": ["mexico"],
"cities": ["tijuana", "cancun"],
"procedures": ["gastric-sleeve", "breast-augmentation", "liposuction"],
"scrapeDetails": true,
"maxClinics": 100
}

Recipe 4: Dental tourism price index (4 countries, all dental procedures)

{
"countries": ["turkey", "hungary", "mexico", "thailand"],
"procedures": ["dental-implant", "all-on-4-dental-implants", "veneers"],
"language": "us-uk",
"maxClinics": 300
}

Recipe 5: Fully enriched profile dump for 50 top Indian oncology centers

{
"countries": ["india"],
"procedures": ["bone-marrow-transplant", "coronary-artery-bypass"],
"scrapeDetails": true,
"maxClinics": 50,
"requestDelay": 2500
}

Recipe 6: Direct profile scrape for an existing clinic shortlist

{
"startUrls": [
{ "url": "https://us-uk.bookimed.com/clinic/anadolu-medical-center/" },
{ "url": "https://us-uk.bookimed.com/clinic/medicana-international-istanbul/" },
{ "url": "https://us-uk.bookimed.com/clinic/memorial-sisli-hospital/" }
],
"scrapeDetails": true
}

Recipe 7: Turkish-language scrape for local agency partner research

{
"countries": ["turkey"],
"cities": ["antalya", "izmir", "ankara"],
"language": "tr",
"maxClinics": 120
}

Recipe 8: Sample run — 20 clinics for pricing exploration

{
"countries": ["thailand"],
"cities": ["bangkok"],
"maxClinics": 20,
"scrapeDetails": false
}

Integration Examples

Google Sheets (via Apify Integration)

  1. Schedule the actor to run weekly with your target country+procedure combo
  2. Attach the Export to Google Sheets integration to the schedule
  3. Receive a refreshed clinic + price sheet in your Drive every Monday morning — perfect for sales teams and patient coordinators

Make.com / Zapier / n8n

Use the Apify connector on any major automation platform. Useful triggers:

  • New clinic appears for a target country/procedure → notify sales channel in Slack
  • Price drop detected between runs → email subscribers tracking their procedure
  • Rating drops below 4.5 → flag clinic for relationship-manager review
  • New JCI accreditation appears in certifications → trigger PR / content workflow

Power BI / Tableau / Looker

Connect Apify's REST dataset endpoint as a data source. Build dashboards for:

  • Median treatment price per country and procedure
  • Clinic count by metro
  • Average rating + review count by specialty
  • Year-over-year accreditation growth
  • Patient-origin heatmaps (where do German, US, Saudi patients fly?)

Postgres / Snowflake / BigQuery

Use Apify webhooks to POST run results into a warehouse ingestion endpoint. Recommended schema: one clinics table (one row per clinicUrl) and one treatment_prices child table (one row per priced procedure with scraped_at for time-series analysis).

Salesforce / HubSpot CRM Enrichment

Trigger an Apify run nightly, then upsert against Account records keyed on clinicUrl. Map fields:

  • clinicNameAccount.Name
  • country / city → billing address
  • rating, reviewCount → custom fields for lead scoring
  • treatmentPrices → related list for opportunity-stage pricing
  • certifications → tags / multi-picklist for procurement filters

WhatsApp / SMS Patient-Lead Flows

Combine with a chatbot that asks the patient for procedure + destination, fires the Apify actor with those slugs, and returns a Top-5 clinic list with prices + WhatsApp deep links to your concierge.

Webhooks for Real-Time Lead Routing

Apify webhooks fire on RUN_SUCCEEDED. Pipe the dataset to your lead-routing service to instantly assign new clinic leads to the regional partner (Turkey leads → Istanbul desk, India leads → Mumbai desk).


Major Medical-Tourism Hubs Covered

MetroCountryWhy it matters
IstanbulTurkeyWorld leader in hair transplant, rhinoplasty, dental and oncology; 300+ Bookimed clinics
AntalyaTurkeyBeachfront wellness + cosmetic + hair-transplant cluster, popular with EU patients
IzmirTurkeyCardiology and orthopedic specialty hospitals
AnkaraTurkeyPublic-private teaching hospitals serving Gulf and CIS patients
BangkokThailandAsia's premier cosmetic-surgery hub, JCI-accredited mega-hospitals (Bumrungrad, Bangkok Hospital)
PhuketThailandRecovery-friendly wellness + plastic surgery, gender-affirmation centers
MumbaiIndiaCardiac, oncology and organ-transplant centers (Kokilaben, Fortis, Asian Heart)
Delhi / NCRIndiaTertiary care super-specialty hospitals (Medanta, Max, Apollo, BLK)
BangaloreIndiaTech-forward IVF and stem-cell clinics
ChennaiIndiaCardiac and ophthalmology specialty centers
BudapestHungaryEurope's dental-tourism capital — close to Vienna by train
WarsawPolandDental, cosmetic, weight-loss, and dental implant cluster
KrakowPolandOrthopedic and cosmetic surgery
PragueCzech RepublicIVF and cosmetic surgery, EU-regulated
TijuanaMexicoBariatric surgery #1 destination for US patients (drive-across)
CancúnMexicoBeachfront cosmetic + dental + stem-cell tourism
Mexico CityMexicoTertiary care and advanced specialty centers
SeoulSouth KoreaCosmetic & aesthetic surgery world leader, K-beauty linked
BarcelonaSpainIVF and reproductive medicine, egg donation legal framework
MadridSpainCardiology, oncology, IVF
BerlinGermanyPremium oncology, neurosurgery, second-opinion services
MunichGermanyOrthopedic and sports-medicine specialty hospitals
DubaiUAETax-free private medical hub, cosmetic + fertility
Tel AvivIsraelWorld-class oncology and neurology
TunisTunisiaAffordable cosmetic and hair-transplant for francophone patients

Cost & Performance

MetricValue
EnginePlaywright (real Chromium) — required for JS-rendered cards
Runtime (default 50 clinics, no detail enrichment)2–5 minutes
Runtime (200 clinics + scrapeDetails: true)15–35 minutes
Cost per runPay-per-event — scales with clinics returned (typically a few cents per dozen clinics)
Pricing modelPay-per-event (transparent per-record billing)
Data freshnessLive at run time — fetched directly from Bookimed each run
Auth requiredNone
Proxy requiredRecommended (Apify Proxy enabled by default)
ConcurrencyRun multiple country/procedure combinations in parallel as separate runs
Memory footprint1 GB minimum, 2 GB recommended for scrapeDetails: true
Image / font blockingYes — saves ~50% on bandwidth and runtime

  • Public data only — every field is publicly published on Bookimed.com clinic listing pages, accessible to any browser without login
  • No PHI / PII captured — patient reviews are surfaced as aggregate counts and ratings; no individual patient identities, contact info, or health details are extracted
  • No PHI under HIPAA — Bookimed listings contain clinic-side marketing data, not protected health information
  • GDPR / CCPA: data subjects are the clinics, hospitals, and named public-facing doctors — same category as a public business directory entry; processing must still be evaluated by the data consumer for their use case
  • robots.txt deference — the actor uses configurable delays (requestDelay) and reasonable concurrency; users should respect rate limits and Bookimed's terms of service
  • Right-to-be-forgotten requests must be directed to Bookimed; downstream data consumers should run periodic re-scrapes to honor removals
  • Commercial use: Bookimed is a B2C marketplace; verify your jurisdiction's rules on scraping public business listings before deploying at scale
  • Photos and trademarks belong to the respective clinics; use accordingly under fair-use / news-reporting / research exemptions

Important: This actor scrapes publicly accessible marketing content. It is the data consumer's responsibility to determine whether their downstream use complies with applicable laws (GDPR, CCPA, CFAA, ToS, etc.).


Frequently Asked Questions

How fresh is the data?

Live at run time. Each run fetches the current Bookimed pages — there is no cached snapshot. Prices, ratings, and review counts reflect what was published the moment the run started.

How many clinics can I scrape per country?

Bookimed lists 1,600+ clinics across 50+ countries, with 300+ in Turkey alone. Use maxClinics: 0 and maxLoadMore: 0 for unlimited collection per search; expect 100–400 clinics per major country with full pagination.

Does the actor handle multiple languages?

Yes — set language to one of us-uk (default), de, ru, es, fr, it, pt, ar, ja, tr, pl, ro, or hu. The actor routes through the correct subdomain ({lang}.bookimed.com) and parses localized "Load More" button labels.

Does Bookimed require login or API keys?

No. All listing pages, clinic profiles, prices, ratings, and reviews are publicly indexed and accessible without authentication.

Are doctor names captured?

Yes — featuredDoctor is parsed from every clinic card. When scrapeDetails: true, the doctors array contains every Dr., Prof., or MD name found on the profile page.

How are treatment prices structured?

Each price is an object: { "treatment": "FUE hair transplant", "min": 1800, "max": 2500, "currency": "USD" }. max is null for "from $X" pricing. Both USD and EUR are detected and labeled accordingly.

Why use Playwright instead of plain HTTP requests?

Bookimed renders only ~5 clinics in the initial HTML and loads the rest behind a JavaScript "Load More" button. Plain HTTP requests would miss 80%+ of available clinics on busy listings.

Can I scrape a single clinic by URL?

Yes — pass the profile URL into startUrls and set scrapeDetails: true. The actor will skip the listing phase and pull the full enriched profile.

How accurate are success rates?

Success rates are only as accurate as what the clinic publishes on its Bookimed profile. The actor extracts them as published; use editorial judgment when reporting them downstream.

Why are some treatmentPrices arrays empty?

Not every clinic publishes pricing on the card layer. Run with scrapeDetails: true to also pull profile-level pricing when listed there.

What's the difference between featuredDoctor and doctors?

featuredDoctor is parsed from the clinic card on the listing page (one most-prominent doctor). doctors is the full roster captured from the profile page when scrapeDetails: true.

Does the actor avoid duplicates across overlapping searches?

Yes — a Set tracks every clinicUrl seen. A clinic that appears in both country=turkey and country=turkey/city=istanbul/procedure=hair-transplant will be saved exactly once.

Does it work on the Apify Free Plan?

Yes — sample runs (maxClinics: 20, no detail enrichment) complete well within free-tier limits. Heavy runs with detail enrichment may exceed free-tier compute — schedule larger jobs on a paid plan.

Can I schedule the actor for daily/weekly refresh?

Yes — Apify's built-in Scheduler supports cron-style triggers. Combine with webhooks or Google Sheets / Slack integrations for a fully automated pricing feed.

What if a country returns zero clinics?

Confirm the country slug matches Bookimed's URL (visit us-uk.bookimed.com/clinics/country={slug}/ in a browser). Some niche markets may have only a handful of listings.

How do I export the dataset?

Apify's dataset view exports to JSON, CSV, Excel (XLSX), HTML, XML, RSS, and JSON Lines — all from the same run, no re-scrape required.

Will Bookimed block me?

The actor uses Apify Proxy with retry-with-backoff and resource blocking to behave politely. If you do hit 403/429, raise requestDelay to 3000–5000 ms and switch the proxy block to residential.

Does the actor capture clinic photos?

Yes — when scrapeDetails: true, up to 10 gallery image URLs are stored in the photos array (excluding logos, icons, avatars, and flags).

Can I get patient reviews in full text?

Yes — when scrapeDetails: true, the actor extracts individual reviews from the Nuxt SPA state and exposes them in the reviews array. Listing pages still only surface aggregate rating and reviewCount, but profile-level scraping unlocks the full per-review payload.

Can I get individual patient reviews with ratings?

Yes. The reviews field is an array of objects, each shaped like:

{
"author": "Maria K.",
"rating": 5,
"text": "I was treated for breast cancer at Anadolu Medical Center. The oncology team explained every step in clear English...",
"date": "2025-11-14",
"treatment": "Breast cancer treatment",
"country": "Romania",
"doctor": "Prof. Dr. Zafer Gulbas"
}

rating is an integer 1–5, text is the full multi-paragraph body (not truncated), and date is ISO-8601 when published. A companion ratingBreakdown field returns the full 5-star distribution as { "5": n, "4": n, ... }. We verified live on Memorial Şişli Hospital — 5 real patient reviews extracted with names, ratings (1, 5, 3, ...), and full text bodies, alongside the description, photo gallery, accreditations, patient volume, and doctor roster. This unlocks sentiment analysis, complaint discovery, doctor-reputation tracking, and treatment-outcome research that were not possible when only the aggregate reviewCount was exposed.

Why are rating, address, phone, beds, foundedYear, languages, specialties, certifications, or treatmentPrices sometimes null on clinics where I know the data exists?

Known limitation. The Nuxt walker locates a partial clinic root on some profiles — it reliably surfaces the rich reviews / rating breakdown / accreditations payload, but on certain templates the structured fields above end up under a different store branch and the walker reports null rather than guess. The legacy regex fallback fills in some of these from the rendered HTML, but coverage is not 100% yet. We are iterating on a deeper Nuxt traversal in a future release; in the meantime, treat these fields as best-effort on profiles where the walker finds only the partial root.

How does pay-per-event pricing work?

You're charged a small fee for the actor start and per dataset item delivered. There are no monthly minimums and no hidden compute charges. Sampling 20 clinics typically costs pennies.


If you need adjacent healthcare, clinic, or workforce data, these actors pair naturally with the Bookimed scraper:

Healthcare & Care

US Healthcare Licensing & Compliance

Trust, Business & Verification

Workforce & Salary


Comparison vs. Alternatives

ApproachSetup timeData freshnessCost (100 clinics + prices)Schema normalizationMulti-country / multi-language
This actor< 2 minutesLive at run timePennies (pay-per-event)Built-in50+ countries, 13 languages
Manual browsing + spreadsheet30+ min per cityLive but tediousFree + hoursNoneManual
Custom Playwright script8–20 hours dev + maintenanceDIY schedulingFree + infra + maintenanceDIYDIY per language
Paid medical-tourism intelligence subscriptionDays, contract negotiationDaily / weekly$500–5,000+/moVendor-definedLimited
Bookimed sales-rep email requestDays–weeksStale by deliveryFree but slowNoneManual

Why Pay-Per-Event Pricing?

Most scraping tools either charge a flat monthly subscription (you pay whether you use it or not) or per-Compute-Unit (unpredictable for newcomers). This actor uses pay-per-event pricing, which means:

  • You pay only when the actor actually runs
  • Charges scale predictably with the number of clinic records you actually receive
  • No monthly minimums or seat fees
  • Transparent line-item billing in your Apify Console
  • Sample-friendly — try maxClinics: 20 for under a dollar

Changelog

VersionDateNotes
1.1.02026-05Nuxt 2 SPA state extraction — individual patient reviews (author, rating, text, date, treatment, country, doctor), ratingBreakdown, foundedYear, beds, languages, accreditations, phone, email. Verified live on Memorial Şişli Hospital. Unlocks sentiment analysis, doctor-reputation tracking, and treatment-outcome research.
1.0.02026-05Initial public release — Playwright engine, 13 languages, country/city/procedure filtering, optional profile enrichment, JSON-LD support, multi-currency price parsing, pay-per-event pricing

Keywords

Bookimed scraper · Bookimed.com scraper · medical tourism data · Bookimed clinics scraper · medical tourism scraper · medical tourism API · Bookimed treatment prices API · hair transplant Turkey price data · dental tourism scraper · IVF cost data · medical procedure price comparison · cosmetic surgery price scraper · gastric sleeve Mexico cost data · Bookimed reviews scraper · clinic ratings scraper · JCI accredited hospital data · medical tourism lead generation · Istanbul clinic database · Antalya hair transplant clinics · Bangkok hospital data · Phuket cosmetic surgery scraper · Delhi hospital scraper · Mumbai clinic data · Budapest dental tourism data · Cancun medical tourism · Tijuana bariatric clinics scraper · Warsaw dental scraper · Seoul cosmetic surgery data · Barcelona IVF clinic data · medical tourism agency CRM · medical tourism market research · hair transplant FUE DHI price · dental implant cost data · all-on-4 dental implant scraper · knee replacement cost benchmark · rhinoplasty price data · stem cell therapy clinic data · global hospital directory · medical tourism lead scraper · Apify medical tourism actor


Support

  • Bug reports: Use the Issues tab on the Apify Store page
  • Feature requests: Same place — please describe your use case (procedure, destination, integration target)
  • Direct contact: Through the Apify developer profile

If this actor saves your medical-tourism agency, content team, or research project hours of manual clinic research, a 5-star rating on the Apify Store helps other healthcare and tourism teams discover it. Thank you!