Offline conversion tracking for clinics and dentists: booked, showed or paid?
Picture this. It's an example, not a real client. A dental clinic runs Meta ads for implant consultations. The funnel looks like this: form, booked, showed up, treatment paid.
The ads only see the form. So they find people who fill in forms. And a fair number of those never pick up the phone.
Now, what do you send back? Let me walk each stage the way a clinic owner would want it explained.
Booked. Quick, fairly high volume, and it filters out most fakes, because bots rarely book. But a booking is not a patient. Some cancel. Some don't turn up. If you optimise on it, the ads learn to find people who book, which isn't quite the same as people who come.
Showed. This is the sweet spot for most clinics. A person who walks through the door is a real prospect. The signal is much better than "booked", and there's still enough volume for bidding to learn from. It's also available sooner than payment, which matters for Meta's 7-day window.
Paid. The truest signal, and the slowest and rarest. Treatment plans can take a while to convert, so this one often arrives late, or too thin to optimise on. But it carries the value, which is what lets you find out what a patient is actually worth.
A sensible pattern is to send all three as separate events, optimise on "showed", and keep "booked" as a volume backstop and "paid" as the profit check. On Google Ads, booked and showed should go to their own conversion action, so a booking is never counted as a sale.
There's one more layer, and it matters for clinics more than most businesses. Meta can restrict accounts when the page link or an event name reveals a treatment or condition. So the same events you send for optimisation need neutral names and clean links. It's a separate topic, but it's why "just send everything" isn't good advice for a clinic.
Here's a made-up example of how the numbers might read after doing this properly. 200 form fills. 80 booked. 55 showed. 30 paid. Cost per form fill looks great. Cost per booked call is higher. Cost per patient who showed up is higher again, and it's the one that actually explains your margin. Clinics that only watch the first number are optimising the wrong end of the funnel.
If your booking system already tracks who showed up, you have the data. The problem is that many clinics never move it out of the practice system, so the ad platform never hears. The job is a status update: when the receptionist marks the appointment as attended, that change is the trigger. It's a five-second action for staff, and it's worth more to your ads than any creative test.
One rule to agree with the team: mark it the same day. A stage that updates a week later arrives too late for Meta's 7-day window. And remember the flip side. Cancelled and no-show are outcomes too, but they aren't ones you want the campaign to chase, so leave them out of what you send.
What would you optimise on, and why?
For reference, this is the case DataCops health mode was built for: a neutral L_1 for a lead and S_1 for a booking, with hashed email and phone and the ad click, and a log of each event.
More on this: The complete guide to offline conversions, and the complete guide to offline conversion tracking.