# Psychology Today Scraper - Therapist & Mental Health Leads (`scrapesage/psychology-today-scraper`) Actor

Scrape Psychology Today therapists, psychiatrists & treatment centers by city, state, ZIP or profile URL. Get names, credentials, license, phone, addresses, specialties, modalities, fees, insurance accepted & lead score.

- **URL**: https://apify.com/scrapesage/psychology-today-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

$12.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

## Psychology Today Scraper — Therapists, Psychiatrists & Treatment Center Leads

Extract **complete provider data from [Psychology Today](https://www.psychologytoday.com)** — the largest mental-health directory in the US & Canada. Search by **city, state, ZIP, specialty or profile URL** and get every therapist, psychiatrist, treatment center and support group as a ready-to-use **B2B lead**: name, credentials, license number, phone, every office address with geo-coordinates, specialties, modalities, session fees, insurance accepted, and a 0–100 lead score.

No login, no API key, no browser automation on your side — fast, reliable extraction with a built-in **monitor mode** that returns only *new* providers on each run.

### Why this Psychology Today scraper?

Generic "paste-a-URL" crawlers grab a few visible fields and miss the data that actually matters. This actor reads Psychology Today's structured listing and profile data directly and ships the **richest dataset in the category** — merging each provider's directory card with their full profile in a single run.

| Data | Generic crawlers | This actor |
|---|---|---|
| Name, credentials, profile URL | partial | ✅ ~100% |
| **Phone** (with extension) | partial | ✅ ~95% |
| **Every office address + lat/long** | ❌ | ✅ |
| **License number, issuing state & expiry** | ❌ | ✅ when listed |
| Top specialties + areas of expertise | partial | ✅ |
| Types of therapy / modalities | ❌ | ✅ |
| Client focus (age groups, participants, communities) | ❌ | ✅ |
| Session fees, sliding scale & payment methods | ❌ | ✅ when listed |
| **Insurance plans accepted** | ❌ | ✅ when listed |
| Years in practice, telehealth, accepting new clients | ❌ | ✅ |
| Full personal bio | ❌ | ✅ ~95% |
| Lead score (0–100) | ❌ | ✅ |
| Monitor mode — only NEW providers | ❌ | ✅ |
| One clean, dense table (no empty columns) | ❌ | ✅ |

### Use cases

- **Lead generation for vendors who sell to clinicians** — EHR & practice-management software (SimplePractice, TheraNest, Headway, Alma), insurance credentialing, medical billing, malpractice insurance, supervision/CEU providers, telehealth platforms and marketing agencies. Export providers with phone, address, license and specialties straight into your CRM.
- **Treatment center & rehab prospecting** — pull addiction and behavioral-health facilities by market for partnerships, referrals or M&A.
- **Healthcare market & competitive research** — map provider density, modalities, fee ranges and insurance acceptance by city or specialty.
- **Referral networks & directories** — build curated, geo-tagged provider lists for a niche, condition or population.
- **Recruiting** — find licensed clinicians by location, specialty and modality with contact details.

### 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 **Psychology Today Scraper**, enter one or more locations (e.g. `Austin, TX`, `New York, NY`, `90210` or `California`), choose a **Provider type**, and (optionally) add specialty filters.
3. Click **Start** and 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
{
    "locations": ["Austin, TX", "Miami, FL"],
    "providerType": "therapist",
    "specialties": ["anxiety"],
    "includeProfileDetails": true,
    "maxResults": 100,
    "monitorMode": false,
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}
````

- **locations** — `City, ST` (`Austin, TX`), a 5-digit `ZIP` (`78701`), or a whole state (`Texas` / `CA`, which discovers its largest metros). Combined with every specialty.
- **providerType** *(default `therapist`)* — `therapist`, `psychiatrist`, `treatment-center` or `support-group`.
- **specialties** *(optional)* — issue categories to filter listings by (`anxiety`, `depression`, `trauma-and-ptsd`, `couples-counseling`, `emdr`, `adhd`, `addiction`…). Leave empty for all providers in each location.
- **startUrls** *(optional)* — direct Psychology Today profile, city-listing or state URLs. The directory in the URL overrides the provider type.
- **includeProfileDetails** *(default `true`)* — open each profile for the full bio, license, fees, insurance, modalities, client focus, languages and all office locations. One extra page per provider.
- **maxResults / maxResultsPerCity / maxCitiesPerState** — caps to keep runs fast and predictable.
- **Filters** — `acceptingNewClientsOnly`, `acceptsInsuranceOnly`, `offersTelehealthOnly`, `minYearsInPractice`, `withPhoneOnly`.
- **monitorMode** *(default `false`)* — emit only providers not seen in previous runs (see below).
- **proxyConfiguration** — Psychology Today requires a **RESIDENTIAL US** proxy (the default). It serves clean pages to residential IPs but blocks datacenter ones.

### Output

By default you get **one clean, dense table** — every column applies to every row. A provider record:

```json
{
    "providerType": "therapist",
    "profileId": "341783",
    "name": "Julie Osofsky",
    "credentials": "Licensed Professional Counselor, MS, LPC",
    "jobTitle": "Licensed Professional Counselor",
    "phone": "(512) 714-2751 x2",
    "acceptingNewClients": true,
    "offersTelehealth": true,
    "street": "4807 Spicewood Springs Rd",
    "city": "Austin",
    "state": "Texas",
    "postalCode": "78759",
    "latitude": 30.376619,
    "longitude": -97.7641452,
    "locationCount": 2,
    "locations": [
        { "street": "4807 Spicewood Springs Rd", "city": "Austin", "state": "Texas", "postalCode": "78759", "latitude": 30.376619, "longitude": -97.7641452 },
        { "city": "Dallas", "state": "Texas", "postalCode": "75205" }
    ],
    "bio": "Julie has more than 16 years of experience working with individuals, families, and groups…",
    "specialties": ["Anxiety", "Addiction", "Self Esteem"],
    "expertise": ["Dual Diagnosis", "Mood Disorders", "Relationship Issues"],
    "typesOfTherapy": ["Cognitive Behavioral (CBT)", "Dialectical Behavior (DBT)", "Humanistic"],
    "ageGroups": ["Teen", "Adults"],
    "participants": ["Individuals"],
    "languages": ["English"],
    "feeIndividual": 165,
    "slidingScale": true,
    "paymentMethods": ["Cash", "Check", "Health Savings Account", "Mastercard", "Visa"],
    "acceptsInsurance": false,
    "insuranceAccepted": [],
    "licenseNumber": "64088",
    "licenseState": "Texas",
    "licenseExpires": "2028-03-01",
    "yearsInPractice": 19,
    "imageUrl": "https://photos.psychologytoday.com/.../320x400.jpeg",
    "profileUrl": "https://www.psychologytoday.com/us/therapists/julie-osofsky-austin-tx/341783",
    "leadScore": 87,
    "scrapedAt": "2026-06-23T17:10:24.000Z"
}
```

#### What to expect (field coverage)

Psychology Today is provider-entered data, so a few fields appear only when the clinician filled them in. Verified across multiple markets, you can typically expect:

| Field group | Always present | Usually present | Present when published |
|---|---|---|---|
| Name, credentials, profile URL, provider type | ✅ | — | — |
| **Phone**, primary city/state/ZIP | — | ~95% | — |
| Specialties, accepting-new-clients, telehealth, photo | — | ~90% (with profile details) | — |
| **License number + state + expiry**, years in practice, modalities, client focus | — | — | when the provider lists them |
| Session fees, payment methods, **insurance accepted**, languages, full bio | — | — | when the provider lists them |
| Second/third office locations + geo | — | — | multi-office providers |

A blank field means the provider didn't publish it — never that scraping failed. Nothing is dropped, so you always get the richest dataset available.

### Monitor mode & scheduling

Turn on **monitorMode** to get a fresh-leads feed: the actor remembers every provider it has returned in a named key-value store and, on the next run, emits **only providers it hasn't seen before**. Pair it with [Apify Schedules](https://docs.apify.com/platform/schedules) to capture newly-listed therapists in your markets every day or week.

Monitor mode is **fully compatible with the Apify scheduler** — they do different jobs. The schedule *triggers* the run; monitor mode *deduplicates* that run's results against everything earlier runs already returned. Use distinct `monitorStoreName` values to run independent monitors side by side.

### 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 daily/weekly to capture new providers as they list.
- **[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/psychology-today-scraper').call({
    locations: ['Austin, TX'],
    providerType: 'therapist',
    includeProfileDetails: true,
});

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

