{
  "openapi": "3.0.1",
  "info": {
    "title": "Wellness.com Scraper - Dentist, Doctor & Health Provider Leads",
    "description": "Scrape Wellness.com health & wellness providers by specialty and city. Get name, phone, full address, specialty, rating, reviews, hours, payment methods, website & lead score for dentists, doctors, chiropractors, vets and more.",
    "version": "0.1",
    "x-build-id": "2S447yiiD8ZWOLIgO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~wellness-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-wellness-com-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/scrapesage~wellness-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-wellness-com-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/scrapesage~wellness-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-wellness-com-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": {
          "specialties": {
            "title": "Specialties",
            "type": "array",
            "description": "Provider types to scrape. Pick from the list or type any Wellness.com category (e.g. \"Acupuncturists\", \"Med Spa\"). Each specialty is combined with every location.",
            "items": {
              "type": "string",
              "enum": [
                "Dentists",
                "Orthodontists",
                "Chiropractors",
                "Veterinarians",
                "Optometrists",
                "Ophthalmologists",
                "Dermatologists",
                "Physical Therapy",
                "Podiatrists",
                "Acupuncturists",
                "Nutritionists",
                "Audiologists",
                "Cardiologists",
                "Pediatricians",
                "OBGYN",
                "Gynecologists",
                "Psychiatrists",
                "Psychologists",
                "Counselors",
                "ENT",
                "Gastroenterologists",
                "Neurologists",
                "Urologists",
                "Oncologists",
                "Endocrinologists",
                "Rheumatologists",
                "Pulmonologists",
                "Nephrologists",
                "Anesthesiologists",
                "Surgeons",
                "Internists",
                "Geriatricians",
                "Doctors",
                "Pharmacies",
                "Hospitals",
                "Hospice",
                "Medical Supplies",
                "Fitness",
                "Gyms",
                "Spas",
                "Day Spa",
                "Med Spa",
                "Massage Spa",
                "Salons",
                "Weight Loss Center",
                "Insurance"
              ]
            },
            "default": [
              "Dentists"
            ]
          },
          "locations": {
            "title": "Locations (City, ST or State)",
            "type": "array",
            "description": "Where to scrape. Use `City, ST` (e.g. `Austin, TX`), `City, State name`, or a bare state (`Texas`) to sweep that state's cities. Each location is combined with every specialty.",
            "default": [
              "Austin, TX"
            ],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Wellness.com URLs (advanced)",
            "type": "array",
            "description": "Paste Wellness.com directory URLs — listing pages (e.g. https://www.wellness.com/find/dentist/tx/austin) or provider profile pages (https://www.wellness.com/dir/.../). These run in addition to the specialties/locations above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeProfileDetails": {
            "title": "Enrich with provider profiles",
            "type": "boolean",
            "description": "Fetch each provider's profile page to add star rating, review count, individual reviews, payment methods, opening hours and the practice website. Slower and billed per profile-enrichment event. Turn off for fast name + phone + address only.",
            "default": true
          },
          "maxReviewsPerProvider": {
            "title": "Max reviews per provider",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum individual reviews to include in each provider record (only when profile enrichment is on).",
            "default": 10
          },
          "withPhoneOnly": {
            "title": "Only providers with a phone",
            "type": "boolean",
            "description": "Keep only providers that have a phone number.",
            "default": false
          },
          "withWebsiteOnly": {
            "title": "Only providers with a website",
            "type": "boolean",
            "description": "Keep only providers whose profile lists a practice website (requires profile enrichment).",
            "default": false
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only providers with a star rating at or above this value (1–5, requires profile enrichment)."
          },
          "minReviewCount": {
            "title": "Minimum review count",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only providers with at least this many reviews (requires profile enrichment)."
          },
          "maxItems": {
            "title": "Max providers",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of provider records to return.",
            "default": 100
          },
          "maxPagesPerCity": {
            "title": "Max pages per city",
            "minimum": 1,
            "type": "integer",
            "description": "Safety cap on result pages (50 providers each) to page through per city/specialty.",
            "default": 20
          },
          "maxCitiesPerState": {
            "title": "Max cities per state",
            "minimum": 1,
            "type": "integer",
            "description": "When a location is a bare state, the maximum number of its cities to crawl.",
            "default": 25
          },
          "deduplicateProviders": {
            "title": "Deduplicate providers",
            "type": "boolean",
            "description": "Drop duplicate providers (same Wellness.com profile ID) across all searches in this run.",
            "default": true
          },
          "monitorMode": {
            "title": "Monitor mode (only new / changed)",
            "type": "boolean",
            "description": "Remember providers seen in previous runs (in a named key-value store) and output only providers that are NEW or whose phone / rating / reviews / website changed. Each record gets a monitorStatus of \"new\" or \"updated\". Works independently of Apify Schedules — schedule this actor daily/weekly to build a fresh-lead feed.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Name of the key-value store that holds monitor-mode state. Use a distinct name per saved search to keep their histories separate.",
            "default": "wellness-monitor"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Concurrent profile-page fetches when enrichment is on.",
            "default": 6
          },
          "maxAttemptsPerPage": {
            "title": "Max attempts per page",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Fresh proxy sessions to try before giving up on a page. Wellness.com occasionally soft-blocks an IP with an empty result; more attempts = higher coverage.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Wellness.com works on the default Apify Proxy; switch to RESIDENTIAL for very large runs if you see soft-blocks.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}