Skip to main content
Guide

GLP-1 Cost Per Started Patient: Compute Yours

Benchmarks tell you what another clinic paid. The number that runs a GLP-1 practice is your own cost per started patient by campaign. How to build it.

10 min read

Cost per started patient is the only acquisition number that should run a GLP-1 clinic, and most clinics cannot produce it. Benchmarks tell you what someone else paid under someone else's screening rules; your own cost per patient who actually began treatment, by channel and campaign, is the figure that decides where next month's budget goes. Curve exists to make that figure computable: it credits conversions under the attribution model you pick, pulls spend from the platforms, and Curve Analyst answers the question in plain language while telling you which conversion view it is quoting.

TL;DR

  • A GLP-1 funnel has more steps than most practices: lead, consult booked, consult completed, treatment started, monthly refills. Platform cost per conversion usually stops at lead or consult.
  • Cost per lead flatters campaigns that attract people who will fail eligibility. Cost per consult flatters campaigns that fill the calendar with people who never start.
  • "Started" lives in your EHR, pharmacy, or billing system. Until that event flows back into your marketing data, no tool can compute cost per started patient, and any tool that claims to is guessing.
  • Compute it under one attribution model across Google and Meta so the platforms are compared on equal terms, then read it by campaign and ad group.
  • When the start event is not connected yet, the honest value is unknown, and unknown is different from zero. Analyst keeps them apart.

Why does a GLP-1 funnel have more steps than the ad platform can see?

Most practices have a short chain: click, book, show up. A GLP-1 clinic has a longer one, and money only arrives near the end.

  1. Lead. A form, a quiz, a call. Someone expressed interest.
  2. Consult booked. A slot is on the calendar.
  3. Consult completed. The person attended, was screened, and a prescribing decision was made.
  4. Treatment started. The first prescription was written and filled, or the first shipment went out if you use a compounding or mail pharmacy.
  5. Monthly refills. The part that pays for everything above it.

The ad platforms see the first step and, if you set it up, the second. A pixel or a server-side event can observe a form submission or a booking confirmation because those happen in the browser. It cannot observe a prescription being written inside your EHR or a shipment leaving the pharmacy. So when Google Ads shows a cost per conversion, it is cost per whatever browser event you told it to count, and for nearly every GLP-1 account that is lead or consult booked.

That number is real. It is also two or three steps short of the thing you sell.

Why do cost per lead and cost per consult mislead in GLP-1 specifically?

In a dermatology practice, a booked patient who shows up is usually a paying patient. In GLP-1 care the gap between "interested" and "treated" is wide, and both cheap metrics sit on the wrong side of it.

Eligibility screens out a large share of leads

A lead is a person who wants the medication. A patient is a person who qualifies for it, can pay for it, and chooses to proceed after hearing the plan. Between those two sit BMI thresholds, contraindications, current medications, lab results, prior authorization, and the cash conversation. None of that is visible at the form.

Now think about what a low cost per lead rewards. Broad creative that promises fast results attracts a wide audience, much of which will not clear screening. If you are optimizing toward leads, the platform keeps finding more people like the ones who converted, and if those people skew ineligible you have built a machine that gets cheaper at producing patients you cannot treat. Cost per lead goes down while cost per started patient goes up, and the dashboard congratulates you the whole way.

A consult that does not start still costs the clinic

Cost per consult is better, and still wrong. A consult consumes provider time whether or not the person starts, and your capacity is fixed by how many consults a prescriber can run in a week. A campaign that fills that calendar with people who attend and then decline produces a beautiful cost per consult and a wasted afternoon. The metric scores that afternoon as a win.

Two campaigns can have identical cost per consult and very different cost per start. Only the start event can tell them apart.

The optimizer chases whatever you feed it

Google and Meta bid toward the conversion you send them. Send leads, get more leads. Send consults, get more consults. Neither platform knows that many of last month's consults never filled a prescription unless something tells it. Curve can forward the start event back to the platforms once it exists, but that is a separate topic. You cannot judge a campaign by an event that ends before the patient decides.

What has to be connected before cost per started patient exists?

The start event is not a web event, so no tracking snippet will ever capture it. It has to be exported from the system that knows about it and matched back to the click that produced the lead. A vendor who shows you a cost per started patient without asking where your start data comes from is estimating.

Decide which system holds "started" for you

The EHR knows when a prescription was written. The pharmacy knows when it was filled or shipped. Billing knows when the first payment cleared. These are different moments, sometimes weeks apart. Pick one and write the definition down. If start means "first shipment," that is the event your marketing data waits for and the event you ask Analyst about. Mixing definitions is how a clinic ends up with two cost per patient figures that both look official.

Get the event back into measurement

  • A webhook. When the status changes in the EHR, pharmacy platform, or billing system, it posts the event to Curve as it happens.
  • An offline upload. On a schedule, you export the patients who started in the period with a match key, and Curve ingests the file. Slower, but it works with systems that have no webhook, which describes a lot of clinical software.

Either way, Curve matches the start back to the original visit using the identifiers it stored when the lead came in, credits it under your attribution model, and holds it in the same reporting where spend already lives. This record concerns a patient in treatment, so the vendor handling it is a business associate, which is why Curve signs a BAA with every customer on every plan.

Make sure the match survives the delay

