# 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:** 4 total users, 3 monthly users, 97.4% 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

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

Download the OpenAPI definition: https://api.apify.com/v2/actors/42NRS28kNzF1PEM8e/builds/MY9iMSYZTg7NjPyTd/openapi.json
