Bookimed.com Medical Tourism Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
9 days ago
Last modified
Categories
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.
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
accreditationsarray 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 metadata —
foundedYear,beds,languagesspoken by staff - Contact details —
phone,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 subdomains —
us-uk,de,ru,es,fr,it,pt,ar,ja,tr,pl,ro,hueach 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
- Click Try for free on the Apify Store page
- Enter one or more country slugs in the Countries field (e.g.,
turkey,india,thailand) - Optionally narrow with Cities (
istanbul,antalya) or Procedures (hair-transplant,dental-implant) - Hit Start — clinic records stream into your dataset in real time
API Run (Python)
from apify_client import ApifyClientclient = 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 Type | URL Pattern | Example |
|---|---|---|
| Country listing | https://{lang}.bookimed.com/clinics/country={country}/ | us-uk.bookimed.com/clinics/country=turkey/ |
| City listing | https://{lang}.bookimed.com/clinics/country={country}/city={city}/ | us-uk.bookimed.com/clinics/country=thailand/city=bangkok/ |
| Procedure listing | https://{lang}.bookimed.com/clinics/country={country}/procedure={procedure}/ | us-uk.bookimed.com/clinics/country=turkey/procedure=hair-transplant/ |
| Combined listing | https://{lang}.bookimed.com/clinics/country={country}/city={city}/procedure={procedure}/ | us-uk.bookimed.com/clinics/country=mexico/city=tijuana/procedure=gastric-sleeve/ |
| Clinic profile | https://{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 tomaxLoadMoretimes per listing - Multi-pattern card parser: Three independent regex strategies extract clinic blocks —
data-clinic-idattributes,clinic-cardclass 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,000patterns 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, andMedicalClinic/HospitalJSON-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 numericratingin 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
| Parameter | Type | Default | Description |
|---|---|---|---|
countries | array<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. |
cities | array<string> | [] | City slugs to narrow each country. Empty array = scan the entire country. Examples: istanbul, antalya, bangkok, mumbai, barcelona, tijuana, budapest. |
procedures | array<string> | [] | Procedure slugs to filter. Empty = all procedures. Examples: hair-transplant, rhinoplasty-nose-job, dental-implant, ivf, knee-replacement, breast-augmentation, gastric-sleeve, lasik. |
language | string | us-uk | Site language/region — affects subdomain and content language. One of: us-uk, de, ru, es, fr, it, pt, ar, ja, tr, pl, ro, hu. |
startUrls | array<object> | [] | Direct Bookimed listing or clinic profile URLs. Overrides country/city/procedure when provided. Format: [{ "url": "https://..." }]. |
scrapeDetails | boolean | false | When 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. |
maxClinics | integer | 50 | Total clinic cap across all searches. 0 = unlimited. Useful for sampling before committing to a large run. |
maxLoadMore | integer | 10 | Maximum "Load More" button clicks per listing page. Each click loads ~5 additional clinics. 0 = click until disabled. |
requestDelay | integer | 1500 | Milliseconds between detail-page requests. Tune up if you trip 429s; down to speed up runs on residential proxies. |
proxyConfiguration | object | { 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
| Field | Type | Description |
|---|---|---|
clinicName | string | Display name (e.g., Anadolu Medical Center). Falls back to the title-cased URL slug if the page heading is missing. |
clinicUrl | string | Canonical profile URL on the selected language subdomain. |
country | string | Title-cased country name derived from the search slug or JSON-LD. |
city | string | City name — from search slug, card text, or JSON-LD address. |
rating | number | Aggregate Bookimed rating, 0–5 scale. |
reviewCount | integer | Number of verified patient reviews. |
verified | boolean | Bookimed verification badge flag (when published). |
address | string | Street address from JSON-LD address.streetAddress or page metadata (detail-page only). |
phone | string | Clinic phone number when published in Nuxt state (detail-page only). |
email | string | Clinic contact email when published in Nuxt state (detail-page only). |
foundedYear | integer | Year the clinic was founded (detail-page only). |
beds | integer | Number of inpatient beds (detail-page only). |
languages | array<string> | Languages spoken by clinic staff for international patients (detail-page only). |
accreditations | array<string> | Dedicated accreditation list harvested from Nuxt state — complements the regex-based certifications field (detail-page only). |
Reviews & rating distribution
| Field | Type | Description |
|---|---|---|
reviews | array<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. |
ratingBreakdown | object | 5-star rating distribution as a { "5": n, "4": n, "3": n, "2": n, "1": n } map. Detail-page only. |
Pricing & treatment fields
| Field | Type | Description |
|---|---|---|
treatmentPrices | array<object> | Itemized procedure pricing. Each entry: { treatment, min, max, currency }. currency is USD or EUR. max is null for single-figure prices. |
specialties | array<string> | Medical specialties listed on the clinic profile (Cardiology, Oncology, Plastic Surgery, etc.). |
successRates | object | Procedure → percentage map (e.g., { "IVF": 64.5, "Bone Marrow Transplant": 89 }). Detail-page only. |
People fields
| Field | Type | Description |
|---|---|---|
featuredDoctor | object | { name, yearsExperience } for the most-prominent doctor on the card. |
doctors | array<string> | All doctor names parsed from the profile page (Dr., Prof., MD prefixes). Detail-page only. |
Trust & volume
| Field | Type | Description |
|---|---|---|
certifications | array<string> | Accreditations detected: JCI, ISO 9001, TEMOS, NABH, ISQua, Gold Seal. |
patientsPerYear | integer | International patients treated annually (when published on the profile). |
patientOrigins | array<string> | Countries patients travel from (e.g., ["United States", "Germany", "Saudi Arabia"]). Detail-page only. |
photos | array<string> | Up to 10 gallery image URLs from the clinic profile. Detail-page only. |
Provenance
| Field | Type | Description |
|---|---|---|
searchCountry | string | Country slug that produced this record. |
searchCity | string | City slug (if used). |
searchProcedure | string | Procedure slug (if used). |
description | string | Long-form clinic description from the about section (detail-page only). |
scrapedAt | string | ISO-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 slug | Country | Lead specialties |
|---|---|---|
turkey | Turkey | Hair transplant, dental, rhinoplasty, gastric sleeve, IVF, oncology |
india | India | Cardiac surgery, oncology, organ transplant, orthopedics, IVF |
thailand | Thailand | Cosmetic surgery, gender-affirmation, dental, wellness |
mexico | Mexico | Bariatric surgery, dental, cosmetic, stem cell |
hungary | Hungary | Dental tourism (Budapest), cosmetic, fertility |
poland | Poland | Dental, orthopedics, cosmetic, cardiac |
czech-republic | Czech Republic | Cosmetic, IVF, weight-loss |
germany | Germany | Oncology, cardiac, neurosurgery, organ transplant |
south-korea | South Korea | Cosmetic surgery, dermatology, dental, plastic |
spain | Spain | IVF, cardiology, oncology |
united-arab-emirates | UAE | Cosmetic, fertility, orthopedics |
israel | Israel | Oncology, cardiology, neurology |
singapore | Singapore | Oncology, cardiology, transplant |
tunisia | Tunisia | Cosmetic, dental, hair transplant |
lithuania | Lithuania | Dental, cosmetic, weight-loss |
High-demand procedure slugs
| Procedure slug | Common name |
|---|---|
hair-transplant | Hair transplant (FUE, DHI, Sapphire) |
rhinoplasty-nose-job | Rhinoplasty / nose job |
breast-augmentation | Breast augmentation |
liposuction | Liposuction |
tummy-tuck-abdominoplasty | Tummy tuck |
dental-implant | Dental implant |
all-on-4-dental-implants | All-on-4 implants |
veneers | Dental veneers |
ivf | In-vitro fertilization |
egg-donation | Egg donation IVF |
gastric-sleeve | Sleeve gastrectomy |
gastric-bypass | Roux-en-Y bypass |
knee-replacement | Knee arthroplasty |
hip-replacement | Hip arthroplasty |
lasik | LASIK eye surgery |
cataract-surgery | Cataract surgery |
coronary-artery-bypass | CABG |
bone-marrow-transplant | BMT |
Certifications detected
| Certification | What it is |
|---|---|
JCI | Joint Commission International — gold-standard hospital accreditation |
ISO 9001 | Quality management system certification |
TEMOS | Medical-tourism specific quality certification |
NABH | National Accreditation Board for Hospitals (India) |
ISQua | International Society for Quality in Healthcare |
Gold Seal | Joint Commission Gold Seal of Approval |
Tip: Combine
procedures+citiesto 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 costper 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
scrapedAtfields - 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
reviewsarray — 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
reviewsarray 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
patientOriginsfields - 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)
- Schedule the actor to run weekly with your target country+procedure combo
- Attach the Export to Google Sheets integration to the schedule
- 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:
clinicName→Account.Namecountry/city→ billing addressrating,reviewCount→ custom fields for lead scoringtreatmentPrices→ related list for opportunity-stage pricingcertifications→ 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
| Metro | Country | Why it matters |
|---|---|---|
| Istanbul | Turkey | World leader in hair transplant, rhinoplasty, dental and oncology; 300+ Bookimed clinics |
| Antalya | Turkey | Beachfront wellness + cosmetic + hair-transplant cluster, popular with EU patients |
| Izmir | Turkey | Cardiology and orthopedic specialty hospitals |
| Ankara | Turkey | Public-private teaching hospitals serving Gulf and CIS patients |
| Bangkok | Thailand | Asia's premier cosmetic-surgery hub, JCI-accredited mega-hospitals (Bumrungrad, Bangkok Hospital) |
| Phuket | Thailand | Recovery-friendly wellness + plastic surgery, gender-affirmation centers |
| Mumbai | India | Cardiac, oncology and organ-transplant centers (Kokilaben, Fortis, Asian Heart) |
| Delhi / NCR | India | Tertiary care super-specialty hospitals (Medanta, Max, Apollo, BLK) |
| Bangalore | India | Tech-forward IVF and stem-cell clinics |
| Chennai | India | Cardiac and ophthalmology specialty centers |
| Budapest | Hungary | Europe's dental-tourism capital — close to Vienna by train |
| Warsaw | Poland | Dental, cosmetic, weight-loss, and dental implant cluster |
| Krakow | Poland | Orthopedic and cosmetic surgery |
| Prague | Czech Republic | IVF and cosmetic surgery, EU-regulated |
| Tijuana | Mexico | Bariatric surgery #1 destination for US patients (drive-across) |
| Cancún | Mexico | Beachfront cosmetic + dental + stem-cell tourism |
| Mexico City | Mexico | Tertiary care and advanced specialty centers |
| Seoul | South Korea | Cosmetic & aesthetic surgery world leader, K-beauty linked |
| Barcelona | Spain | IVF and reproductive medicine, egg donation legal framework |
| Madrid | Spain | Cardiology, oncology, IVF |
| Berlin | Germany | Premium oncology, neurosurgery, second-opinion services |
| Munich | Germany | Orthopedic and sports-medicine specialty hospitals |
| Dubai | UAE | Tax-free private medical hub, cosmetic + fertility |
| Tel Aviv | Israel | World-class oncology and neurology |
| Tunis | Tunisia | Affordable cosmetic and hair-transplant for francophone patients |
Cost & Performance
| Metric | Value |
|---|---|
| Engine | Playwright (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 run | Pay-per-event — scales with clinics returned (typically a few cents per dozen clinics) |
| Pricing model | Pay-per-event (transparent per-record billing) |
| Data freshness | Live at run time — fetched directly from Bookimed each run |
| Auth required | None |
| Proxy required | Recommended (Apify Proxy enabled by default) |
| Concurrency | Run multiple country/procedure combinations in parallel as separate runs |
| Memory footprint | 1 GB minimum, 2 GB recommended for scrapeDetails: true |
| Image / font blocking | Yes — saves ~50% on bandwidth and runtime |
Compliance, Privacy & Legal Notes
- 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.
Related Apify Actors by Haketa
If you need adjacent healthcare, clinic, or workforce data, these actors pair naturally with the Bookimed scraper:
Healthcare & Care
- WhatClinic.com Clinic Scraper — global clinic directory data for dental, cosmetic, fertility and aesthetic clinics
- ProductHunt Launches & Makers Scraper — daily startup launches, makers, votes & reviews — VC/founder/recruiter intel
US Healthcare Licensing & Compliance
- Texas Pharmacy License Scraper — TSBP — every Texas pharmacist, pharmacy, intern and technician
- Ohio eLicense Scraper — multi-board Ohio professional licensing
- California DCA License Scraper — CA Department of Consumer Affairs licensing
- Illinois IDFPR License Scraper — Illinois professional regulation
- Virginia DPOR License Scraper — Virginia regulated occupations
- Minnesota DLI License Scraper — Minnesota labor-and-industry licensing
- Colorado Professional License Scraper — Colorado DORA professionals
Trust, Business & Verification
- BBB Business Scraper — Better Business Bureau ratings, complaints and accreditations
- SAM.gov Federal Contractor Scraper — federal contractor registrations
Workforce & Salary
- H1B Visa Database Scraper — global salary benchmarks including healthcare roles
- Levels.fyi Scraper — engineering and product compensation benchmarks
Comparison vs. Alternatives
| Approach | Setup time | Data freshness | Cost (100 clinics + prices) | Schema normalization | Multi-country / multi-language |
|---|---|---|---|---|---|
| This actor | < 2 minutes | Live at run time | Pennies (pay-per-event) | Built-in | 50+ countries, 13 languages |
| Manual browsing + spreadsheet | 30+ min per city | Live but tedious | Free + hours | None | Manual |
| Custom Playwright script | 8–20 hours dev + maintenance | DIY scheduling | Free + infra + maintenance | DIY | DIY per language |
| Paid medical-tourism intelligence subscription | Days, contract negotiation | Daily / weekly | $500–5,000+/mo | Vendor-defined | Limited |
| Bookimed sales-rep email request | Days–weeks | Stale by delivery | Free but slow | None | Manual |
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: 20for under a dollar
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.1.0 | 2026-05 | Nuxt 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.0 | 2026-05 | Initial 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!