### 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 market adds 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. 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 "list every therapist in Austin who accepts insurance, with their phone and specialties" and let it run the scraper for you.

### More scrapers from scrapesage

Build a complete **healthcare & mental-health lead-gen stack**:

- **[TherapyDen Scraper](https://apify.com/scrapesage/therapyden-scraper)** — therapists & counselors with insurance, techniques and recovered emails.
- **[SAMHSA Treatment Facility Scraper](https://apify.com/scrapesage/samhsa-treatment-facility-scraper)** — official US addiction & mental-health treatment facilities.
- **[Healthgrades Scraper](https://apify.com/scrapesage/healthgrades-scraper)** — doctors, ratings, conditions and provider leads.
- **[WebMD Scraper](https://apify.com/scrapesage/webmd-scraper)** — physicians, reviews, insurance and contact details.
- **[Doctoralia Scraper](https://apify.com/scrapesage/doctoralia-scraper)** — doctors, clinics, reviews and appointment data.
- **[NPI Registry Scraper](https://apify.com/scrapesage/npi-nppes-scraper)** — the official US healthcare-provider registry (NPI, taxonomy, address).
- **[US Healthcare Facility Leads Scraper](https://apify.com/scrapesage/us-healthcare-facility-leads-scraper)** — hospitals, clinics and facilities nationwide.
- **[Senior Care Facility Leads Scraper](https://apify.com/scrapesage/senior-care-facility-leads-scraper)** — assisted-living, nursing and senior-care leads.

### Tips

- **Keep `includeProfileDetails` on** — it's the difference between a name and a fully-qualified, contactable lead (license, fees, insurance, modalities and all office locations). It adds one fast page per provider.
- **Use a RESIDENTIAL US proxy** (the default). Psychology Today blocks datacenter IPs; residential IPs are served cleanly.
- **Narrow with specialties** to build condition-specific lists (e.g. `addiction` providers for a treatment-center campaign).
- **Recurring monitoring** — combine `monitorMode` with [Schedules](https://docs.apify.com/platform/schedules) for a daily feed of newly-listed clinicians in your target markets.

### FAQ

**Which directories can I scrape?** Therapists & counselors, psychiatrists, treatment centers / rehabs and support groups — choose with `providerType`, or pass direct URLs of any type in `startUrls`.

**Does it need the Psychology Today API or a key?** No. It reads the same public data shown on every listing and profile page — no key, login or browser needed on your side.

**Why does it require a residential proxy?** Psychology Today serves clean pages to residential US IPs but challenges datacenter ones. The default RESIDENTIAL US proxy handles this automatically and rotates on any block.

**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 get only new providers over time?** Turn on `monitorMode` and schedule the actor — each run returns only providers not seen before.

**A field is empty — why?** Some providers don't publish a fee, insurance, license or second office. Fields are blank only when the provider didn't list that data — never because the scraper skipped it.

**Is scraping Psychology Today legal?** This actor collects publicly available business-directory data only. You're responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and Psychology Today's terms.

### 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

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

Where to search. Use <code>City, ST</code> (<code>Austin, TX</code>, <code>New York, NY</code>), a 5-digit <code>ZIP</code> (<code>78701</code>), or a whole state (<code>Texas</code>, <code>CA</code> — discovers its biggest metros). Each location is combined with every specialty below.

## `providerType` (type: `string`):

Which Psychology Today directory to scrape.

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

Optional issue categories to filter listings by, combined with every location: <code>anxiety</code>, <code>depression</code>, <code>trauma-and-ptsd</code>, <code>couples-counseling</code>, <code>emdr</code>, <code>cognitive-behavioral-cbt</code>, <code>lgbtq</code>, <code>adhd</code>, <code>addiction</code>, <code>grief</code>, <code>eating-disorders</code>, <code>marriage-counseling</code>. Leave empty for all providers in each location.

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

Direct Psychology Today URLs: provider profiles (<code>/us/therapists/jane-doe-austin-tx/123456</code>), city listings (<code>/us/therapists/tx/austin</code>), or state pages (<code>/us/psychiatrists/ca</code>). Used in addition to the locations above; the directory in the URL overrides the provider type.

## `maxResults` (type: `integer`):

Maximum number of provider records to scrape across all locations and specialties.

## `maxResultsPerCity` (type: `integer`):

Cap per city/zip listing (each listing page holds 20 providers).

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

When a whole state is given, how many of its metros to scrape (largest first).

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

Open each provider's profile for the full bio, license number + issuing state + expiry, years in practice, top specialties + expertise, types of therapy / modalities, client focus (age groups, participants, communities), languages, session fees, payment methods, insurance plans accepted and every work location with geo. Highly recommended — one extra page per provider.

## `acceptingNewClientsOnly` (type: `boolean`):

Keep only providers flagged as accepting new clients.

## `acceptsInsuranceOnly` (type: `boolean`):

Keep only providers who list at least one in-network insurance plan (requires profile details).

## `offersTelehealthOnly` (type: `boolean`):

Keep only providers who offer online / video sessions.

## `minYearsInPractice` (type: `integer`):

Keep only providers with at least this many years in practice (requires profile details).

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

Keep only providers that expose a phone number (the vast majority do).

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

Emit each provider at most once per run (a provider can appear under several specialties/cities).

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

Remember providers from previous runs in a named key-value store and emit only NEW ones on each run. Pair with Apify Schedules for a daily fresh-lead feed. Works alongside the scheduler — it does not conflict with it.

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

Named key-value store used to remember already-seen providers across runs. Use distinct names for independent monitors (lowercase letters, digits and hyphens only).

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

How many profile/listing pages to fetch in parallel.

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

Proxies to use. Psychology Today requires a RESIDENTIAL US proxy — it is reliably clean to residential IPs but blocks datacenter ones. Keep the default unless you have your own residential proxy.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "providerType": "therapist",
  "maxResults": 100,
  "maxResultsPerCity": 60,
  "maxCitiesPerState": 4,
  "includeProfileDetails": true,
  "acceptingNewClientsOnly": false,
  "acceptsInsuranceOnly": false,
  "offersTelehealthOnly": false,
  "minYearsInPractice": 0,
  "withPhoneOnly": false,
  "deduplicateProviders": true,
  "monitorMode": false,
  "monitorStoreName": "psychology-today-monitor",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "locations": [
        "Austin, TX"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/psychology-today-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 = {
    "locations": ["Austin, TX"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/psychology-today-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 '{
  "locations": [
    "Austin, TX"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapesage/psychology-today-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Psychology Today Scraper - Therapist & Mental Health Leads",
        "description": "Scrape Psychology Today therapists, psychiatrists & treatment centers by city, state, ZIP or profile URL. Get names, credentials, license, phone, addresses, specialties, modalities, fees, insurance accepted & lead score.",
        "version": "0.1",
        "x-build-id": "1rpDMEnC9ojEqnYOG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~psychology-today-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-psychology-today-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~psychology-today-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-psychology-today-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~psychology-today-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-psychology-today-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": {
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Where to search. Use <code>City, ST</code> (<code>Austin, TX</code>, <code>New York, NY</code>), a 5-digit <code>ZIP</code> (<code>78701</code>), or a whole state (<code>Texas</code>, <code>CA</code> — discovers its biggest metros). Each location is combined with every specialty below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "providerType": {
                        "title": "Provider type",
                        "enum": [
                            "therapist",
                            "psychiatrist",
                            "treatment-center",
                            "support-group"
                        ],
                        "type": "string",
                        "description": "Which Psychology Today directory to scrape.",
                        "default": "therapist"
                    },
                    "specialties": {
                        "title": "Specialties / issues (optional)",
                        "type": "array",
                        "description": "Optional issue categories to filter listings by, combined with every location: <code>anxiety</code>, <code>depression</code>, <code>trauma-and-ptsd</code>, <code>couples-counseling</code>, <code>emdr</code>, <code>cognitive-behavioral-cbt</code>, <code>lgbtq</code>, <code>adhd</code>, <code>addiction</code>, <code>grief</code>, <code>eating-disorders</code>, <code>marriage-counseling</code>. Leave empty for all providers in each location.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct Psychology Today URLs: provider profiles (<code>/us/therapists/jane-doe-austin-tx/123456</code>), city listings (<code>/us/therapists/tx/austin</code>), or state pages (<code>/us/psychiatrists/ca</code>). Used in addition to the locations above; the directory in the URL overrides the provider type.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Max providers",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of provider records to scrape across all locations and specialties.",
                        "default": 100
                    },
                    "maxResultsPerCity": {
                        "title": "Max providers per location",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap per city/zip listing (each listing page holds 20 providers).",
                        "default": 60
                    },
                    "maxCitiesPerState": {
                        "title": "Max cities per state",
                        "minimum": 1,
                        "type": "integer",
                        "description": "When a whole state is given, how many of its metros to scrape (largest first).",
                        "default": 4
                    },
                    "includeProfileDetails": {
                        "title": "Include full profile details",
                        "type": "boolean",
                        "description": "Open each provider's profile for the full bio, license number + issuing state + expiry, years in practice, top specialties + expertise, types of therapy / modalities, client focus (age groups, participants, communities), languages, session fees, payment methods, insurance plans accepted and every work location with geo. Highly recommended — one extra page per provider.",
                        "default": true
                    },
                    "acceptingNewClientsOnly": {
                        "title": "Only providers accepting new clients",
                        "type": "boolean",
                        "description": "Keep only providers flagged as accepting new clients.",
                        "default": false
                    },
                    "acceptsInsuranceOnly": {
                        "title": "Only providers who accept insurance",
                        "type": "boolean",
                        "description": "Keep only providers who list at least one in-network insurance plan (requires profile details).",
                        "default": false
                    },
                    "offersTelehealthOnly": {
                        "title": "Only providers offering telehealth",
                        "type": "boolean",
                        "description": "Keep only providers who offer online / video sessions.",
                        "default": false
                    },
                    "minYearsInPractice": {
                        "title": "Minimum years in practice",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only providers with at least this many years in practice (requires profile details).",
                        "default": 0
                    },
                    "withPhoneOnly": {
                        "title": "Only providers with a phone number",
                        "type": "boolean",
                        "description": "Keep only providers that expose a phone number (the vast majority do).",
                        "default": false
                    },
                    "deduplicateProviders": {
                        "title": "Deduplicate providers",
                        "type": "boolean",
                        "description": "Emit each provider at most once per run (a provider can appear under several specialties/cities).",
                        "default": true
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new providers)",
                        "type": "boolean",
                        "description": "Remember providers from previous runs in a named key-value store and emit only NEW ones on each run. Pair with Apify Schedules for a daily fresh-lead feed. Works alongside the scheduler — it does not conflict with it.",
                        "default": false
                    },
                    "monitorStoreName": {
                        "title": "Monitor store name",
                        "type": "string",
                        "description": "Named key-value store used to remember already-seen providers across runs. Use distinct names for independent monitors (lowercase letters, digits and hyphens only).",
                        "default": "psychology-today-monitor"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many profile/listing pages to fetch in parallel.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxies to use. Psychology Today requires a RESIDENTIAL US proxy — it is reliably clean to residential IPs but blocks datacenter ones. Keep the default unless you have your own residential proxy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
