# TherapyDen Scraper - Therapist & Mental Health Leads (`scrapesage/therapyden-scraper`) Actor

Scrape TherapyDen therapists by city, state, specialty or profile URL. Get names, credentials, phone, address, specialties, techniques, insurance accepted, session rates, telehealth states, websites & lead emails. No login, no browser.

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

## Pricing

from $6.61 / 1,000 therapist scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## TherapyDen Scraper — Therapists, Counselors & Mental-Health Provider Leads

Extract **complete mental-health provider data** from [TherapyDen](https://www.therapyden.com) — therapists, counselors, psychologists, clinical social workers, marriage & family therapists and psychiatrists — including the fields lead lists never have: **credentials & license, the exact issues they treat, the techniques/modalities they use, insurance accepted, session rates, years of practice, languages, telehealth states, phone, and their own practice website**. Optionally turn every provider into a **ready-to-contact lead** by crawling their website for a **contact email, phone and social links**.

No login, no cookies, no browser — fast, clean JSON extraction with 99%+ reliability.

### Why this TherapyDen scraper?

Most "therapist" data on the market is a flat email list, or comes from scrapers pointed at directories that sit behind heavy anti-bot walls (so they run slow, flaky, residential proxies and break often). This actor reads TherapyDen's clean public pages directly and ships the **richest mental-health provider dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Name + credentials/license (LPC, LCSW, LMFT, PsyD…) | partial | ✅ |
| Profession (counselor, social worker, psychologist…) | ❌ | ✅ |
| Phone number | partial | ✅ |
| City / state / ZIP + address | partial | ✅ |
| **Issues treated** (anxiety, trauma, ADHD, grief…) | ❌ | ✅ |
| **Techniques / modalities** (CBT, EMDR, DBT, ACT…) | ❌ | ✅ |
| **Insurance accepted** (+ accepts-insurance flag) | ❌ | ✅ |
| Session rate (min/max) | ❌ | ✅ |
| Years of practice + languages | ❌ | ✅ |
| Telehealth states served | ❌ | ✅ |
| Accepting-new-clients flag | ❌ | ✅ |
| Provider's own practice **website** | ❌ | ✅ |
| Contact **email** (from their website) | ❌ | ✅ opt-in |
| Social links (Instagram, LinkedIn, Facebook…) | ❌ | ✅ |
| Lead score (0–100) | ❌ | ✅ |

### Use cases

- **Lead generation** — mental-health practitioners are active B2B buyers of EHR / practice-management software, billing & insurance-credentialing services, scheduling tools, malpractice insurance, CEU/training, and marketing. Score them by contactability (`leadScore`) and reach them directly (`phone`, `website`, `email`).
- **Healthcare market intelligence** — map provider supply by city/state, specialty (`issuesTreated`), modality (`techniques`), insurance acceptance and session price by region.
- **Provider networks & referrals** — build referral directories filtered by issue, insurance, telehealth state and accepting-new-clients status.
- **Recruiting** — source licensed clinicians by credential, specialty, location and years of practice for group practices and telehealth platforms.
- **Competitor & coverage monitoring** — schedule recurring runs to watch a city or specialty for **newly listed** providers.

### 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 **TherapyDen Scraper**, enter locations (and optional specialties), and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "locations": ["Austin, TX", "California"],
    "issues": ["anxiety", "trauma-therapy"],
    "maxResults": 200,
    "includeProfileDetails": true,
    "enrichContactEmails": true,
    "acceptingNewClientsOnly": true
}
```

- **locations** — `City, ST` (`Austin, TX`, `New York, NY`) or a whole state (`California`, `TX`). States discover their cities automatically (`maxCitiesPerState`).
- **issues** *(optional)* — issue/technique slugs to filter by, combined with every location: `anxiety`, `depression`, `trauma-therapy`, `couples-counseling`, `emdr`, `cognitive-behavioral-therapy-cbt`, `dialectical-behavior-therapy-dbt`, `lgbtq-issues`, `adhd`, `addiction`, `grief-or-loss`, `eating-disorders`, `family-therapy`, and more.
- **startUrls** — direct TherapyDen URLs: profiles (`/therapist/…`), city listings (`/therapists/us/tx/austin`), or state pages (`/therapists/us/tx`).
- **includeProfileDetails** *(default true)* — full profile: phone, address, issues treated, techniques, insurance, rate, years of practice, languages, telehealth states, website.
- **enrichContactEmails** *(default false)* — crawl each provider's own website (home + contact/about, up to 3 pages) for a contact email, phone and extra socials.
- **Filters** — `acceptingNewClientsOnly`, `acceptsInsuranceOnly`, `minYearsOfPractice`, `withPhoneOnly`, `withWebsiteOnly`, `withEmailOnly`.
- **monitorMode** *(default false)* — emit only providers not seen in previous runs (see *Automate & schedule*).

### Output

One record per therapist (`type: "therapist"`):

```json
{
    "type": "therapist",
    "slug": "jane-doe-austin-tx",
    "profileUrl": "https://www.therapyden.com/therapist/jane-doe-austin-tx",
    "fullName": "Jane Doe",
    "credentials": ["LPC", "LCSW"],
    "licenseTitle": "LPC, LCSW",
    "profession": "Licensed Professional Counselor",
    "tagline": "Trauma-informed, LGBTQ+ affirming therapy for adults.",
    "phone": "512-555-0134",
    "website": "https://janedoetherapy.com",
    "email": "hello@janedoetherapy.com",
    "socialLinks": { "instagram": "https://instagram.com/janedoetherapy" },
    "address": "Suite 200",
    "city": "Austin",
    "state": "TX",
    "zipCode": "78704",
    "country": "US",
    "issuesTreated": ["Anxiety", "Depression", "Trauma", "Grief or Loss"],
    "techniques": ["Cognitive Behavioral Therapy (CBT)", "EMDR", "Person-Centered"],
    "insuranceAccepted": ["Aetna", "Cigna", "Out of Network"],
    "acceptsInsurance": true,
    "languages": ["English", "Spanish"],
    "yearsOfPractice": 9,
    "sessionRateMin": 120,
    "sessionRateMax": 160,
    "sessionRateText": "$120 - 160/session",
    "offersTelehealth": true,
    "offersInPerson": true,
    "telehealthStates": ["TX"],
    "acceptingNewClients": true,
    "photo": "https://cdn.therapyden.com/user-images/…",
    "contactEmails": ["hello@janedoetherapy.com"],
    "leadScore": 92,
    "searchLocation": "Austin, TX",
    "scrapedAt": "2026-06-16T12:00:00.000Z"
}
```

### 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 monitor a city or specialty for new providers; perfect for lead pipelines.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

Turn on **`monitorMode`** to emit only providers you haven't seen before — it remembers prior runs in a named key-value store and works *alongside* Schedules (the schedule triggers the run; monitor mode keeps each run to new leads only).

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

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

const run = await client.actor('scrapesage/therapyden-scraper').call({
    locations: ['Austin, TX'],
    issues: ['anxiety'],
    maxResults: 200,
    includeProfileDetails: true,
    enrichContactEmails: true,
    monitorMode: true,
});

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

### Integrate with any app

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

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

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find trauma therapists in Austin who accept insurance and list their contact details" and let it run this 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 & local-professional lead-gen stack**:

- **[Healthgrades Scraper](https://apify.com/scrapesage/healthgrades-scraper)** — doctors, reviews and provider leads.
- **[WebMD Scraper](https://apify.com/scrapesage/webmd-scraper)** — doctors, insurance and provider leads.
- **[FindLaw Scraper](https://apify.com/scrapesage/findlaw-scraper)** — lawyers, law firms and leads.
- **[TaxBuzz Scraper](https://apify.com/scrapesage/taxbuzz-scraper)** — CPAs, accountants and tax-preparer leads.
- **[Insurance Agent Scraper](https://apify.com/scrapesage/insurance-agent-scraper)** — State Farm & Farmers agent leads.
- **[Financial Advisor Scraper](https://apify.com/scrapesage/financial-advisor-scraper)** — FINRA & SEC adviser leads.
- **[FastExpert Scraper](https://apify.com/scrapesage/fastexpert-agent-scraper)** — real estate agent leads & reviews.
- **[Booksy Scraper](https://apify.com/scrapesage/booksy-scraper)** — salon, barber & beauty provider leads.
- **[Bark Listing Scraper](https://apify.com/scrapesage/bark-listing-scraper)** — local service-provider leads.

### Tips

- **Whole-state runs**: pass a state (`Texas`) to discover its cities automatically; raise `maxCitiesPerState` for broader coverage.
- **Specialty targeting**: add `issues` (e.g. `trauma-therapy`, `couples-counseling`) to focus the dataset on the providers your offer fits best.
- **Emails**: turn on `enrichContactEmails` — TherapyDen routes contact through a relay form, so the provider's real email lives on their own practice website.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to capture only newly listed providers.

### FAQ

**How do I scrape therapists for a specific city?** Put the city in `locations` as `City, ST` (e.g. `Austin, TX`). Add `issues` to narrow by specialty, or pass a whole state to scan its cities.

**Where do the emails come from?** Never from a hidden source — with `enrichContactEmails` on, the actor visits each provider's own public practice website and extracts the contact email listed there, the same thing a human visitor would see.

**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 each run?** Turn on `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules); each run emits only providers not seen before.

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

