# Wellness.com Scraper - Dentist, Doctor & Health Provider Leads (`scrapesage/wellness-com-scraper`) Actor

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.

- **URL**: https://apify.com/scrapesage/wellness-com-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 provider scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Wellness.com Scraper — Dentist, Doctor & Health Provider Leads (Phones, Ratings & Websites)

Extract **complete health & wellness provider data** from [Wellness.com](https://www.wellness.com) — one of the largest US provider directories — and turn it into **ready-to-contact B2B leads**. Pick a specialty (dentists, doctors, chiropractors, veterinarians, optometrists, dermatologists, physical therapists, psychologists, spas, gyms…) and a location, and get **name, phone, full street address, specialty, star rating, individual reviews, opening hours, accepted payment methods, and the practice's own website** — plus a 0–100 lead score on every record.

No login, no cookies, no browser — fast server-rendered extraction with 99%+ reliability.

### Why this Wellness.com scraper?

Most provider scrapers return a name and a maybe-phone and stop. This actor pulls the structured data Wellness.com publishes for **80+ provider categories** and ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Provider name + specialty | ✅ | ✅ |
| Phone number | partial | ✅ |
| Full street address (street, city, state, ZIP) | partial | ✅ |
| Star rating + review count | ❌ | ✅ opt-in |
| Individual review text + author + date | ❌ | ✅ opt-in |
| Accepted payment methods | ❌ | ✅ opt-in |
| Opening hours (per day) | ❌ | ✅ opt-in |
| **Practice website** (the email-crawl wedge) | ❌ | ✅ opt-in |
| Price range | ❌ | ✅ |
| Lead score (0–100) | ❌ | ✅ |
| Monitor mode (only new / changed) | ❌ | ✅ |

### Use cases

- **Healthcare & local-business lead generation** — dentists, doctors, chiropractors, vets, optometrists, therapists and spas are high-value buyers of SaaS, billing, supplies, staffing, marketing, equipment financing and insurance. Score them by completeness (`leadScore`) and reach them directly by `phone` or `website`.
- **Territory & market mapping** — pull every provider of a given specialty across a city or an entire state to size and map a market.
- **CRM & list building** — export clean, deduplicated provider lists with full addresses straight to your CRM or sales tool.
- **Competitive & reputation intelligence** — track ratings, review counts and review text for providers in any market.
- **Monitoring new providers** — schedule recurring runs and capture only newly listed or changed providers for a fresh-lead feed.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Wellness.com Scraper**, choose specialties and locations (or paste Wellness.com URLs), and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "specialties": ["Dentists"],
    "locations": ["Austin, TX"],
    "includeProfileDetails": true,
    "maxReviewsPerProvider": 10,
    "maxItems": 100
}
````

- **specialties** — one or more provider types. Pick from the list (Dentists, Chiropractors, Veterinarians, Optometrists, Dermatologists, Physical Therapy, Psychologists, Med Spa, Gyms…) or type any Wellness.com category. Each specialty is combined with every location.
- **locations** — `City, ST` (`Austin, TX`), `City, State name`, or a bare state (`Texas`) to sweep that state's cities.
- **startUrls** — paste Wellness.com listing pages (`/find/dentist/tx/austin`) or provider profile pages (`/dir/.../`) directly.
- **includeProfileDetails** *(default true)* — fetch each provider's profile for rating, reviews, payment methods, opening hours and the practice website. Turn off for fast name + phone + address only.
- **maxReviewsPerProvider** *(default 10)* — cap individual reviews per provider.
- **withPhoneOnly / withWebsiteOnly** — keep only providers with a phone / a website.
- **minRating / minReviewCount** — quality filters (require profile enrichment).
- **maxItems** *(default 100)* — cap on the number of provider records.
- **maxCitiesPerState** *(default 25)* — cities to crawl when a location is a bare state.
- **deduplicateProviders** *(default true)* — drop duplicate providers across all searches.
- **monitorMode** *(default false)* — output only new / changed providers (see below).

### Output

One record per provider:

