Healthcare Marketing Analytics: Connect Campaign Spend to Qualified Patient Outcomes

Mustafa Alkhtab
Nadiia Shevelieva
Reviewed by Nadiia Shevelieva
Published:
November 3, 2026
|
Updated:

A healthcare campaign can look like a success in the ad platform and still fill no chairs. Across a systematic review of 105 studies, the average appointment no-show rate was about 23%, so one booked slot in four or five never becomes a visit.

A default ad-platform setup may stop at the booking, while scheduling and clinical systems confirm whether the visit happened.

This healthcare marketing analytics guide gives you the working parts of a measurement system that connects the two.

It covers event definitions, one owner per number, deduplication rules, cohort lag, booking-to-attendance reconciliation, and privacy checkpoints, while keeping media signals separate from clinical systems.

TL;DR

  • Define six events once. Lead, qualified inquiry, booked, kept, new patient and retained each get one written definition, one system of record and one owner.
  • Give every number one owner. For each metric, use its designated system of record and log discrepancies with other sources.
  • Count people, then events. Deduplicate repeat calls, forms and cross-channel claims before anyone reports a cost per patient.
  • Report by first-contact cohort, even in a weekly report. Label acquisition and retention maturity separately, and compare interim results only at equal elapsed days.
  • Run privacy gates before a tag fires. Inventory the trackers, classify the pages, review the payloads, and keep patient-level data in the clinical system.

What Is Healthcare Marketing Attribution Across Media and Clinical Systems?

Healthcare marketing attribution links campaign activity to appointment outcomes through an approved, access-controlled matching process.

Patient-level records stay within authorized operational systems, while marketing receives permitted summary measures. The two layers below have different responsibilities and data permissions.

Measuring What Matters: ROI and Attribution in Healthcare. Source: Cardinal Digital Marketing on YouTube

The media-signal layer holds ad platforms and approved campaign-level web and call metrics. It shows media activity without requiring identifiable scheduling records.

The clinical and restricted operations layer includes the CRM, scheduling system, electronic health record (EHR) and billing. Authorized teams reconcile inquiry and appointment records internally, including whether a visit was kept.

Diagram of three layers: the media-signal layer (ad platforms, approved analytics, campaign-level call reporting), controlled internal reconciliation (inquiry ID, campaign key, privacy review) and the clinical and restricted operations layer (CRM, scheduling, EHR, billing)
Source: inBeat Agency

Matching keys can connect inquiries to campaign activity inside authorized systems. Aggregated outcome reporting is the default; even a generic conversion event paired with a click ID requires specific privacy and platform-policy review before any upload.

LayerSystemsWhat it knowsRestricted or prohibited data
Media signalAd platforms, approved analytics, campaign-level call reportingImpressions, clicks, sessions, campaign-level call and form counts, spendPatient identities, diagnoses, visit details or unapproved health-related event payloads
ClinicalCRM, scheduling or practice management system, EHR, billingIdentifiable inquiries, bookings, attendance, visit type, revenueAd-platform tracking or audience exports without separate review

The boundary matters because tracking technology on a healthcare site can touch protected health information.

The HHS tracking technologies bulletin says trackers on authenticated pages, such as patient portals and telehealth platforms, generally have access to it. On unauthenticated pages, the bulletin treats appointment-scheduling and symptom-checker pages as the places where the exposure can arise.

The broader strategy sits in our healthcare marketing guide. Everything below stays on the measurement layer.

Which Events Does Patient Acquisition Reporting Need?

Patient acquisition reporting needs six events, each needing a written definition, a system of record and an owner. A platform "conversion" can mean a click on a button, so the dictionary has to say what happened in the real world.

Lead, Qualified Inquiry, and Booked Appointment

A lead is any inbound contact: a form submission, a call over a minimum length, or a chat. Spam, wrong numbers and existing patients with billing questions get excluded at this step.

A qualified inquiry is a lead that asked for a service the practice provides, in an area it serves, for someone who can be scheduled. A booked appointment is a confirmed slot in the scheduling system with a date, a location and a service line.

Write the exclusion rules next to the definition. A call-tracking tool that logs every ringing phone as a lead will inflate the top of the funnel for weeks before anyone notices. For the general version of why a platform's "lead" and a CRM's "lead" differ, our attribution guide walks through it, so this guide skips that argument.

