AI CEO Lab← All free guides
On this page
Operating structures · Clinic

Med Spa Marketing: The System I Run For Clinics

The clinic owner is the clinician, which means marketing ops gets zero of their hours. So the same structure my agency runs on gets installed in the clinic: a front door that captures every lead, a setter that replies in minutes and books, a front desk that owns the handover, a reactivation lane, and one weekly decision. The Predictable Patient Pipeline, as I actually build it.

Med Spa Marketing: The System I Run For Clinics

Every clinic I have worked with had the same shape of problem. The owner is a brilliant clinician who was never taught business, the ads are either not running or running badly, and leads leak. Nobody replies fast. Nobody qualifies. Nobody books. Nobody follows up when they go quiet. And the owner cannot fix it because they are in the treatment room, which is where they should be.

So I stopped thinking of a clinic's marketing as a campaign and started thinking of it as a pipeline with four chokepoints. Attraction: are the right people finding you. Conversion: does a stranger become a lead with their details in your CRM. Closing: does that lead become a booked, deposit paid appointment. Fulfillment: does the appointment happen and does the patient come back. Every clinic is losing at one of those four more than the others, and the whole point of the first week is finding which one.

The system that fixes it is the same one my agency runs on, with the roles swapped. The front door captures every lead into one CRM. A setter, a bot with hard rules in code, replies inside minutes, qualifies, and books with a deposit. The front desk owns the human handover and the rule that no lead goes unseen. A reactivation lane works the people you already have. And once a week, every ad gets a decision and the owner reads one report.

What follows is roles and rhythms. I am not going to quote patient numbers or revenue. If you own a clinic, you can install this in a month, and the only thing you personally do is the part only a clinician can.

The three levels

Level 1 · Manual

Ads run when someone remembers. Leads land in a form inbox. The front desk replies between patients, hours later, and never asks a qualifying question. Nobody knows which chokepoint is leaking.

Level 2 · AI + connections

Every lead captures into one CRM by keyword, form or quiz. A setter bot replies in minutes, qualifies with the industry question bank, books, and takes a deposit. The front desk owns the handover for anything the bot escalates. Every ad gets a weekly decision.

Level 3 · Agents on cadence

A morning report tells the owner what needs a human and what is slipping. The reactivation lane runs on a cadence to the existing database. The weekly decision comes from an agent that reads the accounts. The owner reads one page and treats patients.

Connections for this guide: A CRM that is the single source of truth for every lead and every appointment (mine is GoHighLevel). A Meta ad account. A setter bot that reads and writes the CRM through tags, books on the CRM calendar, and hands over to a human by tag. A comment to DM keyword tool on Instagram. One channel where the daily report lands. And a front desk person with a written rule.

The mental model

Wrong

Run some ads and let the front desk handle the leads.

Right

Find the leaking chokepoint. Capture every lead into one CRM. A setter replies in minutes and books with a deposit. The front desk owns the handover. Reactivate the database. One weekly decision, one daily report.

RoleTalks to youJob
Front doorEvery lead, alwaysKeyword, form or quiz captures into one CRM with a tag and a source
SetterMinutes after any inboundQualifies from the question bank, books on the calendar, takes the deposit, hands over by tag
Front deskWhatever the setter escalatesOne rule: no lead goes unseen; one owner per conversation
ReactivationOn a cadence to the existing listA separate route with its own offer, consent check and outcome
OwnerTreatment room and one weekly pageApproves offers, claims and the setter's first ten sends; nothing else

Chokepoints, then roles

1. Score the four chokepoints first

Attraction, Conversion, Closing, Fulfillment. Before you buy anything, answer one question per chokepoint with a number you can actually pull. Attraction: how many new people reached the clinic this month and from where. Conversion: how many became a lead with details in the CRM. Closing: how many of those booked and paid a deposit. Fulfillment: how many showed, and how many came back. The one with the biggest gap between stages is the chokepoint, and it is the only thing you work on this month. The quiz I built for clinic owners scores exactly this. Most clinics assume Attraction and are actually leaking at Closing.