```json
{
    "providerId": "2312582",
    "name": "Craft of Dentistry",
    "specialty": "Dentist",
    "phone": "(512) 441-2684",
    "street": "7002 Menchaca Road #100",
    "city": "Austin",
    "state": "Texas",
    "stateCode": "TX",
    "zip": "78745",
    "country": "US",
    "description": "At Craft of Dentistry, modern dentistry is elevated through a seamless blend of innovation, artistry, and compassionate care…",
    "priceRange": "$",
    "rating": 5,
    "reviewCount": 3,
    "paymentAccepted": ["American Express", "Apple Pay", "Cash", "Check", "Discover", "Financing", "MasterCard", "Visa"],
    "openingHours": [
        { "day": "Monday", "opens": "08:30:00", "closes": "17:00:00" }
    ],
    "reviews": [
        { "rating": 5, "text": "Dr. Lyon is a wonderful dentist…", "author": "EthanK", "date": "May 05, 2015" }
    ],
    "website": "https://dentistsouthaustintx.com",
    "leadScore": 88,
    "profileUrl": "https://www.wellness.com/dir/2312582/dentist/tx/austin/craft-of-dentistry",
    "searchSpecialty": "dentist",
    "searchLocation": "Austin, TX",
    "scrapedAt": "2026-06-23T12:00:00.000Z"
}
```

Fields are `null` only when Wellness.com doesn't publish them (e.g. a provider with no reviews yet), never because the scraper skipped them.

### Monitor mode — only new or changed providers

Turn on **monitorMode** and the actor remembers every provider it has seen (in a named key-value store) and, on the next run, outputs only providers that are **new** or whose phone / rating / reviews / website changed — each tagged with `monitorStatus: "new"` or `"updated"`.

This is **independent of [Apify Schedules](https://docs.apify.com/platform/schedules)**: schedule the actor to run daily or weekly and monitor mode turns it into a fresh-lead feed without re-charging you for providers you already have. Use a distinct `monitorStoreName` per saved search to keep their histories separate.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it hourly/daily/weekly; combine with monitor mode for a rolling new-provider feed.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/wellness-com-scraper').call({
    specialties: ['Dentists', 'Chiropractors'],
    locations: ['Austin, TX', 'Dallas, TX'],
    includeProfileDetails: true,
    maxItems: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} provider leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new provider leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new providers.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find dentists in Austin with a website and 4+ stars" and let it run this scraper for you.

### More scrapers from scrapesage

Build a complete **healthcare & local-business lead-gen stack**:

