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
0
Bookmarked
2
Total users
1
Monthly active users
a day 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? Send an email to info@unfencedgroup.nl โ we build on request.
Part of the Unfenced Group European scraper portfolio โ 100+ markets covered. Built by unfenced-group ยท Issues? Open a ticket or send a message.