2. One CRM, and every lead lands in it

Before any ad spends, verify the routing: ad lead form to CRM webhook to pipeline stage to notification, with a test lead. Instagram gets a comment keyword that opens a DM and captures into the same CRM. The website gets a form or a quiz that posts to the same place. Every lead carries a source and a tag on arrival. A lead in a form inbox that nobody opened is not a lead. My GoHighLevel guide covers the automations. One more rule that is not optional for a clinic: the lead form and the chat never collect medical details. Intake happens on the approved path after booking, not in a DM.

3. The setter: reply in minutes, qualify, book, deposit

The setter is a bot with its rules in code, not in the prompt. It fires on any reply and runs a short flow: discovery with the industry question bank, so IV hydration, med spa, dental and chiro each have their own questions, then booking, then deposit. The order matters: book first, deposit after. The lead picks a time, the bot books it, then asks for a small deposit to confirm, because a person who has already committed to a slot pays the deposit far more often than one asked to pay before choosing. The deposit automation is three messages: the link with a two hour hold, a reminder at one hour, a last chance at thirty minutes, then the slot releases. My Instagram DM bot guide has the plumbing and the guardrails.

4. The handover rules, in code

Three rejected time slots or a refused deposit and the bot applies a human handover tag and stops. Anyone who says stop is terminal and never hears from the bot again. Every inbound is either replied to, explicitly terminal, or queued to a named human. Nothing is silently dropped. One owner per conversation at a time, and the bot checks the takeover status immediately before every send. A booking counts only when the CRM calendar says so, never because the chat said 'see you Tuesday'.

5. The front desk gets one rule

The front desk is not the setter. Between patients they cannot reply in minutes and they should not have to. Their job is the handover: anything tagged for a human gets a reply the same day, and the hotlist, so hot replies with no owner, leads with no booked next step, no shows and deposit refusals, gets cleared before the day ends. Give them the rule in one sentence: no lead goes unseen. And give them a way to take over a conversation from the bot by tag, so the two never talk over each other.

6. The reactivation lane, separate from new leads

The cheapest patient a clinic can get is one it already has. Reactivation is its own route with its own offer, its own consent check and its own outcome definition, never mixed into the new lead flow. I set it up as a cadence to the existing database: a segment that has not visited in a set window, a message with a specific reason to come back, the same setter flow to book, and a hard exclusion for anyone who opted out. The owner approves the offer and the copy once. After that it runs.

7. The weekly decision on every ad

Once a week, on a fixed day, every ad gets a decision with a dated line: scale, hold, refresh or kill, with the number behind it. Cost per lead in the strong band gets raised twenty to thirty percent and never doubled overnight. Fatigue signals, click through falling or frequency climbing, get a refresh before any budget increase. Start conservative with one proven angle and one test, and never let a single campaign carry the clinic. A clinic that only ever reads Attraction numbers will scale into a Closing leak. Read the pipeline, not the ad.

8. One daily page for the owner

The owner gets one report each morning: new leads by source, conversations waiting on a human, bookings verified from the calendar, deposits paid, no shows, and any bug in the pipeline with a day counter on it. That is the whole management job. The owner's reserved list is short: the offer, the pricing, anything that touches a medical claim in the copy, and the setter's first ten sends, approved one at a time before it earns autonomy on that one category.

Starter prompts

Paste these as written. They are short on purpose, because the long ones drift.

The prompt: set up my clinic pipeline