Kept Appointment and New Patient

Six patient acquisition events with their sources of truth: lead and qualified inquiry in the CRM, booked and kept in scheduling, new patient in scheduling plus EHR, retained in scheduling
Source: inBeat Agency

A kept appointment is a booked slot where the patient attended and checked in. A new patient is a unique person completing an appropriate initial visit with no prior visit across the organization inside an agreed lookback, such as 36 months. A location-specific new-patient count is a separate metric.

A retained patient is a new patient who returns for a second visit inside a second agreed window. Reschedules keep the original inquiry as the parent record, so a moved appointment stays one patient.

EventDefinitionSystem of recordOwnerMay go to an ad platform
LeadInbound contact after spam and wrong-number exclusionsCRMPatient access teamCase-specific approval only; no default upload
Qualified inquiryLead for a served service, area and schedulable personCRMPatient access teamCase-specific approval only; no default upload
BookedConfirmed slot in the scheduling systemScheduling or practice management systemPractice operationsAggregate by default; any event requires review
KeptAttended and checked inScheduling or practice management systemPractice operationsAggregate only
New patientFirst qualifying visit; organization-wide lookbackScheduling system joined to the EHRPractice operationsAggregate only
RetainedSecond visit inside the second windowScheduling systemPractice operationsAggregate only

The dictionary changes the math. Take $10,000 of spend that produces 50 booked appointments: that is $200 per booked appointment.

For illustration, if 23% were no-shows and no other visits were cancelled or pending, about 38.5 would be kept, making the cost per kept appointment roughly $260. Use the practice's actual status data in a live report.

Source-of-Truth Ownership: One Owner Per Number

Each metric gets one source of truth and one reporting owner.

When systems disagree, use the source designated for that metric: ad platforms for spend, the CRM for inquiries, scheduling for booked and kept visits, and billing for revenue.

Booked and kept counts belong to the scheduling or practice management system, even when the ad platform shows a higher number.

MetricSource of truthReporting ownerRefreshConflict rule
Spend, impressions, clicksAd platformMedia buyerDailyPlatform wins
Sessions, form submissionsWeb analyticsMarketing operationsDailyAnalytics wins
CallsCall-tracking toolMarketing operationsDailyCall tool wins
Lead and qualified statusCRMPatient access teamDailyCRM wins
Booked and keptScheduling or practice management systemPractice operationsWeeklyScheduling system wins
Clinical outcomeEHRClinical operationsWeekly, restrictedEHR wins
RevenueBilling or financeFinanceMonthlyFinance wins

Three habits keep the table honest:

  • Name one reporting owner with a named backup, because an owner who is "the team" is no owner.
  • Keep a change log that records every date a definition or a source moved.
  • When a gap appears, record it. If the platform reports 60 booked appointments and the scheduling system shows 44, the scheduling system's number goes in the report and the 16-appointment gap goes in the log, which also tells you whether the platform is crediting bookings that moved, cancelled or duplicated. The platform number is 36% higher than the scheduling number in this illustration, and that ratio, tracked weekly, is a health check on the whole stack.

Pro tip: If a source stops refreshing, flag the metric as incomplete rather than filling gaps with a platform estimate.

Deduplication Rules That Keep One Patient From Counting Twice

Deduplicate at the person level before you report any cost per patient, because the same patient can call twice, fill in a form, and click a Meta ad and a Google ad in one week. Event-level counting treats each of those as a separate success, and platform-level reporting lets each platform claim the patient in full.

Apply the rules in this order:

  1. Collapse repeats inside a window. Repeat calls or forms from the same person inside an agreed window, such as 7 days, become one inquiry. Pick the window and write it down.
  2. Merge cross-channel claims into one credited path. One patient gets one credited path under the agreed attribution rule, and the platform-claimed numbers get reported beside it, labeled as platform-claimed.
  3. Never report summed platform conversions as a total. Meta plus Google plus Bing is a list of claims. Use the deduplicated organization-wide patient count from the approved internal join as the total.
  4. Split multi-location groups by a location key. A person can be new to a location while already being an existing patient organization-wide. Keep the organization-wide unique-patient total separate from location-specific new-patient counts.