**Is scraping TherapyDen legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and TherapyDen'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`):

Cities as <code>City, ST</code> (<code>Austin, TX</code>, <code>New York, NY</code>) or whole states (<code>Texas</code>, <code>CA</code>). Each location is combined with every specialty below. A state discovers its cities automatically.

## `issues` (type: `array`):

Optional issue or technique slugs to filter by, combined with every location: <code>anxiety</code>, <code>depression</code>, <code>trauma-therapy</code>, <code>couples-counseling</code>, <code>emdr</code>, <code>cognitive-behavioral-therapy-cbt</code>, <code>lgbtq-issues</code>, <code>adhd</code>, <code>addiction</code>, <code>grief-or-loss</code>, <code>eating-disorders</code>, <code>family-therapy</code>. Leave empty to get all therapists in each location.

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

Direct TherapyDen URLs: therapist profiles (<code>/therapist/...</code>), city listings (<code>/therapists/us/tx/austin</code>), or state pages (<code>/therapists/us/tx</code>). Used in addition to the locations above.

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

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

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

Cap per city listing (each page holds 20 therapists).

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

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

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

Fetch each therapist's profile page for phone, address, specialties (issues treated), techniques/modalities, insurance accepted, session rate, years of practice, languages, telehealth states and their own practice website. Highly recommended — one extra page per therapist.