Set up my clinic's patient pipeline. My clinic is [vertical, e.g. med spa / IV hydration / dental / chiro] and my CRM is [CRM]. First score the four chokepoints. Ask me for one number each for last month: people who reached us (Attraction), leads with details in the CRM (Conversion), booked appointments with a deposit paid (Closing), shows and returning patients (Fulfillment). Name the leaking chokepoint and make it the only focus this month. Then write the roles: the front door (every entry, ad form, Instagram keyword, website form or quiz, into the one CRM with a source and a tag, and a test lead procedure for each), the setter (reply within minutes on any inbound, discovery questions for my vertical, book first then a small deposit with a three message hold sequence, handover tag after three rejected slots or a refused deposit, stop is terminal, one owner per conversation checked before every send, bookings verified from the calendar only), the front desk (one rule: no lead goes unseen; the daily hotlist in order: hot replies with no owner, no next step, no shows, deposit refusals), and the reactivation lane (a segment that has not visited in [N] months, a specific reason to return, the same booking flow, hard exclusion for opt outs, as a separate route from new leads). Then the rhythm: a weekly decision on every ad with a dated scale / hold / refresh / kill line, and a daily one page for me: leads by source, conversations waiting on a human, bookings verified, deposits, no shows, open bugs with day counters. Guardrails: never collect medical details in a form or a chat; nothing patient facing sends without my approval for the first ten; do not invent any number I did not give you.

The setter build prompt

Write my setter bot's flow for a [vertical] clinic. Three nodes: Discovery, using a question bank for [vertical] that qualifies without asking for any medical detail; Booking then Deposit, where the lead picks a slot first, the bot books it on the CRM calendar, then asks for a [amount] deposit credited to the treatment with a link held for two hours, a reminder at one hour and a last chance at thirty minutes; Wrap Up. Rules in the flow, not the personality: after three rejected slots or a refused deposit apply the human handover tag and stop; anyone who says stop is terminal; check the takeover tag before every message; never promise a person or a time the calendar has not confirmed. Output every message as exact text in a review queue: draft number, trigger, risk, the text, approve / edit / skip.

The daily page prompt

Read the CRM and the calendar read only and give me today's one page for the clinic: new leads since yesterday by source, conversations waiting on a human with how long they have waited, bookings verified from the calendar (not from chat), deposits paid and pending, no shows, and every open pipeline bug with a day counter. Lead with what needs a human today. If any pull failed, say so in that line. No patient medical details anywhere in the report. Do not send anything.

Give it to your agent, three ways

Same skill, three worlds. Pick the one you actually use. The skill file at the bottom of this page is the instructions in every case.

An agent with connectors (Claude Desktop, Claude Code, Grok Bot)

The setter needs read and write on the CRM through tags and the calendar, nothing else. The reporting agent needs read only on the CRM and the ad account. Claude with the Meta ads MCP and a CRM connector covers the reads. The setter itself is a bot product wired to GoHighLevel.

  1. Setter: a GoHighLevel connected bot (CloseBot is what I run for a client today; DLF Superchat is what I am building to replace it). Tags drive everything: qualified, deposit requested, human handover. The GHL workflow on the deposit tag sends the three message payment sequence.
  2. Keyword capture: a comment to DM tool on Instagram that pushes the lead to the same CRM with a source tag. My Instagram DM bot guide has the setup.
  3. Daily owner page: Claude or Viktor reads the CRM and the calendar read only every morning and posts one page. My ad account audit guide covers connecting Meta read only for the weekly decision.
  4. Front desk takeover: a single tag the front desk applies to own a conversation; the bot checks it before every send.

ChatGPT (a project or a custom GPT)

ChatGPT cannot be the setter, because the setter needs the CRM in code. It can be the daily page and the weekly decision from exports, and it can write the setter's scripts and question bank.

  1. Weekly: export the ad report and the CRM pipeline as CSV. Ask for scale, hold, refresh or kill per ad with the number, and the chokepoint scores from the four stage counts.
  2. Daily: paste the CRM's conversations waiting on a human and the calendar's bookings. Ask for the hotlist in order: no owner, no next step, no shows, deposit refusals.
  3. Setter build: give it the vertical and ask for the discovery question bank, the booking script and the deposit sequence in the review queue shape. A human loads them into the bot.
  4. Never paste patient medical details into it. Operational counts only, de-identified.