Duplicate typeExampleRuleMatch key
Repeat callSame caller rings three times in two daysOne inquiryCaller number match, held inside the CRM
Form plus callA form submission followed by a call from the same personOne inquiry, earliest qualifying touch keptInternal inquiry ID
Cross-platform claimBoth ad platforms report the same bookingOne patient, claims reported separatelyInternal inquiry ID
Cross-locationSame person booked at two sitesOne organization-wide; site-specific counts separateInternal patient ID plus location key

Add a tripwire. Each week, compare summed platform claims for the same outcome stage and time window with the corresponding deduplicated internal total, and agree in advance on the gap that triggers a review.

The threshold belongs to your team, because no public benchmark covers your mix of channels and service lines.

Persistent discrepancies call for a tracking and attribution audit; use a separate experiment when you need to test incremental impact.

Diagram of four touchpoints in one week (call, form, Meta click, Google click) passing through controlled internal matching into one unique patient
Source: inBeat Agency

How Long Should an Attribution Window Be for Each Service Line?

Set each service line's acquisition window from its own history: measure days from first contact to kept visit, then pick a high percentile, such as the 80th or 90th. Set a separate retention window to measure second visits.

A same-week urgent service and a multi-visit elective service will land on very different numbers, and neither should borrow the other's.

This is the core of healthcare campaign measurement, because the calendar-week report punishes slow service lines.

Group inquiries by first-contact month and follow each cohort through the relevant outcome window. Track acquisition and retention maturity separately. Compare open cohorts at the same elapsed day for interim performance, and compare final conversion rates only after both cohorts complete the same window.

Cohort (first contact)InquiriesBooked by day 7 / 30 / 60Kept by day 7 / 30 / 60Status
July20060 / 104 / 11822 / 66 / 88Matured
August19054 / 96 / 11020 / 62 / 82Matured
September21066 / 109 / open25 / 70 / openOpen
October20561 / open / open24 / open / openOpen

The figures above are illustrative. September's day-60 cell remains open because day 60 has not arrived. At day 30, September had 109 bookings from 210 inquiries (52%) and 70 kept visits (33%); August had 96 from 190 (51%) and 62 kept (33%). The counts differ more than the conversion rates, which is why both matter.

A report that totals everything booked to date would set October's 61 beside July's 118 and call it a collapse.

Three steps keep the windows honest:

  1. Pull first-contact dates from the CRM and kept-visit dates from scheduling, using an approved internal join, for 12 months where records allow it.
  2. Compute acquisition lag by service line, choose the percentile, and set a separate window for return visits.
  3. Lock the window for the quarter, and change it only through the change log.

Ad platforms have their own lookback settings, and those settings affect what the platform claims. Treat them as a platform-side number, and let your cohort window decide what counts in your own reporting.

Google's offline-conversion guidance explains how to capture and store a click ID (GCLID) with the lead, then submit the conversion action and time through an approved workflow. The privacy checks below still apply.

How to Reconcile Booked Appointments With Kept Visits

Reconcile booked appointments against attended ones every week, crediting each result back to the original inquiry cohort.

The no-show average is a literature average: the same review found regional averages from 13.2% in Oceania to 43.0% in Africa, so a practice has to measure its own rate.

The weekly process:

  1. Export booked appointments with status. Pull every appointment with its current status from the scheduling system, which is the system of record.
  2. Match to the inquiry. Join tracked appointments on the internal inquiry ID, while identifying known referrals and walk-ins separately.
  3. Classify the status. Sort each into kept, no-show, cancelled or rescheduled.
  4. Credit the original cohort. The result goes to the first-contact month, whatever month the status changed in.
  5. Classify the unmatched. Separate known walk-ins and referrals from appointments that should have an inquiry ID but do not, and publish both counts.
StatusCounts as bookedCounts as keptAttribution treatment
KeptYesYesCredit the original cohort
No-showYesNoCredit the booking, record no visit
CancelledYes, until cancelledNoRemove from open bookings, keep in the audit trail
RescheduledYes, onceOnly when attendedOne patient, original cohort

Report a technical match rate among appointments expected to come from tracked inquiries, plus the marketing-attributed share of all booked appointments.

