Last Updated: October 2, 2026
A click is not a patient. Yet most clinic marketing reports still lead with impressions, reach, and click-through rate, numbers that describe ad delivery, not practice growth. Measuring marketing ROI for medical practices starts with a harder question: how many kept appointments came from this spend?
This guide from The Marketing Lab covers the full calculation, from revenue per completed procedure to HIPAA-safe tracking, connecting ad platforms to booked and kept visits without exposing PHI.
The gap matters because healthcare buying is slow and trust-driven. A patient may see an ad, call a front desk, book three weeks out, then reschedule twice. Platform dashboards lose that thread.
Only the last one belongs in your ROI math.
A marketing result in a clinic is a completed, billable encounter that traces back to a campaign. Everything upstream is a proxy. That definition forces discipline, and explains why so many practices feel busy but can't prove growth.
The formula is simple: ROI equals (revenue from marketing minus total marketing cost) divided by total marketing cost. The difficulty is in the inputs, not the arithmetic. Measuring marketing ROI for medical practices means tying campaign spend to completed, billable encounters and dividing net revenue by the full cost of acquiring them. Most practices undercount cost and overcount revenue, here's how to fix both.
Start with net collection, not charge master. Pull the average allowed amount per procedure from your billing system, grouped by service line.
For 340B covered entities, pharmacy margin deserves its own line. It behaves differently from visit revenue and shouldn't be blended into campaign ROI.
Marketing cost includes more than the ad budget. Add the staff time that supports it.
| Cost Category | Include | Example |
|---|---|---|
| Media spend | Yes | Paid search, social |
| Platform fees | Yes | CRM, analytics tools |
| Staff time | Yes | Scheduler calls, intake |
| No-show loss | Yes | Wasted slots |
| Pharmacy COGS | Sometimes | Physical inventory models |
A common mistake is ignoring scheduler hours. If two staff members spend part of each day on campaign follow-up, that cost belongs in the denominator.
Patient acquisition cost is total marketing and outreach spend divided by the number of new patients who completed a first visit. The catch: "completed a first visit" has to come from the EHR, not the CRM. A booked appointment is a lead; a checked-in, billed encounter is a patient. If your CRM shows 120 new bookings and the EHR shows 78 kept first visits, your true PAC is roughly 1.5x what the CRM alone suggests, and most practices never run that reconciliation.
A blended PAC hides the channels that work. Split it by service line and the picture sharpens fast.
| Service Line | Acquisition Cost Driver | Retention Multiplier |
|---|---|---|
| Primary care | Volume, local SEO | Annual visits |
| Oral PrEP | Outreach, education visit | Every 3 months |
| Injectable PrEP | Two-step visit, injection order set | Month 1, 2, then every 2 months |
| 340B pharmacy | Contract pharmacy net-per-claim | Recurring fills |
Media spend is the visible cost. The real denominator includes staff time, no-show loss, and platform fees.
A one-visit PAC calculation undervalues PrEP and primary care. A patient who starts oral PrEP and stays on schedule generates four visits a year plus labs; injectable PrEP on the Apretude schedule generates six maintenance visits in year one after loading doses.
In programs we run, we have observed instances where a significant portion of the PrEP population was overdue for HIV testing. This retention leakage can lead to an inflated PAC when only first visits are counted.
Healthcare marketing attribution models assign credit for a conversion across the touchpoints a patient encountered. The right model depends on your sales cycle length and how many people influence the decision. In a clinic, that cycle is rarely linear, a patient may see a Google ad, ask a friend, call the front desk, reschedule twice, then book through the patient portal.
Four models cover most clinic needs:
For most practices, position-based works best. Patients often discover a clinic through search or a referral, then convert through a call or portal booking.
Attribution models are only as good as the data feeding them. The technical gap is connecting the ad platform, the CRM, and the EHR without exposing PHI, and most articles stop at "leads." Here is the workflow that holds up:
Step four is where most setups break. Bookings and kept visits diverge because of no-shows, cancellations, and insurance issues. Without that reconciliation, your model credits campaigns for appointments that never happened.
Attribution gets cleaner when the CRM mirrors the clinical workflow. Build one pipeline per service line with stages that match the patient journey.
Each stage should fire a de-identified conversion event. That way the ad platform sees "tested" and "follow-up booked" as separate signals, not one lumped conversion.
Log the source in the patient record at intake, not just in the ad platform. Self-reported source and platform-reported source rarely match, and the intake answer is usually closer to the truth. For bilingual patient populations, make sure the intake question is asked in the patient's preferred language, English, Spanish, or Haitian Creole, or the answer gets lost.
Referrals from hospitals, health systems, specialty pharmacies, and research sites behave differently from paid media, longer lag, different cost structure. Track them in a separate pipeline so they don't distort paid-channel attribution.
The model matters less than the reconciliation. A position-based model fed by clean CRM-to-EHR data beats a sophisticated model fed by platform-reported conversions every time. In our experience, practices that effectively manage attribution often treat the EHR as the source of truth and the ad platform as a downstream signal.
Tracking kept appointments from digital ads means connecting three systems: the ad platform, the CRM, and the EHR. The goal is a clean count of booked and kept visits per campaign, with no PHI leaving your environment.

