Psychology Today Scraper (Cheap)
Pricing
from $3.99 / 1,000 results
Psychology Today Scraper (Cheap)
PsychologyToday therapist scraper that pulls therapist profiles with specialties, insurance, contact details, and session formats from psychologytoday.com, so healthcare recruiters and mental health directories get clean lead data without clicking through profiles manually.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Data API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Psychology Today Therapist Scraper

Finding the right therapist data on Psychology Today means clicking through page after page of directory cards, then opening each profile to read the credentials, insurance, and specialties. Doing that by hand for a whole city is a slog. This scraper does the clicking for you: pick a provider type, name the places you want, and it returns each listing as one tidy row — name, license, location, phone, and a bio excerpt straight from the cards, or the full profile with specialties, insurance, therapy approaches, and schooling when you ask for the deeper pass. Run one location or a stack of them.
What you get
Each provider comes back as one row with a steady shape, so your columns line up when you load the results into a sheet or database. The data falls into a few groups:
- Identity —
therapistName,credentialText,licenseAbbr,licenseId,isVerified - Contact and place —
profileLink,photoLink,websiteLink,phoneNumber,officeLocation,postalCode,fullOfficeAddress - Practice details —
specialtyList,concernsTreated,therapyApproaches,insurancePlans,sessionFee,clientGroups,spokenLanguages,meetingFormats,practiceYears,isLgbtqAffirming - Bio and metadata —
bioExcerpt,fullBio,educationList,collectedAt,errorMessage
Card data (quick) mode fills the fields shown on the listing cards. Whole profile (rich) mode opens each profile page and fills the rest.
Quick start
- Press Try for free and open the input form.
- Choose a Provider type (Therapists, Psychiatrists, Treatment Centers, or Support Groups).
- Add one or more Search locations like
il/chicagoor a whole-state slug likeoregon. - Pick an Extraction depth — card data for speed, whole profile for the full record.
- Set a Maximum profiles to return to cap the run, then press Start and export as JSON, CSV, Excel, or XML.