- **[Healthgrades Scraper](https://apify.com/scrapesage/healthgrades-scraper)** — doctor profiles, specialties, and ratings.
- **[WebMD Scraper](https://apify.com/scrapesage/webmd-scraper)** — physician directory data.
- **[Doctoralia Scraper](https://apify.com/scrapesage/doctoralia-scraper)** — doctor listings and reviews.
- **[NPI Registry Scraper](https://apify.com/scrapesage/npi-nppes-scraper)** — the official US healthcare provider registry.
- **[Psychology Today Scraper](https://apify.com/scrapesage/psychology-today-scraper)** — therapist and mental-health provider leads.
- **[TherapyDen Scraper](https://apify.com/scrapesage/therapyden-scraper)** — therapist directory leads.
- **[SAMHSA Treatment Facility Scraper](https://apify.com/scrapesage/samhsa-treatment-facility-scraper)** — addiction & mental-health treatment centers.
- **[Booksy Scraper](https://apify.com/scrapesage/booksy-scraper)** — salon, barber & beauty provider leads.
- **[Fresha Scraper](https://apify.com/scrapesage/fresha-scraper)** — salon, spa & wellness business leads.
- **[Google Maps Scraper](https://apify.com/scrapesage/google-maps-scraper)** — local business leads, emails and phones.
- **[TaxBuzz Scraper](https://apify.com/scrapesage/taxbuzz-scraper)** — accountant & tax-preparer leads.
- **[Avvo Scraper](https://apify.com/scrapesage/avvo-scraper)** — lawyer leads, ratings and reviews.

### Tips

- **Sweep a whole state**: put a bare state in `locations` (e.g. `Florida`) and raise `maxCitiesPerState`. Combine with `maxItems` to cap the run.
- **Cheaper, faster runs**: turn off `includeProfileDetails` to get name + phone + address only (no rating/reviews/website, no profile-enrichment charge).
- **Quality lists**: set `minReviewCount` or `withWebsiteOnly` to keep only established practices.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to capture only newly listed providers.

### FAQ

**How do I scrape every dentist in a state?** Put the state name in `locations` (e.g. `Texas`), keep `specialties` as `["Dentists"]`, and set `maxCitiesPerState` and `maxItems` high enough for the coverage you want.

**Where do the phone numbers come from?** Wellness.com publishes them on the provider's listing and profile — this actor reads the same public data a visitor sees.

**Where does the website come from?** From the provider's own profile page, when they've listed one. With the website you can enrich further (emails, socials) using a contact scraper.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new providers automatically?** Turn on `monitorMode`, then create a [Schedule](https://docs.apify.com/platform/schedules) (e.g. daily). Optionally add a [webhook](https://docs.apify.com/platform/integrations/webhooks) or [Zapier zap](https://docs.apify.com/platform/integrations/zapier) to push new leads into your CRM.

**Is scraping Wellness.com legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and Wellness.com's terms.

**A field is null — why?** Some providers genuinely don't publish a website, reviews, or hours. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `specialties` (type: `array`):

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.

## `locations` (type: `array`):

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.

## `startUrls` (type: `array`):

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.

## `includeProfileDetails` (type: `boolean`):

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.

## `maxReviewsPerProvider` (type: `integer`):

Maximum individual reviews to include in each provider record (only when profile enrichment is on).

## `withPhoneOnly` (type: `boolean`):

Keep only providers that have a phone number.

## `withWebsiteOnly` (type: `boolean`):

Keep only providers whose profile lists a practice website (requires profile enrichment).

## `minRating` (type: `integer`):

Keep only providers with a star rating at or above this value (1–5, requires profile enrichment).

## `minReviewCount` (type: `integer`):

Keep only providers with at least this many reviews (requires profile enrichment).

## `maxItems` (type: `integer`):

Maximum number of provider records to return.

## `maxPagesPerCity` (type: `integer`):

Safety cap on result pages (50 providers each) to page through per city/specialty.

## `maxCitiesPerState` (type: `integer`):

When a location is a bare state, the maximum number of its cities to crawl.

## `deduplicateProviders` (type: `boolean`):

Drop duplicate providers (same Wellness.com profile ID) across all searches in this run.

## `monitorMode` (type: `boolean`):

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.

## `monitorStoreName` (type: `string`):

Name of the key-value store that holds monitor-mode state. Use a distinct name per saved search to keep their histories separate.

## `maxConcurrency` (type: `integer`):

Concurrent profile-page fetches when enrichment is on.

## `maxAttemptsPerPage` (type: `integer`):

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.

## `proxyConfiguration` (type: `object`):

Proxy settings. Wellness.com works on the default Apify Proxy; switch to RESIDENTIAL for very large runs if you see soft-blocks.

## Actor input object example

```json
{
  "specialties": [
    "Dentists"
  ],
  "locations": [
    "Austin, TX"
  ],
  "startUrls": [],
  "includeProfileDetails": true,
  "maxReviewsPerProvider": 10,
  "withPhoneOnly": false,
  "withWebsiteOnly": false,
  "maxItems": 100,
  "maxPagesPerCity": 20,
  "maxCitiesPerState": 25,
  "deduplicateProviders": true,
  "monitorMode": false,
  "monitorStoreName": "wellness-monitor",
  "maxConcurrency": 6,
  "maxAttemptsPerPage": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped provider records in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "specialties": [
        "Dentists"
    ],
    "locations": [
        "Austin, TX"
    ],
    "startUrls": [],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/wellness-com-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "specialties": ["Dentists"],
    "locations": ["Austin, TX"],
    "startUrls": [],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/wellness-com-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "specialties": [
    "Dentists"
  ],
  "locations": [
    "Austin, TX"
  ],
  "startUrls": [],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/wellness-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/wellness-com-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