Anything with an API (a token and a curl call)

If a builder is wiring this, the CRM is the whole thing. Leads arrive by webhook, tags drive the setter and the handover, the calendar is the only truth for bookings, and the daily page is a cron that reads and posts.

  1. Inbound webhook creates the contact with source and tag. Test it with curl before any ad spends.
  2. The setter reads the takeover tag before every send. Handover, stop and deposit are tags, and the CRM workflows act on them.
  3. Bookings are read from the calendar endpoint, never parsed from message text.
  4. Cron: 7am daily page, read only, posted to one channel with day counters on open bugs.
# test the front door before spending a dollar (GoHighLevel inbound webhook)
curl -s -X POST "$GHL_INBOUND_WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -d '{"first_name":"Test","last_name":"Lead","phone":"+15550000000","email":"test@example.com","source":"meta-leadform","tags":["new-lead","test"]}'
# then confirm: contact exists, pipeline stage set, notification fired, no medical fields anywhere in the form

Failure modes

Every one of these has happened to me or to someone I set this up for.

FailureFix
Scaled ads while bookings stayed flatThe chokepoint was Closing; fix the setter and deposit flow before spending more
Leads sit in a form inboxWebhook to the CRM with a source and a tag; test every door
Front desk replies four hours laterThe setter replies in minutes; the front desk owns the handover, not the first reply
Deposit asked before a slot was chosenBook first, deposit after
Bot and front desk both messaged the same leadOne owner per conversation; takeover tag checked before every send
Report says twelve bookings, calendar says sevenBookings are verified from the calendar only
Medical history collected in the DMRemove it; intake on the approved path after booking
Reactivation blast to the whole list including opt outsOwn lane, own consent check, hard exclusions
Someone who said stop got a nurture messageStop is terminal, in code

The tools I use for this

ToolWhat it is for here
GoHighLevelThe clinic's single source of truth: leads, tags, calendar, deposit workflow, handover.Get it
CloseBotThe setter bot I run for a clinic client today, wired to GoHighLevel by tags.Get it
ManyChatComment keyword to DM capture on Instagram, pushing to the CRM.Get it
Meta Ads ManagerWhere the weekly decision gets applied. The agent reads it; a human acts.no link, just use it
ClaudeThe daily owner page and the weekly decision, read only.Open
Some links are affiliate links. I only recommend tools I run in my own accounts.

The free skill

It scores a clinic against the four chokepoints, installs the front door so every lead lands in one CRM, writes the setter's job with the book first, deposit after flow and the human handover rules, gives the front desk its one rule, sets up the reactivation lane, and installs the weekly ad decision and the daily report. Roles, rhythms and guardrails, including the one about never collecting medical details in a lead form or a chat.

How to use it: copy the whole thing, paste it into your bot (or save it as a skill file if you use Claude Code), and say “set up my clinic pipeline”. It walks you through the rest. Works with any agent that can read your files.
med-spa-marketing-system.md
---
name: how-a-clinic-runs
description: Installs the patient pipeline in a clinic whose owner is the clinician. Scores the four chokepoints (Attraction, Conversion, Closing, Fulfillment), routes every lead into one CRM, writes the setter's book-first-deposit-after flow with handover rules in code, gives the front desk its one rule, sets up a separate reactivation lane, and installs the weekly ad decision and the daily owner page. Trigger on "set up my clinic pipeline", "my leads are leaking", "predictable patient pipeline", "clinic front desk and bot".
---

# How A Clinic Runs On The Same System

The clinic owner is in the treatment room and gets zero hours for marketing ops. So
the structure is installed as a system with roles: a front door, a setter, a front
desk with one rule, a reactivation lane, and one weekly decision plus one daily page.

## Step 1: Score the four chokepoints

Ask for one number each for last month. Never guess them.