Use cases
- Referral networks — build a searchable list of providers by city, specialty, and accepted insurance
- Healthcare market research — measure provider density and coverage gaps across regions
- Insurance and benefits teams — check which carriers a set of providers accepts
- Academic and policy research — study access to care by location, language, or modality
- Directory and lead building — turn a directory search into a structured contact list
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchLocations | array of strings | Yes | Places to search, as state-abbr/city (e.g. il/chicago) or a whole-state slug (e.g. oregon). Each entry is searched in turn. |
providerCategory | string | No | Which directory to pull from: Therapists, Psychiatrists, Treatment Centers, or Support Groups. Default Therapists. |
extractionDepth | string | No | list reads the listing cards only (fast); full opens each profile for the complete record. Default list. |
resultsLimit | integer | No | Total profiles to collect across all locations. Default 25. |
minPauseMs | integer | No | Shortest wait, in milliseconds, between requests. Default 1000. |
maxPauseMs | integer | No | Longest wait, in milliseconds, between requests; each pause is randomized within the range. Default 2000. |
retryWhenBlocked | boolean | No | Retry a request automatically when it is briefly blocked, up to 3 attempts. Default true. |
Example input
{"providerCategory": "Therapists","searchLocations": ["il/chicago", "wa/seattle", "ma/boston"],"extractionDepth": "full","resultsLimit": 25,"minPauseMs": 1000,"maxPauseMs": 2000,"retryWhenBlocked": true}
Output
Each provider becomes one JSON record. Empty values are dropped so the rows stay compact, and the fields you get depend on the extraction depth you chose.
Example output
{"therapistName": "Dana Whitfield, LCSW","profileLink": "https://www.psychologytoday.com/us/therapists/dana-whitfield-chicago-il/987654","photoLink": "https://cdn.psychologytoday.com/assets/therapy-directory/profiles/987654.jpg","credentialText": "Clinical Social Work/Therapist, LCSW","licenseAbbr": "LCSW","licenseId": "149.012345","officeLocation": "Chicago, IL","postalCode": "60607","phoneNumber": "(312) 555-0142","websiteLink": "https://www.danawhitfield-therapy.com","isVerified": true,"practiceYears": 11,"specialtyList": ["Anxiety", "Depression", "Trauma and PTSD"],"concernsTreated": ["Grief", "Life Transitions", "Self Esteem"],"therapyApproaches": ["Cognitive Behavioral (CBT)", "EMDR", "Mindfulness-Based (MBCT)"],"insurancePlans": ["Aetna", "Blue Cross Blue Shield", "Cigna"],"sessionFee": "$150-$190","clientGroups": ["Adults", "Couples"],"spokenLanguages": ["English", "Spanish"],"meetingFormats": ["In-person", "Online"],"isLgbtqAffirming": true,"bioExcerpt": "I help adults work through anxiety, grief, and major life changes using practical, evidence-based methods...","fullBio": "I help adults work through anxiety, grief, and major life changes using practical, evidence-based methods. My approach is collaborative and paced to what you need...","educationList": ["MSW, University of Chicago", "BA, DePaul University"],"fullOfficeAddress": "210 West Washington Street, Chicago, IL, 60607","collectedAt": "2026-06-29T12:00:00+00:00","errorMessage": null}
Output fields
| Field | Type | Description |
|---|---|---|
therapistName | string | Full name plus any credential suffix |
profileLink | string | Direct URL to the Psychology Today profile |
photoLink | string | URL of the provider's profile photo |
credentialText | string | The whole credential line from the card, e.g. 'Psychologist, PhD' |
licenseAbbr | string | License code parsed from the credentials, e.g. LCSW, PsyD, MD |
licenseId | string | Professional license number (whole-profile mode only) |
officeLocation | string | City and state of the main office |
postalCode | string | ZIP or postal code of the office |
phoneNumber | string | Contact phone number |
websiteLink | string | Personal or practice website (whole-profile mode only) |
isVerified | boolean | True when the provider has a verified badge |
practiceYears | integer | Years in practice (whole-profile mode only) |
specialtyList | array | Listed areas of focus (whole-profile mode only) |
concernsTreated | array | Mental health concerns handled (whole-profile mode only) |
therapyApproaches | array | Treatment methods such as CBT, DBT, EMDR (whole-profile mode only) |
insurancePlans | array | Accepted insurance carriers (whole-profile mode only) |
sessionFee | string | Session cost or range (whole-profile mode only) |
clientGroups | array | Adults, Teens, Couples, Families (whole-profile mode only) |
spokenLanguages | array | Languages sessions can run in (whole-profile mode only) |
meetingFormats | array | In-person, Online, or both (whole-profile mode only) |
isLgbtqAffirming | boolean | True when the practice is described as LGBTQ+ affirming (whole-profile mode only) |
bioExcerpt | string | Short clip of the personal statement, up to 300 characters |
fullBio | string | Complete statement, up to 3000 characters (whole-profile mode only) |
educationList | array | Degrees, training, and certifications (whole-profile mode only) |
fullOfficeAddress | string | Complete street address (whole-profile mode only) |
collectedAt | string | ISO 8601 timestamp of when the record was captured |
errorMessage | string | Reason a profile failed; null on success |
Tips for best results
- Start with a small run. Set
resultsLimitto 10–20 while you confirm the locations and fields match your pipeline, then raise it for the full pull. - Use card data mode for speed. When you only need names, locations, and phone numbers,
listmode skips the per-profile requests and finishes much faster. - Switch to whole profile for the rich fields. Specialties, insurance, therapy approaches, schooling, and fees only come from the profile pages, so set
extractionDepthtofullfor those. - Leave the auto-retry on.
retryWhenBlockedclears the occasional temporary block on its own. - Widen the pause range if blocks pile up. Raising
minPauseMsandmaxPauseMsspaces out requests and keeps you comfortably under rate limits.
How can I use Psychology Today therapist data?
How can I use the Psychology Today Therapist Scraper to build a referral list?
Choose a provider type, list the cities you cover with searchLocations, and run whole-profile mode. Each provider comes back with name, credentials, accepted insurance, specialties, and contact details — a ready-made, filterable referral list you can sort by location or modality.
How can I collect therapist contact details across several cities at once?
Add every location to searchLocations in one run and the scraper works through them in order, collecting therapistName, phoneNumber, officeLocation, and profileLink for each. Card data mode keeps it quick when contact details are all you need.
How can I research mental health care access by insurance or language?
Run whole-profile mode and read the insurancePlans and spokenLanguages fields alongside officeLocation. Grouping the rows by carrier or language shows where coverage is strong and where gaps sit — useful for benefits teams and access-to-care studies.
How can I export Psychology Today provider data to a spreadsheet? After a run finishes, export the dataset as CSV or Excel straight from Apify. Every record shares the same field names, so it drops cleanly into a spreadsheet or database with no reshaping.
Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Support
Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.