A falling technical rate may signal a changed form field, a retired call number or a scheduling flow that dropped the inquiry ID.

Classify known walk-ins and referrals separately rather than treating them as technical matching failures. Attribute them to marketing only when supporting evidence allows it. Keep genuinely unexplained records in an unmatched line with reason codes.

What Privacy Checks Should Healthcare Measurement Pass Before a Tag Goes Live?

Run these seven checkpoints in order before any tag, pixel or upload goes live, and again whenever a page, form or vendor changes.

They concern tracking and event data, and the consent and sign-off side of creator content has its own guide in our healthcare UGC compliance post.

  1. Inventory every tracker. List every tag, pixel and SDK on every page and app screen, with the vendor, the purpose and the data it receives.
  2. Classify the pages. Mark pages as authenticated or unauthenticated, and flag scheduling pages and symptom checkers, because the HHS bulletin singles them out.
  3. Review the payloads. Check URLs, UTM parameters, form-field names and event parameters for condition names, provider names, dates and identifiers.
  4. Check the vendor agreements. Where a vendor creates, receives, maintains or transmits PHI, HHS expects a business associate agreement (BAA).
  5. Check platform policy. Confirm the audience and event setup against each platform's health rules.
  6. Minimize any approved upload. Default to internal or aggregate reporting; a generic event plus a click ID still requires case-specific review under applicable privacy rules, vendor agreements and platform policies.
  7. Get counsel sign-off. Record who approved the setup, on what date, and keep the evidence.
CheckpointWhat to checkEvidence to keepOwner
Tracker inventoryEvery tag, pixel and SDK, per pageDated inventory exportMarketing operations
Page classificationAuthenticated or not; scheduling and symptom pages flaggedPage mapPrivacy officer
Payload reviewURLs, UTMs, form fields, event parametersSample payload capturesMarketing operations
Vendor agreementsBAA where PHI is involvedSigned agreementsLegal
Platform policyAudiences and events against platform rulesSettings screenshotsMedia buyer
Upload minimizationAggregates by default; event uploads require specific approvalSample upload fileMarketing operations
Sign-offApproval and dateSigned reviewCounsel

The legal ground has moved, so read the dates. A federal court in 2024 vacated the part of the HHS bulletin covering an IP address combined with a visit to an unauthenticated public page, and HHS dropped its appeal ten days after filing it.

The bulletin's passages on authenticated pages and on scheduling and symptom-checker pages remain on the HHS page.

Wiretap class actions over tracking tools were already running when HHS dropped its appeal, and the MoFo note linked above expected them to continue, which is one reason checkpoint 1 exists.

For checkpoint 3, the HIPAA Safe Harbor de-identification list is a useful ruler. It treats all date elements except year, geographic units smaller than a state, IP addresses, URLs, device identifiers and email addresses as identifiers. An upload carrying an exact appointment date or a full ZIP code is carrying identifiers.

For checkpoint 5, the platforms publish their own limits. Google does not allow advertiser-curated audiences such as Customer Match, your data segments and lookalikes for health as a sensitive interest category, and it allows predefined Google audiences. Meta says sources in its Health and wellness data category may carry extra data sharing restrictions, and an advertiser cannot override a category Meta assigns.

Google Ads policy table listing audiences advertisers cannot use for health and the predefined audiences that remain allowed.
Google blocks advertiser-curated audiences for health as a sensitive interest category and allows its predefined audiences. Source: Google Ads Help, captured November 2, 2026.

Checkpoint 6 has a Google-specific wrinkle: enhanced conversions for leads may use hashed first-party customer data such as an email address.

Hashing alone does not remove privacy obligations for health-related conversions. Keep patient-level conversion uploads off by default unless the full workflow passes legal, technical and platform-policy review.

The cost of skipping the review is documented. In 2023 the FTC fined GoodRx $1.5 million for sharing users' prescription and health-condition data with advertising platforms including Facebook, Google and Criteo.

The media-side reporting is where our marketing measurement agency team works, alongside your counsel and clinical operations.

What the Weekly Patient Acquisition Report Should Show

