{
  "openapi": "3.0.1",
  "info": {
    "title": "Doctolib France Scraper | Doctors & Clinics",
    "description": "Find doctors, dentists and clinics on Doctolib France by specialty and city. Collect public profiles, practice addresses, phone numbers where available and visit motives. Export results to CSV, Excel or JSON, with optional region enrichment.",
    "version": "0.4",
    "x-build-id": "EgT7vbzAG5ZVZ1VpI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datascraperes~doctolib-france-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datascraperes-doctolib-france-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/datascraperes~doctolib-france-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datascraperes-doctolib-france-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/datascraperes~doctolib-france-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datascraperes-doctolib-france-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "profileSlugs": {
            "title": "Public profile identifiers (optional)",
            "maxItems": 50,
            "type": "array",
            "description": "Add one public Doctolib France profile identifier per item, for example laurent-martini-paris. Up to 50 profiles are supported; repeated identifiers are collected once. Leave this list empty to search by specialty and city. To collect only these profiles, clear both search lists.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          "searchKeywords": {
            "title": "Specialties or keywords",
            "maxItems": 20,
            "type": "array",
            "description": "Add one French specialty or keyword per item, for example dentiste, Médecin généraliste, or Pédiatre. Accents, capitalization and extra spaces are accepted. Each term is searched in every city below: two terms and three cities create six searches. Enter both a specialty and a city, with at most 20 combinations.",
            "items": {
              "minLength": 1,
              "type": "string",
              "maxLength": 200
            }
          },
          "searchCities": {
            "title": "Cities in France",
            "maxItems": 20,
            "type": "array",
            "description": "Add one complete French city name per item, for example Paris, Lyon, or Marseille. If several places share a name, include the department code, for example Saint-Denis, 93. Use city names rather than postal codes or districts. Results may include nearby providers. Each city is searched for every specialty above.",
            "items": {
              "minLength": 1,
              "type": "string",
              "maxLength": 200
            }
          },
          "locale": {
            "title": "Profile language",
            "enum": [
              "fr",
              "en",
              "de",
              "it"
            ],
            "type": "string",
            "description": "Choose the language for details collected from the optional profile list: French, English, German, or Italian. Some information may remain in its original language. This setting does not translate specialty searches. The default is French.",
            "default": "fr"
          },
          "includeRegion": {
            "title": "Include the French administrative region",
            "type": "boolean",
            "description": "Add the administrative region, such as Ile De France, to provider locations with a valid French postal code. This is optional and does not add a separate result charge. If the region is unavailable, the main provider details are kept and the result is marked partial.",
            "default": false
          },
          "maxPagesPerSearch": {
            "title": "Maximum pages per search",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Set how many pages to check for each specialty and city combination, from 1 to 50. Increase this to look for more providers. A search stops sooner if it reaches its result limit or the overall limit. If more results may remain, the run summary is marked partial.",
            "default": 5
          },
          "maxResultsPerSearch": {
            "title": "Maximum results per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Set the maximum number of provider results for each specialty and city combination, from 1 to 1,000. The page limit and overall result limit also apply. Fewer providers may be returned when there are not enough matches.",
            "default": 100
          },
          "maxTotalRecords": {
            "title": "Maximum results for the entire run",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Set the overall result limit, from 1 to 5,000. This includes all profiles and specialty searches together. The prefilled example collects up to 3 results; increase it for a larger collection. Failed lookups and run summaries do not count as results.",
            "default": 100
          },
          "continueOnError": {
            "title": "Continue when a profile or search is unavailable",
            "type": "boolean",
            "description": "When enabled, continue with the remaining profiles and searches if one cannot be collected. When disabled, stop after the first lookup issue. Already collected results remain available in either case, and the run summary is marked partial with an explanation.",
            "default": true
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}