A physiotherapy clinic in Melbourne came to me spending $2,200 a month on Google Ads. The account showed a cost per conversion of $14. The owner was thrilled until we discovered that the conversion was the click on the "Book Online" button, not an actual booking. Real new patient bookings worked out at $190 each, and two of the four campaigns had produced none at all.
Allied health clinics are a special case for conversion tracking. Bookings happen on a third-party domain such as Cliniko, Halaxy or Nookal. New and existing patients share the same booking widget. Phone calls still carry a big share of enquiries. And the data involved is health data, which limits what you are allowed to send anywhere.
This guide covers how I set up Google Ads conversion tracking for physio, chiropractic, osteopathy, podiatry and similar clinics using Google Tag Manager.
The Conversions That Matter for a Clinic
| Patient action | Conversion action | Priority | Notes |
|---|---|---|---|
| New patient online booking | New Patient Booking | Primary | Fired on the booking confirmation step, new patients only |
| Existing patient rebooking | Rebooking | Secondary | Tracked for reporting, not for bidding |
| Click-to-call from the site | Website Call | Primary | tel: link clicks |
| Call from the ad | Ad Call | Primary | Call asset with call reporting |
| Contact form enquiry | Enquiry | Secondary | Many are supplier and job enquiries |
The distinction between new patient and rebooking is the single most important decision in a clinic account. Get that wrong and every other number is misleading.
Prerequisites
- Google Tag Manager installed on the clinic website.
- The same GTM container installed on the booking platform. Cliniko supports this under Settings, then Online bookings, in the tracking code field. Halaxy and Nookal have similar fields for custom tracking code. If your platform does not allow it, see the offline import option near the end.
- Google Ads conversion ID and labels for each conversion action.
- A tel: phone link on the website.
- Consent Mode v2 through a consent banner if you serve patients in Australia, the UK or the EU. Australian clinics are not yet legally required to use a banner for Google Ads, but Consent Mode still improves measurement where visitors use tracking protection.
Step 1: Create Conversion Actions in Google Ads
Under Goals, then Conversions, create the five actions in the table above as website conversions, added manually. Set the category to Book appointment for the bookings, Phone call lead for calls and Submit lead form for enquiries. Set Count to One, the click-through window to 30 days and attribution to Data-driven.
Give New Patient Booking a value equal to the average first course of treatment. Give Website Call about half that, since not every call books. Leave Rebooking and Enquiry at a low or zero value and mark them secondary.
Step 2: Conversion Linker and Cross-Domain Measurement
Create a Conversion Linker tag in GTM firing on All Pages. In its settings, enable linking across domains and list both your clinic domain and the booking domain, for example yourclinic.com.au and cliniko.com.
Also add both domains to your Google tag configuration so GA4 sessions stay intact. Without cross-domain linking, the booking shows up as a conversion with no campaign attached, which looks like a direct visit and starves your campaigns of credit.
Step 3: Track the Booking Confirmation
With GTM installed on the booking platform, open Preview mode and complete a test booking. Watch what happens on the final confirmation step.
- Cliniko loads a confirmation view inside the same page. The page path changes to include a confirmation segment, and a dataLayer event can be pushed from the tracking code field. Use a Page View or History Change trigger that matches the confirmation step.
- Halaxy shows a confirmation page after booking. Use a Page View trigger on that URL.
- Nookal behaves similarly to Cliniko with an in-page confirmation. Test and match the final step.
Fire the New Patient Booking conversion tag only when the appointment type is a new patient type. Most clinics name them clearly, such as "Initial Consultation" or "New Patient Assessment". The appointment type is visible in the URL or on the page during the booking flow, and you can capture it with a DOM or URL variable and add it as a trigger condition. Everything else fires Rebooking.
Step 4: Track Calls
Enable the Click URL built-in variable. Create a Click, Just Links trigger with Click URL starting with tel:. Fire the Website Call conversion tag on it.
Clinics get a large share of calls from the ad itself, especially on mobile. Add a call asset to every campaign and turn on call reporting with a minimum duration of 60 seconds. That becomes the Ad Call conversion without any tag work.
Step 5: Track the Contact Form
Fire the Enquiry conversion on the confirmed submission, not the submit button. If the form redirects to a thank-you page, use a Page View trigger. If it submits in place, use the plugin's success event. The written guides for Gravity Forms, WPForms, Fluent Forms and Elementor on this site cover the exact code for each.
Keep Enquiry as a secondary conversion. In most clinics, a third of contact form submissions are suppliers, job applicants and existing patients asking about invoices.
Step 6: Enhanced Conversions, Done Carefully
Enhanced Conversions pass a hashed email or phone number with the conversion so Google can match it to a signed-in user. For clinics this recovers a meaningful share of bookings lost to Safari and consent banners.
On the booking confirmation step, the patient's email is often not available to the page. Where it is, create a User-Provided Data variable in GTM and attach it to the booking conversion tag. Where it is not, apply Enhanced Conversions to the contact form only.
Send only the email address or phone number. Never send the appointment type, the practitioner, the condition or anything else from the booking. Those are health details and they must not reach Google Ads or GA4.
Step 7: If Your Platform Blocks Tags
Some booking platforms allow no custom code at all. In that case you have two options:
- Track the hand-off. Fire a secondary conversion when the patient clicks through to the booking platform. It is a weak signal, but it is better than nothing.
- Import offline conversions. Capture the Google click ID in a hidden field or cookie on your site, pass it to the booking platform in a URL parameter or notes field where possible, then upload confirmed new patient appointments to Google Ads weekly using the offline conversion import. This takes more setup but produces the most accurate numbers, because you only upload patients who actually attended.
Step 8: Test and Reconcile
- In GTM Preview, complete a new patient booking, an existing patient booking, a call click and a form submission. Confirm each fires exactly one tag with the correct label.
- Check the Google Ads request in a tag debugger such as the Insighter Debugger extension and confirm the conversion label and, where applicable, the hashed user data.
- The following day, check Diagnostics on each conversion action for tag status and Consent Mode status.
- For two weeks, compare Google Ads new patient conversions against new patient appointments in the practice software. They should track closely. If Google Ads is consistently higher, look for rebookings slipping into the new patient conversion.
Common Mistakes in Clinic Accounts
- Counting the "Book Online" click as the conversion.
- Counting all bookings together so rebookings dominate.
- No cross-domain linking, so bookings show as direct traffic.
- Importing GA4 events and also firing GTM tags, which double counts.
- Sending appointment types or conditions to Google.
- Using "Maximise Conversions" with a mix of primary conversions that includes cheap enquiries, so the account optimises for enquiries instead of bookings.
What You Should See After Setup
Your campaigns report new patient bookings separately from everything else, each with a realistic value. Smart Bidding chases new patients, not clicks. And when a campaign produces a cost per new patient you cannot justify, you know within days instead of discovering it after a quarter of spend.
