Doctolib Italy Scraper avatar

Doctolib Italy Scraper

Pricing

from $1.49 / 1,000 results

Go to Apify Store
Doctolib Italy Scraper

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

Unfenced Group

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Banner

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

ParameterTypeDefaultDescription
specialtySlugstring""Specialty slug from Doctolib URL (e.g. cardiologo, medico-di-medicina-generale, dermatologo-venereologo). Empty = all specialties.
citySlugstring""City slug from Doctolib URL (e.g. roma, milano, napoli, torino). Empty = all cities.
searchQuerystring""Free-text filter applied to specialty + city + doctor name in the URL.
maxResultsinteger100Maximum number of profiles to return.
skipSeenbooleanfalseSkip doctors already scraped in previous runs (90-day TTL cache).
startUrlsarray[]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

FieldTypeDescription
idstringUnique Doctolib doctor ID (numeric string).
urlstringFull canonical URL of the doctor's Doctolib profile.
slugstringURL slug identifying the doctor on Doctolib.
namestringFull name with title (e.g. "Dott. Mario Rossi").
lastNamestringSurname only, as stored by Doctolib.
specialtystringMedical specialty name in Italian (e.g. "Cardiologo").
specialtySlugstringSpecialty URL slug (e.g. "cardiologo").
specialtyIdintegerInternal Doctolib specialty ID.
specialtyKindstringSpecialty category โ€” "medical", "paramedical", or "non_healthcare".
isOrganizationbooleantrue if the profile is a clinic/organization rather than an individual.
isPractitionerbooleantrue for individual practitioners.
biostring|nullProfessional biography text (null if not provided by the doctor).
websiteUrlstring|nullDoctor's personal or practice website (null if not provided).
addressstring|nullPrimary practice street address.
fullAddressstring|nullPrimary practice full address including postcode and city.
citystring|nullPrimary practice city.
zipcodestring|nullPrimary practice postcode.
latitudenumber|nullGPS latitude of primary practice.
longitudenumber|nullGPS longitude of primary practice.
phonestring|nullPrimary practice phone number (formatted, e.g. "06 1234 5678").
openingHoursstring|nullOpening hours text for primary practice (null if not set by doctor).
placesarrayAll practice locations โ€” see nested fields below.
places[].addressstring|nullStreet address of this practice location.
places[].fullAddressstring|nullFull address including city and postcode.
places[].citystring|nullCity of this practice location.
places[].zipcodestring|nullPostcode of this practice location.
places[].latitudenumber|nullGPS latitude.
places[].longitudenumber|nullGPS longitude.
places[].floorstring|nullFloor/level within the building (null if not specified).
places[].elevatorboolean|nullElevator access available (null if unknown).
places[].handicapAccessboolean|nullWheelchair accessibility (null if unknown).
places[].phonestring|nullPractice phone number.
places[].faxNumberstring|nullFax number (null if not provided).
places[].receptionInfostring|nullReception / booking instructions.
places[].openingHoursstring|nullOpening hours text.
places[].profileDescriptionstring|nullDescription text for this specific location.
places[].parkingboolean|nullPublic parking nearby (null if unknown).
places[].privateParkingboolean|nullPrivate parking on-site (null if unknown).
places[].accessInformationsarrayDirections / transit info items.
places[].nearbyStationsarrayPublic transport stations near the practice.
insuranceCardstring|nullInsurance card acceptance info (null if not published).
regulationSectorstring|nullRegulatory sector code (e.g. public/private, null if not set).
regulationSectorWordingstring|nullHuman-readable wording of the regulation sector.
thirdPartyPayerboolean|nullWhether the doctor accepts third-party payer (null if unknown).
skillsarrayList of skills / sub-specialties declared by the doctor (often empty).
avatarUrlstring|nullProfile photo URL (null if doctor uses default avatar).
countrystringAlways "it" for Doctolib Italy.
sourcestringAlways "doctolib.it".
scrapedAtstringISO 8601 timestamp of when this record was scraped.
contentHashstring16-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.

ResultsCost
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 sizeApprox. timeMemory
100 profiles~2 min512 MB
1,000 profiles~15 min512 MB
10,000 profiles~2.5 hours512 MB
Full catalogue (~205,000)~2 days512 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 .it exclusively. 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.