Free setupLive in 7 days30 leads in 30 days or your money back
Home  /  Industries  /  Physiotherapy  /  Conversion tracking
Physiotherapy · conversion tracking

If your bookings all say “Direct”, your ads may be working and your reporting is lying.

The most common reason an Australian physio clinic concludes that Google Ads does not work is not the advertising. It is an embedded booking widget quietly stripping the source off every booking it takes.

The fault almost nobody names

The iframe eats your attribution.

Cliniko's embedded online booking widget does not run on your website. It runs in an iframe served from cliniko.com, which the browser treats as a separate context. Referrer information does not pass through it.

The practical consequence is that a patient can click your ad, land on your site, book an appointment, and have that booking recorded as Direct traffic. The revenue arrives. The attribution does not. Cliniko's own help documentation is candid about the limit, noting that while it is possible to track visitor sessions and report conversions, it is difficult to keep the source of each session.

We have seen this convince clinic owners to switch off campaigns that were profitable. It is worth checking before you conclude anything about your advertising, and it is the first thing we look at on a physio account.

The two fixes

Embedded widget, or hosted booking portal.

Embedded widget, left as is

  • Booking happens inside an iframe on cliniko.com
  • Referrer is stripped, so the ad click is lost
  • Bookings pile up under Direct in your reporting
  • Smart Bidding learns from incomplete data and optimises toward the wrong clicks
  • Owner concludes the ads do not work

Hosted portal, or postMessage

  • Send patients to the hosted booking portal, for example yourclinic.au2.cliniko.com, where the journey stays trackable
  • Or implement Cliniko's postMessage API with proper origin validation to pass the booking event back to the parent page
  • Conversions attach to the campaign that earned them
  • Bidding optimises against real bookings, not proxies
  • The account can finally be judged on its actual performance
Do not assume this is only a Cliniko problem
The iframe limitation is documented by Cliniko and applies wherever their embed is used. We have not independently tested the embedded booking flows of Nookal, Halaxy, Zanda or Splose, so we will not claim they behave the same way. If you run one of those, the honest answer is that it needs testing on your specific setup, and that is a 20 minute job we do before making any promises about your numbers.
Counting calls

What actually counts as a physio lead.

Phone calls are where most physio conversion data goes wrong in the other direction, by counting far too much.

Over 60 seconds
A call shorter than a minute is rarely a booking. Sixty seconds is the threshold used across Australian allied health measurement, including Clinic Mastery's benchmark methodology, and it removes wrong numbers and hang ups without discarding real enquiries.
First time callers only
Existing patients ringing to move an appointment are not new demand. Deduplicate by number so your cost per lead reflects acquisition rather than reception traffic.
One number per source
Dynamic number insertion on the site, a separate number on the Google Business Profile, so you can tell paid from organic from the listing. Without this, all three collapse into one figure that cannot be acted on.
The conversion action set to Primary
Google's automatically created conversion actions can quietly demote your manually configured ones to Secondary. A Secondary action still fires and still records, but it does not count in the Conversions column and Smart Bidding ignores it. Check the include in conversions setting on every action before you trust a report.
Closing the loop

The booking is not the outcome. The attendance is.

A booked appointment that nobody attends is not a patient. Once the click to booking chain is intact, the next step is importing the outcome back from your practice management system so the campaign learns which clicks produced patients who actually turned up and paid.

This is where physio has an advantage over most industries: the practice management system already holds attendance and billing. The work is joining it back to the click, and it is worth doing before you spend heavily, because bidding trained on bookings alone will happily buy you a diary full of no shows.

Straight answers

Questions clinic owners actually ask

Why do all my Cliniko bookings show as Direct traffic?
Because Cliniko's embedded booking widget runs in an iframe served from cliniko.com, and the browser treats that as a separate context, so referrer information does not pass through. Every booking looks like it arrived directly no matter whether the patient came from a paid ad, organic search or social. Cliniko's own documentation acknowledges that keeping the source of each session is difficult with the embed. The two documented fixes are to send patients to the hosted booking portal instead, or to implement the postMessage API with origin validation.
How long should a phone call be before it counts as a lead?
Sixty seconds, from a number that has not called you before. That threshold is the standard used in Australian allied health measurement and it strips out wrong numbers, hang ups and reception traffic without discarding genuine enquiries. Counting every ring inflates your conversion numbers and teaches Smart Bidding to buy the wrong clicks, which costs you money twice.
Can I retarget people who visited my injury pages?
Generally no. Google's Healthcare and Medicines policy restricts most healthcare advertisers from building remarketing audiences from visits to condition, symptom or treatment pages, because that is treated as personal health information. This catches a lot of clinics out, because retargeting site visitors is the default advice in every general Google Ads guide. Check the current policy before building any audience off your clinical pages.
My conversions are recording but the Conversions column shows zero. Why?
Almost certainly because the conversion action has been set to Secondary rather than Primary. Google's automatically created actions can displace a manually configured one, and a Secondary action still fires, still records in its own column, and is still completely ignored by the Conversions metric and by Smart Bidding. It fails silently with no error anywhere in the interface. Check the include in conversions setting on each action.
Related

Conversion tracking in other clinics

A campaign partnership built for clinics

Ads that earn their place in your P&L.

A senior team that lives inside your account. Conversion infrastructure wired in before any ad goes live. Reporting that ties spend to booked appointments, not impressions.

Dedicated account manager

A senior specialist who runs clinic accounts day to day.

Clinic-only specialists

Every keyword, headline and account structure built inside real Australian clinic accounts.

Award-winning team

Winner, Best Google Ads Campaign, Australia 2025. Google Partner. AFR Fast 100.

When you're ready
We will be too.
Start a conversation →How we work