A GLP-1 lead in week one may not start until week three or four. If your attribution window closes before that, the start arrives with no click to credit and lands in "direct" or "unknown." Set the window with the length of your own funnel in mind; the tradeoffs are covered in choosing your attribution window.

How do you compute it under one attribution model across Google and Meta?

The computation is short. The discipline is in doing it the same way for every platform.

  1. Confirm the start event is arriving and matching. Compare starts credited to a source against starts left unattributed; a high unattributed share usually means the window or the match key, and you fix that before trusting any ratio.
  2. Pick one attribution model and one window in Curve and apply it to Google and Meta alike. Left to themselves, each platform credits itself under its own rules and both will claim the same patient, so summing their numbers overstates what you got. The mechanics are in platform ROAS versus attributed cost per booked patient.
  3. Take spend from the platforms. Curve pulls spend, clicks, and impressions directly from Google and Meta.
  4. Divide spend by Curve-attributed starts, at the platform level first, then by campaign, then by ad group.
  5. Keep the platform's own conversion count next to Curve's in the reconciliation view. They will differ, usually because the platform's attribution window is still open rather than because anything is under-reported.

Ask Analyst for cost per started patient by platform and it runs that query against your account, returns the ranked list as a table, and labels whether the conversions are Curve-attributed or platform-reported. It does not blend the two.

How should you read cost per started patient by campaign?

The account number tells you whether the marketing is working. The campaign number tells you what to change.

Put the whole ladder side by side

For each campaign, look at cost per lead, cost per consult, and cost per start in one view. The ranking flips more often than people expect. A campaign that wins on cost per consult and loses on cost per start is reaching people who book easily and commit rarely, which usually traces to creative or targeting. A campaign that looks expensive at the lead stage and cheap at the start stage is pre-qualifying in the ad, and deserves budget the lead report would deny it.

The ratio of starts to consults per campaign is a quality signal on its own. If it drifts down while cost per consult holds steady, the platform is finding you more of the wrong people.

Respect small counts

Starts are the smallest number in the chain. A campaign with a handful of starts in a week will swing from one week to the next, and reacting to a single bad week is how budgets get moved for no reason. Compare months against months. Analyst keeps whatever date range you opened it with, so set it deliberately before you ask.

If one Google campaign holds every service line, per-campaign reads will be muddy. The structure advice in running HIPAA-compliant GLP-1 campaigns on Google Ads is worth applying first.

The honesty rule: unknown is not zero

Suppose the pharmacy feed is matching on Google click IDs, but your Meta events are not yet carrying an identifier it can match. A careless dashboard will show Meta with zero starts and an infinite cost per start, and someone will cut the Meta budget on Monday. The truthful reading is that Meta's starts are unknown because the connection is incomplete, and no decision should come from that column until it is.

Analyst was built to say that out loud. Every number it gives comes from a query against your account; it never estimates. If a metric is empty it says so, and if the data is stale, partial, or still syncing it says that before the number. It treats unknown and zero as different things, and it is read-only. What it can and cannot do is laid out in what Curve Analyst is.

What to ask Curve Analyst

Open Analyst from the campaign report with the month you care about selected and ask in plain language. Each answer states which conversion view it is quoting. Launch details are in the Curve Analyst announcement.

  • What is my cost per started patient by platform this month, using Curve-attributed conversions?
  • Which campaign has the lowest cost per consult this month, and does the same campaign have the lowest cost per started patient?
  • Show spend and started patients by platform for this month against last month.

Frequently asked questions

Is cost per started patient the same as cost per acquisition?

Only if you define acquisition as a patient who began treatment. Most platform CPA figures define it as a lead or a booking, because those are the events the platform can see. Before comparing your number to a published GLP-1 CPA, check which step it was measured at. The framing in GLP-1 clinic cost per acquisition benchmarks is useful for that step check, and useless as a target.

Can Google Ads or Meta compute cost per started patient on their own?

Not from what they observe. Once the start event flows through Curve it can be forwarded to them so the optimizer bids toward starts. But each platform still credits itself under its own model and window, so the cross-platform number needs one attribution engine above both. That is Curve's campaign reporting, and it is what Analyst queries.

What if my EHR or pharmacy has no webhook?

Use the offline upload. Export the started patients for the period with a match key on a schedule and let Curve ingest the file. The numbers will lag by however often you export, and Analyst will flag the period as partial or still syncing.

Does sending "started" back into marketing data create a HIPAA problem?

It creates a business associate relationship, which is why the vendor receiving it needs a signed BAA. Curve signs one with every customer on every plan. The start event goes to Curve's US-hosted infrastructure first, Curve strips what should not leave, and only then does anything go to an ad platform. Analyst runs on Claude through Amazon Bedrock inside infrastructure covered by Curve's BAA with AWS, and your data is not used to train models.

How long before the number is trustworthy?

Long enough for a full funnel cycle to complete under your attribution window, plus enough starts to stop the weekly figure from swinging. Until then, treat early reads as a check that the plumbing works rather than a basis for moving budget.

If you run a GLP-1 clinic and cannot say what a started patient costs you by campaign, the fix is a connection, not a benchmark. Book a demo with Curve and we will map which of your systems holds the start event and how to get it into a report you can question.

Stay Compliant. Scale Confidently.

Join healthcare innovators who trust Curve for HIPAA-compliant ad tracking.Launch in hours, not months. Your growth stack, now HIPAA-safe.

Book a free tracking audit