| Chokepoint | Number |
|---|---|
| Attraction | people who reached the clinic, by source |
| Conversion | leads with details in the CRM |
| Closing | booked appointments with a deposit paid |
| Fulfillment | showed, and returned |

The biggest drop between two stages is the chokepoint. It is the only focus this
month. Say which it is in one sentence.

## Step 2: The front door

Every entry lands in the one CRM with a source and a tag:
- Ad lead form to CRM webhook to pipeline stage to notification
- Instagram comment keyword to DM to CRM
- Website form or quiz to CRM

Write a test lead procedure for each door and require it before any spend. Rule: the
lead form and the chat never collect medical details. Intake happens on the approved
path after booking.

## Step 3: The setter

A bot wired to the CRM through tags. Rules live in code, not in the prompt.

```
FLOW: Discovery (vertical question bank, no medical detail)
   -> Booking (lead picks a slot, bot books on the CRM calendar)
   -> Deposit (small deposit credited to treatment; link held 2h, reminder at 1h,
      last chance at 30m, then the slot releases)
   -> Wrap up
HANDOVER: three rejected slots or a refused deposit -> human handover tag, stop
TERMINAL: "stop" or opt out -> never contacted by the bot again
OWNER: one owner per conversation; takeover tag checked before every send
TRUTH: a booking exists only if the calendar says so, never because the chat did
```

Book first, deposit after. Output every message as exact text in a review queue:
draft number, trigger, risk, text, approve / edit / skip. The owner approves the
first ten sends one at a time.

## Step 4: The front desk

One rule, in one sentence: **no lead goes unseen.** Every inbound is replied to,
explicitly terminal, or queued to a named human. The front desk owns the handover,
not the first reply, and clears the hotlist daily in this order: hot replies with no
owner, leads with no booked next step, no shows, deposit refusals. They take over a
conversation by applying the takeover tag, so bot and human never talk over each
other.

## Step 5: The reactivation lane

A separate route from new leads, with its own offer, consent check and outcome
definition. Segment: has not visited in [N] months (owner sets N). Message: a
specific reason to return. Flow: the same setter booking flow. Exclusions: every opt
out, hard coded. The owner approves the offer and copy once; then it runs on a
cadence through the approval gate.

## Step 6: The rhythm

**Weekly, fixed day:** every ad gets a dated scale / hold / refresh / kill line with
the number behind it. Fatigue (click through falling, frequency climbing) gets a
refresh before any budget rise. One proven angle plus one test; never one campaign
carrying the clinic. Read the pipeline stages, not just the ad.

**Daily, before the first patient:** one page for the owner: new leads by source,
conversations waiting on a human and for how long, bookings verified from the
calendar, deposits paid and pending, no shows, open bugs with day counters. Lead with
what needs a human. No medical details in the report.

## Step 7: The owner's reserved list

The offer. The pricing. Anything in copy touching a medical claim. The setter's first
ten sends. Nothing else reaches the owner.

## Rules

- Never invent chokepoint numbers, patient counts or revenue.
- Never collect or repeat medical details in a form, a DM, a chat, or a report.
- Nothing patient facing sends without approval until that category has earned it.
- Bookings are calendar verified. Reconcile before reporting a zero.

What done looks like at thirty days

  • The four chokepoint numbers exist and the leaking one is named
  • A test lead from every door landed in the same CRM pipeline with a source and a tag
  • The setter books with a deposit and hands over by tag; a refusal reached a human the same day
  • The front desk has cleared the hotlist every day this week
  • The reactivation lane ran once through the approval gate to a consented segment
  • The owner made this week's ad decision from one page and did not open Ads Manager

Want the pipeline installed in your clinic?

Inside the AI CEO Lab, the Predictable Patient Pipeline module walks the four chokepoints on your own numbers and builds the setter with you.

Pick a side.

Most people read this and forget it by Friday.

The other kind builds the thing that week. They stop needing free guides, because they are too busy running actual systems.

Free guides stay free. The room is where the builds happen.