The biggest gap in most clinic marketing accounts is not the ad creative, the targeting, or the budget. It is that the booking platform and the ad platforms do not talk to each other.

The ad platform sees the form fill. Your booking system records the booking. Nobody connects the two. The ad platform keeps optimising for cheap form fills. The booking system keeps recording bookings that the ad platform does not know it caused. The cost-per-booked-patient number that actually matters is invisible to the people making bidding decisions.

This article fixes that. Specifically for the three booking platforms most Vancouver clinics use: Jane App, Cliniko, and Juvonno.

What “conversion tracking” actually means

Three concepts that get conflated and should not be:

  1. A click conversion is when someone clicks your ad. The ad platform sees this natively.
  2. A lead conversion is when someone submits a form on your site, or fills a Meta lead form, or calls a tracked number. The ad platform sees this if you set up basic tracking (gtag, Meta Pixel).
  3. A booking conversion is when someone actually books an appointment in your booking platform. The ad platform sees this only if you explicitly send the event back.

Most clinics have steps 1 and 2 working. Almost none have step 3. The point of this article is to fix step 3.

Why this matters for ad performance

Google Ads and Meta’s algorithms make decisions about who to show your ads to based on which clicks led to your defined conversion event. If you tell Google Ads that a form fill is the conversion, it will find more form-fillers. Some will book, many will not.

If you tell Google Ads that a booked first appointment is the conversion, it will find more people likely to book. Same budget, materially different patient flow.

We covered this principle in our Google Ads mistakes article and our Meta Ads piece. This article is the operational how-to.

The three integration patterns

There are three ways to send booking events from a booking platform back to ad platforms. Most clinics will use a combination.

Pattern A: Booking-confirmation URL with a conversion tag

When a patient finishes a booking, the platform redirects them to a confirmation page. You add tracking pixels to that page. When the page fires, the ad platform records a conversion.

Works for: Cliniko (with custom redirect), some Jane App configurations, almost any external embed. Limitation: Only fires if the booking flow ends on a page you control. Many in-platform booking flows do not.

Pattern B: Webhook from booking platform to a server-side endpoint

The booking platform sends a webhook to a URL you control (often Zapier, Make, or a custom serverless function) every time a booking is created. That endpoint then forwards the event to Google Ads (via the Google Ads API) and Meta (via the Conversions API).

Works for: Cliniko (native webhooks), Juvonno (limited), Jane App (via Zapier integration). Limitation: Requires either a no-code automation tool subscription or a developer to set up the endpoint.

Pattern C: Booking-confirmation email parsed for conversion data

The booking platform sends a confirmation email. You forward that email to a parsing service (Zapier email parser, Mailgun routes, etc.) that extracts the booking details and fires the conversion to the ad platforms.

Works for: Any booking platform that sends confirmation emails. Limitation: Slowest pattern (5 to 15 minute delay), and email parsing is fragile if the platform changes its email template.

For most clinics, the best architecture is pattern B if available, pattern A as fallback, pattern C as a last resort.

Jane App: the specific setup

Jane App is the dominant platform for BC physiotherapy, RMT, and multi-disciplinary clinics. It does not natively support conversion pixels but is highly extensible.

Recommended setup:

  1. Use the Online Booking widget embedded on your website (not the standalone Jane URL). The widget loads inside a page you control.
  2. After a successful booking, the widget triggers a JavaScript event you can hook into. Use Google Tag Manager to listen for the event and fire conversions to Google Ads and Meta.
  3. For server-side tracking, use the Jane Zapier integration to fire on every new appointment, send to a Zap that calls the Google Ads API and the Meta Conversions API.

Key Jane setting: Use the “Online Booking page” feature with a custom domain (booking.yourclinic.com) so the booking flow lives under your tracked domain.

Cliniko: the specific setup

Cliniko is more developer-friendly than Jane and has native webhook support.

Recommended setup:

  1. In Cliniko: Settings → Integrations → Webhooks. Add a webhook for “appointment.created” events.
  2. Point the webhook at a Zapier or Make.com zap that:
    • Receives the appointment payload
    • Filters for first-visit appointments (new patient appointments, not follow-ups)
    • Fires a Google Ads conversion via the API (using the gclid stored in your CRM)
    • Fires a Meta Conversion via the Conversions API (using the fbp and fbc cookies stored at the time of booking)
  3. For attribution to work, capture gclid, fbp, and fbc on the booking page when the patient arrives, and pass them through Cliniko’s custom fields on the appointment.

This is the gold-standard setup. Plan 6 to 10 hours of skilled work.

Juvonno: the specific setup

Juvonno is more closed than Jane or Cliniko, but the platform has been adding integrations.

Recommended setup:

  1. Use the Juvonno booking widget on your site. If the widget allows custom JavaScript on confirmation (check current support), use it to fire conversion events directly.
  2. If JavaScript hooks are not available, use the Juvonno booking-confirmation email as the trigger via pattern C (email parsing).
  3. For ICBC-specific or insurance-linked booking flows, consider building a custom intake form on your own domain that hands off to Juvonno once intake is complete. This puts the tracking surface on your domain.

Attribution: the gclid and fbp pattern

For server-side tracking to attribute a booking back to the specific ad that drove the click, the booking event needs to carry the original click identifiers:

  • gclid is Google’s click identifier. Captured from URL parameters when a Google Ads click lands on your site.
  • fbp is Meta’s browser cookie identifier. Set automatically when the Meta Pixel fires on your site.
  • fbc is Meta’s click identifier. Captured from URL parameters when a Meta ad click lands.

The pattern:

  1. When a visitor lands on your booking page, JavaScript reads any gclid in the URL and stores it in a hidden field, in a cookie, and in your CRM if you use one.
  2. When the visitor books, the booking record carries the gclid/fbp/fbc values.
  3. When the booking event fires server-side, it includes those identifiers, which lets Google Ads and Meta match the booking back to the specific ad click.

Without this pattern, server-side conversions still fire but with weaker attribution. With it, the platforms see exactly which ad drove which booking.

What to send: the right conversion event

Send the right thing or the platform will optimise for the wrong outcome:

  • Send: first-visit booking events. A new patient booking their initial appointment. This is the signal you want the algorithm to find more of.
  • Do not send: follow-up appointments. The patient is already yours. Counting these as conversions teaches the platform to find people who would have come anyway.
  • Do not send: cancelled bookings. Filter these out. Otherwise you teach the platform to find people who book and bail.

The cleanest setup fires one conversion event per new patient, on the first booked first-visit, with a deduplication identifier so multiple platform reports do not double-count.

What changes once this is live

The first month after closing the booking-platform-to-ad-platform gap, three things usually happen:

  1. Reported cost-per-conversion in Google Ads and Meta drops by 25 to 50 percent. The platforms are finally counting the bookings that were happening all along.
  2. Lead volume drops slightly (5 to 15 percent). The algorithms shift toward higher-intent audiences.
  3. Booked first-visit count rises by 30 to 80 percent on the same ad budget. Same dollars, better targeting decisions.

The ROI math is rarely close. A clinic spending $3,000 a month on ads will typically see 5 to 10 more booked first visits per month within 60 days of setting up booking-platform conversion tracking. At a $300 average first-visit value and a $2,000 lifetime value, the payback period for the setup work is usually under 30 days.

If you want a real audit of your current tracking gaps and a build of the missing pieces, the Clinic Growth Review covers exactly this for our tracking capability.