{
  "openapi": "3.0.1",
  "info": {
    "title": "ZocDoc + Healthgrades Doctors & Reviews Scraper",
    "description": "Scrape physicians, specialists, ratings, reviews, accepted insurance, locations, and bio data from ZocDoc.com and Healthgrades.com. Single actor with platform switch (zocdoc | healthgrades). No login required.",
    "version": "1.0",
    "x-build-id": "c7AKPSJymfjR2irwa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawlerbros~zocdoc-healthgrades-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawlerbros-zocdoc-healthgrades-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/crawlerbros~zocdoc-healthgrades-scraper/runs": {
      "post": {
        "operationId": "runs-sync-crawlerbros-zocdoc-healthgrades-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/crawlerbros~zocdoc-healthgrades-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-crawlerbros-zocdoc-healthgrades-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",
        "required": [
          "platform",
          "mode"
        ],
        "properties": {
          "platform": {
            "title": "Platform",
            "enum": [
              "healthgrades",
              "zocdoc"
            ],
            "type": "string",
            "description": "Which provider directory to scrape. Healthgrades is recommended (works from Apify datacenter IPs without proxy). ZocDoc is fronted by aggressive DataDome anti-bot that blocks even residential proxies most of the time — use only when you have a clean residential IP pool.",
            "default": "healthgrades"
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "byProvider",
              "bySpecialty",
              "byCity",
              "byInsurance",
              "byUrl"
            ],
            "type": "string",
            "description": "What to scrape. `search` accepts city + specialty; `byProvider` takes a provider URL or slug; `bySpecialty` browses a single specialty hub; `byCity` lists every specialty in a city; `byInsurance` filters by an accepted plan (ZocDoc-only); `byUrl` accepts arbitrary listing URLs.",
            "default": "search"
          },
          "specialty": {
            "title": "Specialty",
            "enum": [
              "primary-care-doctor",
              "family-physician",
              "internist",
              "pediatrician",
              "obstetrician-gynecologist",
              "dermatologist",
              "ophthalmologist",
              "optometrist",
              "ent-doctor",
              "dentist",
              "orthodontist",
              "endodontist",
              "periodontist",
              "oral-surgeon",
              "pediatric-dentist",
              "prosthodontist",
              "psychiatrist",
              "psychologist",
              "therapist-counselor",
              "marriage-counselor",
              "psychotherapist",
              "child-psychiatrist",
              "addiction-medicine",
              "cardiologist",
              "gastroenterologist",
              "endocrinologist",
              "rheumatologist",
              "pulmonologist",
              "neurologist",
              "nephrologist",
              "hematologist",
              "infectious-disease",
              "allergist",
              "immunologist",
              "geriatrician",
              "oncologist",
              "radiation-oncologist",
              "surgical-oncologist",
              "general-surgeon",
              "vascular-surgeon",
              "plastic-surgeon",
              "neurosurgeon",
              "cardiothoracic-surgeon",
              "colon-rectal-surgeon",
              "hand-surgeon",
              "orthopedic-surgeon",
              "podiatrist",
              "urologist",
              "sports-medicine",
              "physical-therapist",
              "occupational-therapist",
              "speech-therapist",
              "chiropractor",
              "acupuncturist",
              "massage-therapist",
              "naturopath",
              "midwife",
              "nurse-practitioner",
              "physician-assistant",
              "audiologist",
              "dietitian-nutritionist",
              "anesthesiologist",
              "pain-management-specialist",
              "sleep-medicine",
              "emergency-medicine",
              "hospice-palliative-care",
              "preventive-medicine",
              "physiatrist",
              "radiologist",
              "pathologist",
              "neonatologist",
              "perinatologist",
              "reproductive-endocrinologist",
              "fertility-specialist",
              "urogynecologist",
              "maternal-fetal-medicine",
              "gynecologic-oncologist",
              "pediatric-cardiologist",
              "pediatric-neurologist",
              "pediatric-orthopedic-surgeon",
              "pediatric-endocrinologist",
              "pediatric-allergist"
            ],
            "type": "string",
            "description": "Medical specialty slug. Used by `search` and `bySpecialty`."
          },
          "city": {
            "title": "City slug or 'city, ST'",
            "type": "string",
            "description": "City for `search`, `byCity`. ZocDoc format: `new-york-ny`, `los-angeles-ca`. Healthgrades format: `New York, NY` or `Boston, MA`. The actor accepts either form and normalizes per platform."
          },
          "state": {
            "title": "US state code",
            "enum": [
              "AL",
              "AK",
              "AZ",
              "AR",
              "CA",
              "CO",
              "CT",
              "DE",
              "DC",
              "FL",
              "GA",
              "HI",
              "ID",
              "IL",
              "IN",
              "IA",
              "KS",
              "KY",
              "LA",
              "ME",
              "MD",
              "MA",
              "MI",
              "MN",
              "MS",
              "MO",
              "MT",
              "NE",
              "NV",
              "NH",
              "NJ",
              "NM",
              "NY",
              "NC",
              "ND",
              "OH",
              "OK",
              "OR",
              "PA",
              "RI",
              "SC",
              "SD",
              "TN",
              "TX",
              "UT",
              "VT",
              "VA",
              "WA",
              "WV",
              "WI",
              "WY"
            ],
            "type": "string",
            "description": "Two-letter US state code (used for disambiguation when city alone is ambiguous)."
          },
          "gender": {
            "title": "Provider gender",
            "enum": [
              "any",
              "female",
              "male"
            ],
            "type": "string",
            "description": "Filter providers by gender (best-effort — not all providers expose this).",
            "default": "any"
          },
          "language": {
            "title": "Language spoken",
            "enum": [
              "any",
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "ru",
              "zh",
              "ja",
              "ko",
              "vi",
              "ar",
              "hi",
              "bn",
              "pa",
              "ur",
              "fa",
              "tr",
              "pl",
              "uk",
              "nl",
              "sv",
              "da",
              "no",
              "fi",
              "el",
              "he",
              "th",
              "tl",
              "id",
              "ms",
              "sw",
              "ro",
              "hu",
              "cs",
              "sk",
              "bg",
              "hr",
              "sr",
              "ta",
              "te",
              "ml",
              "mr",
              "gu",
              "kn",
              "yo",
              "ig",
              "ha",
              "am",
              "so",
              "ps"
            ],
            "type": "string",
            "description": "Filter providers who speak this language (ISO 639-1 code).",
            "default": "any"
          },
          "acceptsNewPatients": {
            "title": "Accepting new patients only",
            "type": "boolean",
            "description": "Drop providers not currently accepting new patients.",
            "default": false
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Drop providers with star rating below this threshold (1-5)."
          },
          "minReviewCount": {
            "title": "Minimum review count",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Drop providers with fewer reviews than this."
          },
          "insurance": {
            "title": "Insurance plan (ZocDoc only)",
            "enum": [
              "any",
              "aetna",
              "anthem-blue-cross",
              "blue-cross-blue-shield",
              "cigna",
              "humana",
              "united-healthcare",
              "kaiser-permanente",
              "medicare",
              "medicaid",
              "tricare",
              "ambetter",
              "amerigroup",
              "centene",
              "molina",
              "wellcare",
              "fidelis",
              "emblemhealth",
              "healthfirst",
              "metroplus",
              "carefirst",
              "horizon-bcbs",
              "highmark",
              "premera",
              "regence",
              "florida-blue",
              "blue-shield-california",
              "empire-bcbs",
              "independence-blue-cross",
              "anthem-bcbs",
              "hcsc",
              "molina-healthcare",
              "oscar",
              "magellan",
              "beacon-health-options",
              "optum",
              "evernorth",
              "meritain",
              "healthnet",
              "bright-health",
              "guardian",
              "delta-dental",
              "metlife-dental",
              "principal",
              "vsp",
              "eyemed",
              "mvp-healthcare",
              "tufts",
              "harvard-pilgrim",
              "blueshield-northeastern-ny",
              "geha",
              "fep-blue",
              "uhc-community-plan"
            ],
            "type": "string",
            "description": "Filter providers who accept this insurance plan. ZocDoc-only — Healthgrades doesn't expose plan-level filtering.",
            "default": "any"
          },
          "providerUrlsOrSlugs": {
            "title": "Provider URLs or slugs (mode=byProvider)",
            "type": "array",
            "description": "Provider profile URLs (e.g. `https://www.zocdoc.com/doctor/john-smith-md-12345`, `https://www.healthgrades.com/physician/dr-john-smith-xyz`) or just the slug.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Listing URLs (mode=byUrl)",
            "type": "array",
            "description": "Raw ZocDoc or Healthgrades listing/search URLs to scrape.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "fetchProviderDetails": {
            "title": "Fetch full provider details",
            "type": "boolean",
            "description": "Whether to follow each search-result URL to fetch the full provider profile (bio, ratings, languages, insurance, locations, reviews). Disable for faster but lighter listing-only output.",
            "default": true
          },
          "maxReviewsPerProvider": {
            "title": "Max reviews per provider",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Cap on reviews emitted per provider (0 = no reviews).",
            "default": 20
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap on emitted provider records.",
            "default": 25
          },
          "maxPagesPerListing": {
            "title": "Max listing pages to crawl",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many search-result pages to walk per seed.",
            "default": 3
          },
          "autoEscalateOnBlock": {
            "title": "Auto-escalate to Apify proxy on block",
            "type": "boolean",
            "description": "When a fetch returns 403/anti-bot block, automatically engage Apify Proxy (datacenter US → residential US fallback). Both ZocDoc (DataDome) and Healthgrades (geo-block) require US-egress proxy from cloud datacenters.",
            "default": true
          },
          "proxyGroups": {
            "title": "Apify proxy groups (used on auto-escalation)",
            "type": "array",
            "description": "Proxy groups to try on the first block. Empty = datacenter (default), then residential fallback automatically.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}