Cliniko has two built-in reports that between them cover most billing leakage: Reports > Uninvoiced appointments lists completed appointments that were never invoiced at all, and Reports > Outstanding invoices lists every invoice still open. They are deliberately complementary - an appointment appears in the first only if no invoice exists for it whatsoever, and in the second only once an invoice exists but hasn't been paid. Run both monthly and you will catch the two biggest gaps. This post walks through each, then covers what neither can see.
Report 1: Uninvoiced appointments
This is the report that finds pure missed revenue - the session that happened and never became an invoice. Busy days, squeezed-in appointments, and cancellation fees your policy allows but nobody raised all end up here.
- Go to Reports, then Uninvoiced appointments.
- Set the date range you want to check, and filter by business or practitioner if you need to.
- Click Create report.
- Each row has a Create invoice link, so you can raise the missing invoice directly from the report.
The caveat that matters: an appointment only appears here if no invoice has ever been created for it. An appointment with an unpaid or partially paid invoice is counted as invoiced and drops off this report - it lives in Outstanding invoices instead. So running only this report tells you nothing about whether you were actually paid; it only tells you an invoice exists.
Report 2: Outstanding invoices
This is the other half: invoices that exist but are still open (Cliniko's term for not yet fully paid).
- Go to Reports, then Outstanding invoices.
- Set the date range, and filter by business or practitioner if useful.
- For any invoice on the list, use the row's Actions button to print it or email it to the patient (or to a third-party payer, if a third-party email is on the patient's profile).
- Clicking the invoice number opens the invoice itself, where you can record a payment, email it, or write it off.
Two limitations worth knowing before you rely on it. The report can't be filtered by patient - for a single client's history, use their account statement instead. And Cliniko doesn't break outstanding balances into ageing buckets (30, 60, 90 days), so "how old is this debt?" is a question you answer by sorting dates yourself.
What these two reports can't see
Run both reports monthly and you're ahead of most practices. But a few gaps sit outside both, and they're worth naming honestly:
- Chasing is manual. Cliniko can email an invoice, text a payment link, or show a QR code - but each send is a one-off action per invoice. There's no built-in schedule that reminds a patient automatically at 7, 14 and 30 days, so follow-up still depends on someone remembering.
- Partial payments hide inside "open". An invoice half-paid at the desk looks the same as one never paid at all until someone opens it.
- Claim outcomes live outside Cliniko. Medicare and health-fund claim results sit in your payments terminal (Tyro, Medipass and similar), so a rejected claim doesn't appear on any Cliniko report - reconciling claims is a separate, manual check.
- Money handled outside the system. "*paid $50 cash" written in an appointment note never meets either report.
These two reports are also just two of the six checks in a full billing review - claims, current rates, and the diary-versus-ledger check are the others. The complete routine is in our practice billing audit guide, and if overdue invoices are your particular drawer of shame, this piece on why unpaid invoices pile up covers the follow-up habits that actually work.
Making it continuous instead of monthly
Everything above assumes somebody runs the reports, every month, on top of their actual job - which is precisely where the routine usually dies. RIFT exists to remove that dependency: create a read-only API key in Cliniko (My Info > Manage API keys), paste it in once, and RIFT syncs daily from then on - running these cross-checks continuously, catching the uninvoiced session the week it happened, and drafting the chase email in your clinic's voice. You can approve each email before it goes, or let it run. Nothing in Cliniko is ever changed, and no treatment notes or case files are read.