The weekly report pairs cohort-aligned spend with costs from inquiry to retained patient, alongside match quality and separate acquisition and retention maturity flags. For every cost metric, assign spend and outcomes to the same acquisition cohort and attribution rule; keep unassigned spend visible rather than dividing current-week spend by outcomes from older cohorts. One page is enough.

Report sectionMetricSourceCohort status shown
SpendSpend by channelAd platformNot applicable
Top of funnelCost per inquiry, cost per qualified inquiryAd spend + CRM cohort joinAcquisition: Open/Matured
Mid funnelCost per booked appointmentAd spend + scheduling joinAcquisition: Open/Matured
OutcomeCost per kept appointment, cost per new patientAd spend + scheduling/EHR joinAcquisition: Open/Matured
RetentionCost per retained patientAd spend + retention cohort joinRetention: Open/Matured
Data qualityTechnical match rate, attributed share, unexplained unmatched, platform-to-scheduling gapWarehouse or spreadsheet joinNot applicable
GovernanceDate of last privacy review, open definition changesChange logNot applicable

Daily QA catches tracking failures; the weekly cohort report focuses on costs, outcomes and match quality. Keep channel pacing and creative reviews in their own cadence so these decisions stay separate.

Three rules keep the page useful:

  • Show the relevant maturity beside every cost. Acquisition maturity applies to booked, kept and new-patient costs; retention maturity applies to cost per retained patient. Keep open windows labeled open.
  • Show the gap. The platform-to-scheduling difference stays on the page, even when it is uncomfortable, because it measures how far the dashboard can be trusted.
  • Date the privacy review. The last review date sits in the footer, so a stale review is visible to everyone who reads the report.

Where feasible, use a properly designed holdout or geo experiment to test incremental patient visits. Attribution allocates credit; a causal test assesses whether campaign activity changed outcomes.

Roll Out the Measurement Stack in 30 Days

You can stand up the first cohort report in four weeks by working through the foundations in order.

  1. Week 1: dictionary and owners. Write the six event definitions, fill the system-of-record and owner columns of the event table, and open the change log.
  2. Week 2: tracker inventory and privacy gates. Run all seven checkpoints on the trackers already live and on any upload you plan to send, and fix anything found on scheduling and symptom pages first.
  3. Week 3: dedup rules and match keys. Create inquiry IDs for new leads, document a restricted fallback match for historical records, set the repeat window, and run the first booked-to-kept reconciliation.
  4. Week 4: first cohort report. Use reliable historical joins to estimate service-line acquisition and retention windows, and publish the cohort table with separate maturity flags. Mark older records with incomplete matching instead of forcing attribution.

Build Healthcare Campaign Measurement That Holds Up With inBeat Agency

Healthcare campaign measurement is useful when teams can explain which activity led to kept visits, how many records remain unmatched, and which outcomes still need time.

inBeat supports media-side reporting alongside your privacy and clinical teams, while patient-level records stay in authorized systems.

Book a strategy call and we will walk through your event dictionary, your sources of truth and the first cohort you would report.

FAQs

Can a booked-appointment conversion go to Google or Meta without exposing PHI?

A generic name such as "appointment_request" and a click ID do not, by themselves, make an event free of PHI or other sensitive information. Start with internal or aggregate reporting. Review the page context, complete payload, identifiers, vendor agreements and platform policies with privacy counsel before enabling any patient-related upload.

How often should the tag inventory be reviewed?

Review it at every site release and whenever a form, scheduling flow or vendor changes, plus a standing quarterly pass. Tags get added through tag managers and plugins without anyone filing a ticket, so a dated inventory is the only way to see drift.

What if CRM and scheduling records cannot be matched reliably?

Separate known referrals and walk-ins from records that should contain inquiry IDs. Check the tracking and booking flows, then reconcile a sample in a restricted environment. Label patient-cost metrics incomplete until the remaining matching gap is small enough for the intended decision.

Mustafa Alkhtab
Head of Performance Media

Mustafa Alkhtab is Head of Performance Media at inBeat, where he oversees paid media and performance creative results across the agency's accounts. Before inBeat, he built growth programs for ecommerce, lead generation, and mobile app businesses in international markets. He writes about media buying, measurement, and conversion rate optimization.

View LinkedIn Profile

Table of contents

Build trust with the patients you want to reach.

Certified partners

Healthcare Marketing