Doctoralia Clinics & Medical Centers Scraper
Pricing
from $8.00 / 1,000 clinics
Doctoralia Clinics & Medical Centers Scraper
Extract clinics, hospitals and medical centers from Doctoralia across Latin America and Spain. For each center get its name, full address, city, phone, specialties, affiliated doctors, opening hours, services and patient rating. Built for healthcare lead generation and provider-network research.
Pricing
from $8.00 / 1,000 clinics
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Doctoralia Clinics & Medical Centers Scraper
Here is one real result, with every field the actor returns (the reviews array is trimmed here to two entries; the actor returns every review it collects):
{"imageUrl": "https://s3-eu-west-1.amazonaws.com/doctoralia.es/doctor/b2ac04/b2ac04debe9f4da1e70aba3066a925e0_large.jpg","clinicName": null,"specialty": "Cardiología","city": null,"address": null,"rating": 5,"reviewsCount": 2941,"url": "https://www.doctoralia.es/clinicas/my-medica","listingId": "33167","phone": "+34663631999","fullAddress": "Doctoralia Internet SL C/ Josep Pla 2 - Building B2, floor 13 08019 Barcelona, Spain","description": null,"priceRange": null,"doctors": null,"openingHours": null,"insurances": null,"reviews": [{ "author": null, "rating": 0, "date": null, "text": "Experiencia excelente. Desde un primer momento súper profesional, con explicaciones detalladas y soluciones personalizadas a cada caso." },{ "author": null, "rating": 0, "date": null, "text": "The doctor could communicate in English, which made me feel much more at ease, and his explanations were very clear and professional." }],"observedAt": "2026-08-14T06:39:15.339Z","error": null,"aiLeadScore": null,"aiLeadTier": null,"aiLeadRationale": null,"aiSummary": "This clinic specializes in cardiology and has received a high rating of 5 based on 2,941 reviews, indicating strong patient satisfaction.","aiIndustry": null,"aiCategories": null}
The most complete Doctoralia clinics scraper available. It returns every field Doctoralia exposes for each clinic or medical center (name, address, phone, specialty, rating, reviews, services, doctors, opening hours, accepted insurances), plus optional AI enrichment, and gives you specialty, city and country filters to target exactly the centers you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches Doctoralia for a specialty or clinic type in the country and city you choose, and returns one record per clinic or medical center. With withDetails enabled (the default), it also opens each clinic profile to add phone, full address, description, services and prices, the doctors practising there, opening hours, accepted insurances and patient reviews. Missing source values are returned as null and missing lists as null, never invented.
Coverage spans the Doctoralia country sites for Mexico, Spain, Brazil, Argentina, Colombia, Chile and Peru. Optional paid add-ons can find a public contact email and name, score each clinic as a B2B lead, write an AI summary, and classify its primary medical field.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 10 cardiology clinics in Mexico City with detail pages fetched.
{"specialty": "Cardiología","location": "Ciudad de México","country": "mx","maxClinics": 10,"withDetails": true}
Leave location empty to search the whole country. Paste a full Doctoralia clinics search URL into startUrl to override the specialty and location fields.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
specialty | string | no | Cardiología | Specialty or clinic type to search, for example Cardiología, Odontología, Laboratorio. |
location | string | no | Ciudad de México | City or area to narrow the search. Leave empty to search the whole country. |
country | enum | no | mx | Doctoralia country site: mx, es, br, ar, co, cl, pe. |
maxClinics | integer | no | 10 | Maximum number of clinics to collect. Free plans are capped at 10. |
withDetails | boolean | no | true | Fetch each clinic profile for phone, full address, services, doctors, opening hours and insurances. Slower but richer. |
startUrl | string | no | (empty) | Optional. A full Doctoralia clinics search URL that overrides specialty and location. |
enrichContacts | boolean | no | false | Paid add-on. For each result without an email, attempt to find a public business contact email and name. Billed per attempt plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap on how many results the contact add-on tries to enrich. Free accounts are capped at 3. |
withLeadScore | boolean | no | false | Paid add-on. AI qualifies each clinic as a B2B lead (0 to 100, hot/warm/cold, rationale). Charged per clinic scored. |
withProfileSummary | boolean | no | false | Paid add-on. AI writes a concise summary of each clinic. Charged per clinic summarised. |
withIndustry | boolean | no | false | Paid add-on. AI classifies each clinic's primary medical field and specialty tags. Charged per clinic classified. |
Output reference
One dataset item per clinic. Types: string, integer, number, object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
clinicName | string | Clinic or medical center name, or null when Doctoralia does not expose a distinct center name. |
imageUrl | string | Profile image URL. |
specialty | string | Specialty or clinic type matched. |
city | string | City, when exposed, else null. |
address | string | Short address from the listing, else null. |
rating | number | Average patient rating, or null. |
reviewsCount | integer | Number of reviews. |
reviews | object[] | Review entries, each with author, rating, date, text. Populated with withDetails. |
services | object[] | Services and prices offered, or null. |
url | string | Doctoralia clinic profile URL. |
listingId | string | Doctoralia internal listing ID. |
phone | string | Contact phone in international format, or null. |
priceRange | string | Price range indicator, or null. |
fullAddress | string | Full postal address from the detail page, or null. |
description | string | Clinic description text, or null. |
doctors | object[] | Doctors practising at the clinic, or null. |
openingHours | object | Opening hours by day, or null. |
insurances | string[] | Accepted insurances, or null. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
aiLeadScore | integer | AI lead score 0 to 100 (lead-score add-on). |
aiLeadTier | string | AI lead tier hot, warm, or cold (add-on). |
aiLeadRationale | string | AI rationale for the lead score (add-on). |
aiSummary | string | AI summary of the clinic (summary add-on). |
aiIndustry | string | AI-classified primary medical field (industry add-on). |
aiCategories | string[] | AI specialty tags (industry add-on). |
enrichedEmail | string | Public contact email found by the contact add-on, or null. |
enrichedContactName | string | Contact person name found by the add-on, or null. |
enrichedJobTitle | string | Contact job title found by the add-on, or null. |
enrichedEmailStatus | string | Verification status of the enriched email. |
enrichedSource | string | Source URL where the contact was found. |
enrichedConfidence | number | Confidence score for the enriched contact. |
error | string | Present only on a failed run: a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"specialty":"Cardiología","country":"es","maxClinics":10,"withDetails":true}), reviews trimmed:
{"clinicName": null,"specialty": "Cardiología","rating": 5,"reviewsCount": 2941,"url": "https://www.doctoralia.es/clinicas/my-medica","listingId": "33167","phone": "+34663631999","fullAddress": "Doctoralia Internet SL C/ Josep Pla 2 - Building B2, floor 13 08019 Barcelona, Spain","observedAt": "2026-08-14T06:39:15.339Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~doctoralia-clinics-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"specialty":"Cardiología","location":"Ciudad de México","country":"mx","maxClinics":10,"withDetails":true}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~doctoralia-clinics-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"specialty":"Odontología","country":"es","maxClinics":50}'
Apify CLI:
apify call scrapers_lat/doctoralia-clinics-scraper \--input '{"specialty":"Laboratorio","country":"co","maxClinics":10}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per clinic returned (
resultevent). See the pricing tab for the current per-result price. - Paid add-ons. Contact enrichment, AI lead scoring, AI summary and AI classification are optional and billed separately per the events described above. They are disabled by default.
- No charge on failure. If a run errors before any clinic is collected, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 clinics per run (and 3 contact enrichments). Upgrade for higher
maxClinics.
FAQ and troubleshooting
A run returned 0 records. Why? The specialty and location combination matched no clinics. Try a broader specialty or remove the city. Zero-result runs are not charged.
Why is clinicName null on some records?
Doctoralia sometimes lists a center under a professional profile without a distinct clinic name. The record still ships with the URL, rating, phone and address. Missing values are returned as null, never invented.
Why are services, doctors or openingHours null?
Those come from the detail page. Enable withDetails (on by default) and note that not every clinic publishes all of them.
Which countries are supported?
Mexico, Spain, Brazil, Argentina, Colombia, Chile and Peru, selected with the country field.
Is this an official Doctoralia tool? No. This actor is independent and has no affiliation with Doctoralia or Docplanner. It reads only data that is publicly available on Doctoralia. Use it in accordance with the Doctoralia terms of service.
Related scrapers
- Doctoralia Doctors Scraper: full doctor profiles, specialties, reviews and contact details.
- Doctoralia Appointment Availability Scraper: real bookable appointment slots per doctor.
- Healthgrades Doctors Scraper: US doctor profiles and ratings.
- Google Maps Business Leads Scraper: local business leads with contacts.
- NPPES NPI Registry Scraper: US healthcare provider NPI records.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Doctoralia or Docplanner. Accesses only publicly available Doctoralia data. Use in accordance with the Doctoralia terms of service.