## `enrichContactEmails` (type: `boolean`):

Crawl each therapist's own practice website (home + contact/about, up to 3 pages) for a contact email, phone and extra social links. TherapyDen routes contact through a relay form, so this is the way to recover a direct email.

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

Keep only therapists flagged as accepting new clients.

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

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

## `minYearsOfPractice` (type: `integer`):

Keep only therapists with at least this many years of practice (requires profile details).

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

Keep only therapists that expose a phone number.

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

Keep only therapists that list their own practice website (requires profile details).

## `withEmailOnly` (type: `boolean`):

Keep only therapists for whom an email was recovered. Combine with email enrichment for best results.

## `deduplicateTherapists` (type: `boolean`):

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

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

Remember therapists 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 therapists across runs. Use distinct names for independent monitors (lowercase letters, digits and hyphens only).

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

How many profile/website pages to fetch in parallel.

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

Proxies to use. The default Apify proxy (US) works reliably — TherapyDen serves clean HTML to datacenter IPs.

## `urlsFromFile` (type: `string`):

Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "maxResults": 100,
  "maxResultsPerCity": 60,
  "maxCitiesPerState": 8,
  "includeProfileDetails": true,
  "enrichContactEmails": false,
  "acceptingNewClientsOnly": false,
  "acceptsInsuranceOnly": false,
  "minYearsOfPractice": 0,
  "withPhoneOnly": false,
  "withWebsiteOnly": false,
  "withEmailOnly": false,
  "deduplicateTherapists": true,
  "monitorMode": false,
  "monitorStoreName": "therapyden-monitor",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

All scraped therapist 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,
        "apifyProxyCountry": "US"
    },
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/therapyden-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,
        "apifyProxyCountry": "US",
    },
    "urlsFromFile": "",
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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,
    "apifyProxyCountry": "US"
  },
  "urlsFromFile": ""
}' |
apify call scrapesage/therapyden-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/therapyden-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vLib0HKcax0NjmIfS/builds/FTao0ujYlhOraW5jV/openapi.json
