Last Updated: October 7, 2026
Most clinics track marketing in one system, patient data in another, and never connect marketing spend kept appointments to financial outcomes. A clinic spends $5,000 on paid search, books 20 patients, and never learns how many showed up. That's the gap. (Source: Statista's 2026 research)
Connecting marketing spend to kept appointments requires three things: a definition of "kept," a way to track patients from click to visit, and a system that ties cost to outcome. Without all three, reporting stays disconnected from the result that matters.
In our experience at The Marketing Lab, most clinics measure marketing by clicks, leads, or bookings, metrics that obscure whether marketing spend kept appointments actually happened.
The fix starts with clarity on what you're measuring.
A kept appointment means the patient arrived, checked in, and was seen by a provider. It's not a booking. It's not a confirmation call. It's attendance plus completion.
Some clinics define it as "patient in chair." Others require "visit note documented." For billing purposes, a kept appointment is one where a charge was generated and recorded in your EHR. Use that as your baseline.
Why it matters: a booking system might show 20 new patients from a campaign, but 5 no-shows means 15 kept appointments.
Create a shared definition across your team:
Document this definition in your CRM and share it with billing and marketing. Consistency matters more than perfection.
Cost per kept appointment is simple math: total marketing spend divided by kept appointments.
Here's the formula:
Cost Per Kept Appointment = Total Marketing Spend / Number of Kept Appointments
Example: $8,000 on a campaign drives 50 bookings. At a 20% no-show rate, 40 patients kept their appointments.
$8,000 ÷ 40 = $200 per kept appointment.
Track this by channel and campaign. Paid search might deliver $180 per kept appointment, email $45, organic search $90. Those differences guide your budget.
The formula works backward too: 100 kept appointments per month at $200 average cost means a $20,000 monthly budget. That sets realistic growth targets.
| Metric | Formula | Example |
|---|---|---|
| Cost Per Booking | Total Spend ÷ Bookings | $8,000 ÷ 50 = $160 |
| No-Show Rate | No-Shows ÷ Bookings | 10 ÷ 50 = 20% |
| Cost Per Kept Appointment | Total Spend ÷ Kept Appointments | $8,000 ÷ 40 = $200 |
| Revenue Per Kept Appointment | Total Revenue ÷ Kept Appointments | $12,000 ÷ 40 = $300 |
Build this into a monthly dashboard. Update it weekly so you see trends early.
Your CRM is the hub, but a hub only works if every spoke reports to it.
Start with a stable internal key.
Then build one pipeline per service line, not one for the whole clinic. A PrEP pipeline and a 340B contract-pharmacy pipeline have different cadences and definitions of success.
For injectable PrEP, run a separate pipeline: Booked, Tested, Visit 2 at one month, Maintenance every two months.
Identity matching is where most builds break. Common patterns:

The biggest gap in healthcare marketing is no-shows. A patient books but doesn't arrive. Your marketing spend gets charged to a phantom appointment.
Your CRM should pull appointment status from your EHR daily: "no-show" flags the record, a completed visit note marks it "kept."
This requires a two-way integration:
Without this, you're manually checking the EHR to see who showed up. That's slow and error-prone.
In practice, this looks like:
Most EHR platforms can export appointment status daily. Use that export to update your CRM. If your systems don't talk natively, a data integration tool can bridge the gap.
HIPAA compliance is the starting point, not a checkbox at the end. The rule that trips most clinics: PHI does not go into ad platforms, analytics tools, or any system without a signed Business Associate Agreement (BAA). That includes names, dates of birth, MRNs, diagnoses, test results, and anything that could reasonably identify a patient, including a hashed email tied to a sensitive service line.
What actually breaks in practice:
The safe pattern we use in programs we run:
| Data element | Can it go to an ad platform? | Where it lives |
|---|---|---|
| Contact ID | No | CRM |
| MRN | No | EHR |
| Hashed email for match | Only with review and a BAA-covered flow | CRM-side match |
| Aggregate kept-visit counts | Yes | Internal dashboard |
| Service line or diagnosis | No | EHR / clinical systems |
Mistake 1: Counting bookings as kept appointments.
A booking is not a kept appointment. Measure bookings and a 30% no-show rate stays invisible.
Mistake 2: Not tracking source at intake.
Without a source tag at booking, you can't trace a patient back to the campaign.
Mistake 3: Mixing channels in one campaign code.
Mistake 4: Ignoring no-show rates by source.
Some channels drive more no-shows than others. Phone referrals might have a 10% no-show rate. Walk-ins might have 25%.
Mistake 5: Not updating the pipeline weekly.
Monthly pipeline updates leave you flying blind for 30 days.
Mistake 6: Attributing all credit to the first touch.
A patient might see your Google ad, then search your name, then call. Which channel gets credit?
| Mistake | Impact | Fix |
|---|---|---|
| Counting bookings, not kept appointments | Inflates campaign performance | Define kept as visit completed; pull status from EHR |
| No source tag at intake | Can't trace patients to campaigns | Add "How did you hear about us?" to intake form |
| Mixing channels in one code | Can't optimize by channel | Use unique codes: Paid Search Brand, Organic, Email, etc. |
| Ignoring no-show rates by source | Underestimates true cost per kept appointment | Track no-show rate and cost per kept appointment by channel |
| Monthly pipeline updates | Late to spot problems | Update pipeline weekly; review trends |
| Multi-touch attribution too early | Overcomplicates the model | Start with first-touch; add layers later |
Connecting marketing spend to kept appointments is foundational, the difference between guessing about ROI and knowing it.
The Marketing Lab helps clinics set up this infrastructure. Our PulsePoint platform ties paid media spend to kept appointments so you can optimize your budget by channel. Book a free 30-minute strategy call to see how this works for your clinic.
Total your marketing spend for a specific period (paid search, social, email, local SEO, community outreach) and divide by the number of appointments actually attended during that same window. If you spent $5,000 on marketing in a month and 80 patients kept their appointments from those campaigns, your cost per kept appointment is $62.50. The key is matching the spend period to the appointment window and excluding no-shows. Track this by campaign source in your CRM so you can see which channels deliver the lowest cost per kept visit.
A booked appointment is a patient who scheduled a visit through your website, phone, or referral. A kept appointment is one the patient actually attended. No-shows and cancellations don't count. For marketing ROI, only kept appointments matter because they're the ones that generate revenue, clinical outcomes, and repeat business. Many clinics measure booking rates and mistake them for conversion. If your booking-to-kept rate is 75%, then a marketing campaign that books 100 patients delivers only 75 kept visits.
Yes, but you must keep patient health information (PHI) out of your analytics and ad platforms. Use a secure CRM with a BAA in place to track the patient's source (paid search, organic, referral, etc.), appointment date, and attendance status. Never send PHI to Google Analytics, Meta, or any third-party platform. Your CRM reports the aggregate numbers, total kept appointments by source, without exposing individual patient records. This approach satisfies both HIPAA and marketing measurement.
Most clinics use first-touch (credit the first campaign that brought them in) or last-touch (credit the campaign right before booking) attribution because it's simple and defensible. First-touch works best for awareness campaigns; last-touch for conversion campaigns. Some practices weight multiple touches, for example, 40% credit to first, 60% to last, but this requires more data infrastructure. Start with first-touch or last-touch, measure consistently, and document your method so you can compare performance month to month. The goal is consistency, not perfection.
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.