The workflow looks like this:
Step four is where most setups break. Bookings and kept visits diverge because of no-shows and cancellations.
The rule is simple: identifiers stay inside, aggregate signals go out. Never send names, dates of birth, or diagnosis codes to an ad platform.
A HIPAA-compliant CRM like VaultStream keeps the patient journey inside a covered environment while PulsePoint reads aggregate campaign performance. That separation makes the reporting defensible.
HIPAA compliant marketing analytics means measuring campaign performance with de-identified or aggregate data while keeping PHI inside systems covered by a business associate agreement.
What you can track:
What you cannot send to ad platforms:
Retargeting audiences built from condition-specific pages can create a HIPAA problem. A visitor who lands on a PrEP page and then sees a related ad has effectively been identified. Keep retargeting broad and non-clinical.
Subtract your total marketing investment from the revenue generated by completed procedures, then divide by the marketing investment. The challenge is isolating revenue from new patients acquired through marketing versus those who would have come anyway. In our experience, tracking a patient from first touch through to a kept appointment and completed procedure, using a CRM that connects to your EHR, can provide a more accurate revenue attribution.
Focus on metrics that connect to business outcomes: patient acquisition cost, conversion rate from lead to scheduled visit, no-show rate, revenue per patient, and patient lifetime value. Cost-per-lead and return on ad spend are useful for campaign optimization, but they do not tell you if a patient actually received care. For clinics running PrEP programs or 340B services, also track cost per kept visit by service line, since margins vary significantly between procedures and pharmacy claims.
Keep protected health information inside your HIPAA-compliant CRM and EHR. Use a business associate agreement with any vendor that touches PHI. For ad platforms and analytics tools, send only de-identified conversion signals (like a hashed patient ID or a simple conversion event) rather than names, diagnoses, or test results. In programs we run, we connect marketing data to kept appointments through the CRM, then report on aggregate cost per visit. Never put PHI into Google Ads, Meta, or any analytics platform.
Build a pipeline in your CRM with stages like Booked, Tested, and Follow-Up Booked, and sync appointment status from your EHR. When a patient books through a marketing channel, tag that source on the patient record. When the visit is marked as kept in the EHR, the CRM updates the pipeline. This lets you calculate cost per kept visit by campaign. In our experience, a common challenge is a manual check-in process that does not consistently link the appointment back to the original lead source. Automating that link can improve tracking.
Bring us your patient acquisition, 340B program, or compliance bottleneck. We will show you what a 30-day launch looks like for your clinic — in English or Spanish, month to month, no long contract.