Case studies/Thriving Center of Psychology

Building an agent system that knew which therapist to send you to

Company:
Thriving Center of Psychology
Years:
2024
Role:
Head of Product
Stack:
Claude · Tellescope · Custom orchestration
Improved lead-to-conversion rate
agent-matched leads converted at a meaningfully higher rate than manually routed ones
Clean source attribution
first time TCP could reliably trace a booking back to the original lead source

Thriving Center of Psychology operated across multiple states, each with different therapist licensing rules. By 2024, lead intake had become a patchwork of manual routing decisions — coordinators triaging by gut feel, attribution data that didn't trace back to source, and a matching process that depended on who happened to pick up the queue.

The Challenge

Manual routing at scale across a fragmented multi-state network

TCP was growing fast. The therapist network spanned multiple states, each with its own licensing requirements and availability constraints. When a new patient submitted an intake form, a coordinator had to manually review it, identify which state applied, check provider availability, and route to a therapist — a process that took too long, introduced inconsistency, and produced attribution data you couldn't trust.

The bigger problem was invisible: nobody knew which lead sources were actually converting to booked appointments. Every lead looked roughly equivalent on the way in. The matching happened in someone's head. Nothing written down was usable for forecasting.

The solution

A Claude-powered agent that reads the intake, applies the rules, and routes the lead

The goal wasn't to replace the coordinators — it was to handle the deterministic parts of matching automatically and surface the complex cases for human review. That required structured intake parsing, rules-based licensing logic, and a feedback loop that could actually track what happened to each lead.

  1. 01

    Parse intake data into structured fields first.

    Free-text intake forms were the root cause of inconsistency. We used Claude to extract structured fields — presenting complaint, insurance, state, availability preferences — before any routing logic ran. This made the downstream decisions auditable.

  2. 02

    Encode licensing rules as data, not code.

    State licensing rules change. Rather than hardcode them into a matching function, we stored them as structured data the agent could read. When a licensing requirement changed, we updated the table — not the agent logic.

  3. 03

    Close the attribution loop at the point of routing.

    We stamped each routed lead with the original source at the time of routing, not after the fact. This meant attribution was reliable by construction — the data existed whether or not the booking completed.

The outcome

Faster routing, better conversion data, and a matching layer that scales

Agent-matched leads converted at a higher rate than coordinator-routed ones — partly because the matching was more precise, partly because response speed improved. More importantly, TCP had clean attribution data for the first time: which sources produced leads, which of those converted, and what the matching quality looked like by source.

The system handled the deterministic cases automatically and queued edge cases for human review. Coordinators spent less time on straightforward routing and more time on the cases that actually needed judgment.

One thing I'd do differently

I underestimated how much time structuring the intake data would take relative to building the agent. The extraction step — turning messy free-text into reliable structured fields — was most of the work. The routing logic was almost trivial once the inputs were clean. I'd front-load the data normalization work on the next one.