Doctolib Italy Scraper
Pricing
from $1.49 / 1,000 results
Doctolib Italy Scraper
Scrape 200k+ doctor profiles from Doctolib.it. Name, specialty, address, GPS coordinates, phone, insurance details. No API key needed.
Pricing
from $1.49 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

Scrape complete doctor and practitioner profiles from Doctolib.it — Italy's largest online appointment booking platform with over 200,000 registered healthcare professionals. Covers all 130+ medical specialties across every Italian city. No API key required.
Why this scraper?
🇮🇹 Full Italian Coverage
Access all 200,000+ doctors registered on Doctolib.it, from general practitioners to specialists across 130 medical disciplines.
🏥 Rich Practice Data
Each profile includes full practice address, GPS coordinates, phone number, floor, accessibility (elevator, handicap access), parking, and nearby public transport stations.
📋 Specialty & City Filtering
Narrow results to any combination of specialty slug and city slug — scrape only cardiologists in Rome, or all practitioners in Milan.
💊 Insurance & Billing Details
Captures regulation sector, insurance card acceptance, and third-party payer information where available.
🔄 Scheduled Run Support
Built-in deduplication with a 90-day rolling cache — run daily or weekly and collect only new registrations.
⚡ No Proxy Required
Runs entirely on Apify's compute — no residential proxy costs. The cheapest possible architecture for this data.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
specialtySlug | string | "" | Specialty slug from Doctolib URL (e.g. cardiologo, medico-di-medicina-generale, dermatologo-venereologo). Empty = all specialties. |
citySlug | string | "" | City slug from Doctolib URL (e.g. roma, milano, napoli, torino). Empty = all cities. |
searchQuery | string | "" | Free-text filter applied to specialty + city + doctor name in the URL. |
maxResults | integer | 100 | Maximum number of profiles to return. |
skipSeen | boolean | false | Skip doctors already scraped in previous runs (90-day TTL cache). |
startUrls | array | [] | Specific Doctolib.it doctor profile URLs to scrape directly. |
Finding specialty slugs: Browse to any specialty page on doctolib.it (e.g. doctolib.it/cardiologo) and copy the path segment.
Finding city slugs: The URL doctolib.it/cardiologo/roma uses roma as the city slug.
Output schema
Always present
| Field | Type | Description |
|---|---|---|
id | string | Unique Doctolib doctor ID (numeric string). |
url | string | Full canonical URL of the doctor's Doctolib profile. |
slug | string | URL slug identifying the doctor on Doctolib. |
name | string | Full name with title (e.g. "Dott. Mario Rossi"). |
lastName | string | Surname only, as stored by Doctolib. |
specialty | string | Medical specialty name in Italian (e.g. "Cardiologo"). |
specialtySlug | string | Specialty URL slug (e.g. "cardiologo"). |
specialtyId | integer | Internal Doctolib specialty ID. |
specialtyKind | string | Specialty category — "medical", "paramedical", or "non_healthcare". |
isOrganization | boolean | true if the profile is a clinic/organization rather than an individual. |
isPractitioner | boolean | true for individual practitioners. |
bio | string|null | Professional biography text (null if not provided by the doctor). |
websiteUrl | string|null | Doctor's personal or practice website (null if not provided). |
address | string|null | Primary practice street address. |
fullAddress | string|null | Primary practice full address including postcode and city. |
city | string|null | Primary practice city. |
zipcode | string|null | Primary practice postcode. |
latitude | number|null | GPS latitude of primary practice. |
longitude | number|null | GPS longitude of primary practice. |
phone | string|null | Primary practice phone number (formatted, e.g. "06 1234 5678"). |
openingHours | string|null | Opening hours text for primary practice (null if not set by doctor). |
places | array | All practice locations — see nested fields below. |
places[].address | string|null | Street address of this practice location. |
places[].fullAddress | string|null | Full address including city and postcode. |
places[].city | string|null | City of this practice location. |
places[].zipcode | string|null | Postcode of this practice location. |
places[].latitude | number|null | GPS latitude. |
places[].longitude | number|null | GPS longitude. |
places[].floor | string|null | Floor/level within the building (null if not specified). |
places[].elevator | boolean|null | Elevator access available (null if unknown). |
places[].handicapAccess | boolean|null | Wheelchair accessibility (null if unknown). |
places[].phone | string|null | Practice phone number. |
places[].faxNumber | string|null | Fax number (null if not provided). |
places[].receptionInfo | string|null | Reception / booking instructions. |
places[].openingHours | string|null | Opening hours text. |
places[].profileDescription | string|null | Description text for this specific location. |
places[].parking | boolean|null | Public parking nearby (null if unknown). |
places[].privateParking | boolean|null | Private parking on-site (null if unknown). |
places[].accessInformations | array | Directions / transit info items. |
places[].nearbyStations | array | Public transport stations near the practice. |
insuranceCard | string|null | Insurance card acceptance info (null if not published). |
regulationSector | string|null | Regulatory sector code (e.g. public/private, null if not set). |
regulationSectorWording | string|null | Human-readable wording of the regulation sector. |
thirdPartyPayer | boolean|null | Whether the doctor accepts third-party payer (null if unknown). |
skills | array | List of skills / sub-specialties declared by the doctor (often empty). |
avatarUrl | string|null | Profile photo URL (null if doctor uses default avatar). |
country | string | Always "it" for Doctolib Italy. |
source | string | Always "doctolib.it". |
scrapedAt | string | ISO 8601 timestamp of when this record was scraped. |
contentHash | string | 16-char MD5 fingerprint of id + specialty + city. |
JSON example
{"id": "1654041","url": "https://www.doctolib.it/odontoiatra/napoli/nicola-chiulli","slug": "nicola-chiulli","name": "Dott. Nicola Chiulli","lastName": "Chiulli","specialty": "Dentista","specialtySlug": "odontoiatra","specialtyId": 5832,"specialtyKind": "medical","isOrganization": false,"isPractitioner": true,"bio": null,"websiteUrl": null,"address": "VIALE MICHELANGELO 13","fullAddress": "VIALE MICHELANGELO 13, 80129 Napoli","city": "Napoli","zipcode": "80129","latitude": 40.8518,"longitude": 14.2681,"phone": "081 558 7702","openingHours": null,"places": [{"address": "VIALE MICHELANGELO 13","fullAddress": "VIALE MICHELANGELO 13, 80129 Napoli","city": "Napoli","zipcode": "80129","latitude": 40.8518,"longitude": 14.2681,"floor": null,"elevator": null,"handicapAccess": null,"phone": "081 558 7702","faxNumber": null,"receptionInfo": null,"openingHours": null,"profileDescription": null,"parking": null,"privateParking": null,"accessInformations": [],"nearbyStations": []}],"insuranceCard": null,"regulationSector": null,"regulationSectorWording": null,"thirdPartyPayer": null,"skills": [],"avatarUrl": null,"country": "it","source": "doctolib.it","scrapedAt": "2026-05-31T09:00:00.000Z","contentHash": "a3f7e2b1c9d04e58"}
Examples
1. Cardiologists in Rome
{"specialtySlug": "cardiologo","citySlug": "roma","maxResults": 200}
2. All general practitioners in Milan
{"specialtySlug": "medico-di-medicina-generale","citySlug": "milano","maxResults": 500}
3. Specific doctor profiles via startUrls
{"startUrls": [{ "url": "https://www.doctolib.it/cardiologo/brescia/alessandra-pelati" },{ "url": "https://www.doctolib.it/odontoiatra/napoli/nicola-chiulli" }]}
4. Daily feed — new practitioners only (scheduled run)
{"specialtySlug": "dermatologo-venereologo","maxResults": 1000,"skipSeen": true}
💰 Pricing
$1.49 per 1,000 results — you only pay for successfully retrieved doctor profiles.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.49 |
| 10,000 | ~$14.90 |
| 100,000 | ~$149.00 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Use the Max results cap to control your spend exactly.
Performance
| Run size | Approx. time | Memory |
|---|---|---|
| 100 profiles | ~2 min | 512 MB |
| 1,000 profiles | ~15 min | 512 MB |
| 10,000 profiles | ~2.5 hours | 512 MB |
| Full catalogue (~205,000) | ~2 days | 512 MB |
Known limitations
- Bio and website fields are only populated when the doctor has actively completed their Doctolib profile — typically 20–40% fill rate.
- Skills/sub-specialties are populated for a minority of practitioners who have added them.
- Opening hours and accessibility details (elevator, parking) are only populated when the practice has entered them into the platform.
- Photos: Only non-default avatars are returned; the majority of directory listings use the platform default image.
- Doctolib.it is Italian only — this actor covers
.itexclusively. A separate actor handles.fr.
Technical details
- Source: doctolib.it — Italy's leading online healthcare appointment platform
- Memory: 512 MB
- Dedup storage: KeyValueStore
doctolib-it-scraper-job-dedup, 90-day TTL - Retry: Automatic retry on network errors, exponential backoff, 3 attempts per request
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support?.nl](mailto:info@unfencedgroup.nl) — we build on request.
Related scrapers
Other scrapers in our Healthcare Booking collection:
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl