# Psychology Today Therapist Scraper (`jungle_synthesizer/psychology-today-therapist-scraper`) Actor

Scrape therapist and counselor profiles from PsychologyToday.com. Extract names, credentials, specialties, insurance accepted, fees, languages, addresses, phones, and bios. Filter by U.S. state, ZIP, or any category slug (specialty, insurance, language, treatment orientation).

- **URL**: https://apify.com/jungle\_synthesizer/psychology-today-therapist-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation, Business, Other
- **Stats:** 5 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Psychology Today Therapist Scraper

Scrape therapist and counselor profiles from [Psychology Today](https://www.psychologytoday.com), the largest US therapist directory with roughly 200,000 listings. Returns names, credentials, specialties, insurance accepted, fees, languages, addresses, phones, bios, and license details — the fields most CRMs ask for, plus a few you didn't know you wanted.

### Psychology Today Scraper Features

- Filters by U.S. state, ZIP code, or any Psychology Today category slug — specialty, insurance brand, language, treatment orientation, you name it
- Returns 35+ structured fields per profile, including the things therapists rarely volunteer in plain HTML
- Reads Psychology Today's embedded SPA payload directly. No browser, no Playwright, no waiting for hydration
- Formats phone numbers consistently as `(XXX) XXX-XXXX`
- Uses US residential proxies — Psychology Today aggressively blocks datacenter IPs
- Pay-per-event pricing at roughly $0.002 per profile, which is less than most paid lead lists charge per record

### Who Uses Psychology Today Data?

- **EHR and practice-management vendors** — build targeted outreach lists for SimplePractice, TherapyNotes, TheraNest competitors
- **Insurance billing services** — segment therapists by insurance panels accepted and license type
- **Telehealth platforms** — recruit providers who already offer online sessions, filtered by state license
- **Mental-health analytics teams** — map provider density, fee distributions, and specialty coverage by region
- **CEU and training providers** — segment by treatment orientation and credentials
- **Marketing agencies serving private-practice therapists** — reach prospects by city, specialty, or modality

### How Psychology Today Scraper Works

1. You provide states, ZIP codes, or direct seed URLs — and an optional category slug to narrow by specialty, insurance, or language. Run with the defaults if you just want a sample.
2. The scraper paginates through Psychology Today's directory listings (20 results per page, configurable depth) and collects therapist profile URLs.
3. Each profile is fetched directly and parsed from the embedded SPA payload. That payload contains the fully-hydrated profile, so one HTTP request returns every field — no JavaScript execution, no second round-trip.
4. Records save to the dataset as they're scraped. The run stops when `maxItems` is reached.

### Input

#### Scrape one state

```json
{
  "states": ["CA"],
  "maxPages": 5,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  },
  "sp_intended_usage": "Lead generation for therapy practice software",
  "sp_improvement_suggestions": "n/a"
}
````

#### Filter by specialty

```json
{
  "states": ["NY", "NJ"],
  "category": "anxiety",
  "maxItems": 200,
  "sp_intended_usage": "Specialty-targeted outreach",
  "sp_improvement_suggestions": "n/a"
}
```

#### Filter by insurance

```json
{
  "states": ["TX"],
  "category": "aetna",
  "maxItems": 50,
  "sp_intended_usage": "Aetna network analysis",
  "sp_improvement_suggestions": "n/a"
}
```

#### Search by ZIP

```json
{
  "zipCodes": ["90025", "10001", "94110"],
  "maxPages": 3,
  "maxItems": 60,
  "sp_intended_usage": "Local therapist directory build",
  "sp_improvement_suggestions": "n/a"
}
```

#### Scrape specific profiles directly

```json
{
  "seedUrls": [
    { "url": "https://www.psychologytoday.com/us/therapists/alexa-golding-los-angeles-ca/1001791" }
  ],
  "maxItems": 1,
  "sp_intended_usage": "Profile enrichment",
  "sp_improvement_suggestions": "n/a"
}
```

#### Input Parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| states | string\[] | `["CA"]` | One or more U.S. state codes. Each state is paginated separately. |
| zipCodes | string\[] | — | List of 5-digit ZIP codes. Each becomes a radius search on psychologytoday.com. |
| category | string | — | Optional category slug applied to every state/ZIP search. Examples: `anxiety`, `trauma-and-ptsd`, `aetna`, `spanish`, `cognitive-behavioral-cbt`. |
| seedUrls | array | — | Direct listing or profile URLs. When provided, takes precedence — scoped state/ZIP/category inputs are ignored for those URLs. |
| maxPages | integer | 5 | Maximum pagination depth per state/ZIP/seed. Each page returns 20 profiles. |
| maxItems | integer | 100 | Maximum total profiles to scrape across all seeds. |
| proxyConfiguration | object | Apify residential US | Proxy settings. Datacenter proxies are blocked by Psychology Today, so residential is the only realistic option. |

### Psychology Today Scraper Output Fields

```json
{
  "profileId": 1001791,
  "profileUrl": "https://www.psychologytoday.com/us/therapists/alexa-golding-los-angeles-ca/1001791",
  "name": "Alexa Golding",
  "firstName": "Alexa",
  "lastName": "Golding",
  "pronouns": "she, her",
  "credentials": "LMFT",
  "jobTitle": "Family Therapist",
  "verificationStatus": "VERIFIED",
  "practiceName": "",
  "address": "Los Angeles, CA 90025",
  "city": "Los Angeles",
  "state": "CA",
  "stateName": "California",
  "zip": "90025",
  "countryCode": "US",
  "phone": "(310) 789-2157",
  "photoUrl": "https://photos.psychologytoday.com/.../320x400.jpeg",
  "bio": "You've always been the caretaker for others...",
  "yearsInPractice": 9,
  "yearPracticeStarted": 2017,
  "degree": "MA Clinical Psychology",
  "institution": "The Chicago School of Professional Psychology",
  "licenseNumber": "130043",
  "licenseState": "CA",
  "licenseExpiration": "2027-12-01",
  "individualSessionCost": 225,
  "couplesSessionCost": 250,
  "initialSessionCost": 0,
  "slidingScale": false,
  "acceptsOnline": true,
  "acceptsInPerson": false,
  "acceptingNewClients": true,
  "issues": ["ADHD", "Anxiety", "Codependency", "Trauma and PTSD"],
  "treatmentOrientations": ["Attachment-based", "Cognitive Behavioral (CBT)", "Mindfulness-based (MBCT)"],
  "modalities": ["Individuals", "Couples"],
  "ageGroups": ["Adults"],
  "languages": ["English"],
  "insurance": ["Aetna", "Anthem", "Blue Cross", "Optum", "UnitedHealthcare"],
  "paymentMethods": ["American Express", "Mastercard", "Visa"],
  "lastUpdated": "2026-04-20T23:52:31-07:00"
}
```

| Field | Type | Description |
|-------|------|-------------|
| profileId | number | Numeric Psychology Today profile ID |
| profileUrl | string | Full profile URL on psychologytoday.com |
| name | string | Therapist full name |
| firstName | string | First name |
| lastName | string | Last name |
| pronouns | string | Self-reported pronouns |
| credentials | string | Credential suffix (e.g. `LMFT`, `PsyD, Licensed Psychologist`) |
| jobTitle | string | Profile health-role label (e.g. `Marriage & Family Therapist`) |
| verificationStatus | string | `VERIFIED` if Psychology Today has confirmed the license |
| practiceName | string | Group practice or company name (when present) |
| address | string | Primary practice formatted as `City, ST ZIP` |
| city | string | Primary practice city |
| state | string | Primary practice state code |
| stateName | string | Primary practice state full name |
| zip | string | Primary practice ZIP code |
| countryCode | string | Country code |
| phone | string | Formatted phone number |
| photoUrl | string | Profile photo URL |
| bio | string | Combined personal-statement paragraphs |
| yearsInPractice | number | Years in clinical practice |
| yearPracticeStarted | number | Year practice started |
| degree | string | Highest degree held |
| institution | string | Educational institution |
| licenseNumber | string | Primary license identifier |
| licenseState | string | Primary license issuing state |
| licenseExpiration | string | License expiration date (YYYY-MM-DD) |
| individualSessionCost | number | Cost per individual session in USD (0 if undisclosed) |
| couplesSessionCost | number | Cost per couples session in USD (0 if undisclosed) |
| initialSessionCost | number | Cost for initial session in USD (0 if undisclosed) |
| slidingScale | boolean | Whether the therapist offers sliding-scale fees |
| acceptsOnline | boolean | Whether the therapist offers online / telehealth sessions |
| acceptsInPerson | boolean | Whether the therapist offers in-person sessions |
| acceptingNewClients | boolean | Whether the therapist is currently accepting new clients |
| issues | string\[] | Issues or specialties (anxiety, trauma, ADHD, etc.) |
| treatmentOrientations | string\[] | Treatment orientations (CBT, DBT, EMDR, etc.) |
| modalities | string\[] | Modalities offered (Individuals, Couples, Group, Family) |
| ageGroups | string\[] | Age groups served |
| languages | string\[] | Languages spoken |
| insurance | string\[] | Insurance plans accepted |
| paymentMethods | string\[] | Accepted payment methods |
| lastUpdated | string | ISO timestamp of the profile's last update on psychologytoday.com |

### FAQ

#### How do I scrape Psychology Today?

Psychology Today Scraper handles it. Pick a state or ZIP, optionally add a category filter, set a `maxItems` cap, and run. The scraper paginates the directory and pulls each profile's full data from the embedded SPA payload — no browser required.

#### What data can I get from Psychology Today?

Psychology Today Scraper returns 35+ fields per therapist, including name, credentials, practice address, phone, fee structure (individual, couples, initial, sliding-scale flag), session formats (online vs in-person), license number and expiration, insurance accepted, languages, treatment orientations, and a full bio. Email and external website URLs are gated behind a click-through interstitial on the site itself, so those two fields are not included.

#### How much does Psychology Today Scraper cost to run?

Psychology Today Scraper uses pay-per-event pricing — $0.10 per actor start plus $0.001 per record scraped. A 1,000-profile run costs roughly $1.10. Apify residential proxy usage is metered separately by Apify.

#### Does Psychology Today Scraper need proxies?

Psychology Today Scraper requires Apify residential proxies. Datacenter IPs get 403'd within ~100 requests, and most public free proxies are already blocked. The default proxy configuration in the input schema is set to US residential — leave it alone unless you have a reason not to.

#### Can I filter by insurance or specialty?

Psychology Today Scraper supports any Psychology Today category slug via the `category` input. That covers specialties (`anxiety`, `trauma-and-ptsd`), treatment orientations (`cognitive-behavioral-cbt`, `emdr`), insurance brands (`aetna`, `bluecross`, `kaiser`), languages (`spanish`, `mandarin`), and ethnicities. Browse the slugs on psychologytoday.com — the URL after `?category=` is exactly what to pass.

#### How fresh is the data?

Psychology Today Scraper returns whatever Psychology Today is showing right now. Each record includes a `lastUpdated` field so you can see when the therapist last edited their profile.

### Need More Features?

Need custom fields, additional country directories (UK, Canada, Australia), or a different filter? File an issue or get in touch.

### Why Use Psychology Today Scraper?

- **Affordable** — about $0.002 per profile after the start fee, which beats every paid therapist directory we've checked
- **Complete output** — 35+ structured fields per profile, including fees, sliding-scale flag, license details, and treatment orientations that most directory scrapers skip
- **Fast** — pulls profile data from the embedded SPA payload in a single request, no browser hydration overhead

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `states` (type: `array`):

Select one or more U.S. states. Leave empty to use seedUrls or zipCodes instead.

## `zipCodes` (type: `array`):

List of U.S. ZIP codes to crawl. Each ZIP becomes a separate radius search.

## `category` (type: `string`):

Optional category slug applied to every state/ZIP search. Examples: 'anxiety', 'trauma-and-ptsd', 'aetna', 'spanish', 'cognitive-behavioral-cbt'.

## `seedUrls` (type: `array`):

Listing or profile URLs. Bypasses state/ZIP/category inputs when provided.

## `maxPages` (type: `integer`):

Maximum pagination depth per state/ZIP/seed URL. Each page returns 20 profiles.

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

Maximum number of therapist profiles to scrape across all seeds.

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

Apify proxy settings. Datacenter or U.S. residential recommended for high-volume runs.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "states": [
    "CA"
  ],
  "maxPages": 5,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "states": [
        "CA"
    ],
    "category": "",
    "maxPages": 5,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/psychology-today-therapist-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "states": ["CA"],
    "category": "",
    "maxPages": 5,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/psychology-today-therapist-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "states": [
    "CA"
  ],
  "category": "",
  "maxPages": 5,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call jungle_synthesizer/psychology-today-therapist-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Psychology Today Therapist Scraper",
        "description": "Scrape therapist and counselor profiles from PsychologyToday.com. Extract names, credentials, specialties, insurance accepted, fees, languages, addresses, phones, and bios. Filter by U.S. state, ZIP, or any category slug (specialty, insurance, language, treatment orientation).",
        "version": "1.0",
        "x-build-id": "AiVryMmCRQWFa88kW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~psychology-today-therapist-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-psychology-today-therapist-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/jungle_synthesizer~psychology-today-therapist-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-psychology-today-therapist-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/jungle_synthesizer~psychology-today-therapist-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-psychology-today-therapist-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": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "states": {
                        "title": "U.S. States",
                        "type": "array",
                        "description": "Select one or more U.S. states. Leave empty to use seedUrls or zipCodes instead.",
                        "items": {
                            "type": "string",
                            "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"
                            ],
                            "enumTitles": [
                                "Alabama",
                                "Alaska",
                                "Arizona",
                                "Arkansas",
                                "California",
                                "Colorado",
                                "Connecticut",
                                "Delaware",
                                "District of Columbia",
                                "Florida",
                                "Georgia",
                                "Hawaii",
                                "Idaho",
                                "Illinois",
                                "Indiana",
                                "Iowa",
                                "Kansas",
                                "Kentucky",
                                "Louisiana",
                                "Maine",
                                "Maryland",
                                "Massachusetts",
                                "Michigan",
                                "Minnesota",
                                "Mississippi",
                                "Missouri",
                                "Montana",
                                "Nebraska",
                                "Nevada",
                                "New Hampshire",
                                "New Jersey",
                                "New Mexico",
                                "New York",
                                "North Carolina",
                                "North Dakota",
                                "Ohio",
                                "Oklahoma",
                                "Oregon",
                                "Pennsylvania",
                                "Rhode Island",
                                "South Carolina",
                                "South Dakota",
                                "Tennessee",
                                "Texas",
                                "Utah",
                                "Vermont",
                                "Virginia",
                                "Washington",
                                "West Virginia",
                                "Wisconsin",
                                "Wyoming"
                            ]
                        }
                    },
                    "zipCodes": {
                        "title": "ZIP Codes",
                        "type": "array",
                        "description": "List of U.S. ZIP codes to crawl. Each ZIP becomes a separate radius search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category Filter",
                        "type": "string",
                        "description": "Optional category slug applied to every state/ZIP search. Examples: 'anxiety', 'trauma-and-ptsd', 'aetna', 'spanish', 'cognitive-behavioral-cbt'."
                    },
                    "seedUrls": {
                        "title": "Direct Seed URLs",
                        "type": "array",
                        "description": "Listing or profile URLs. Bypasses state/ZIP/category inputs when provided.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxPages": {
                        "title": "Max Pages Per Seed",
                        "type": "integer",
                        "description": "Maximum pagination depth per state/ZIP/seed URL. Each page returns 20 profiles.",
                        "default": 5
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of therapist profiles to scrape across all seeds.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy settings. Datacenter or U.S. residential recommended for high-volume runs."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
