This article covers the ways to get your practice data into RIFT from Zanda, Cliniko or Nookal, how often RIFT syncs, how to switch from one system to another, what happens to an uploaded file, and the differences between what each system's data can reveal.
Where do I enter my API key? Nookal users: the Nookal section
There is no separate API button in RIFT. In RIFT, click Settings in the left sidebar, then click the Data source card - that is where every API key is entered. The card has three sections: Zanda, Cliniko and Nookal. Use the Nookal section: paste your Nookal API key in the Connect Nookal row and click Connect. The key is made in Nookal under Setup > Connections > API Keys > Generate API Key, and a new key needs three things switched on before it works: tick every location, tick Invoices, and switch Status on, then Save Changes. Ignore the Zanda and Cliniko sections - they are for practices on those systems, and a Nookal key pasted there is rejected.
Where do I enter my API key? Cliniko users: the Cliniko section
In RIFT, click Settings in the left sidebar, then click the Data source card - that is where every API key is entered. The card has three sections: Zanda, Cliniko and Nookal. Use the Cliniko section: paste your Cliniko API key (made in Cliniko under My Info > Manage API keys) in the Connect Cliniko row and click Connect. Ignore the Zanda section (Your Zanda export, Upload, Zanda API (optional) and Connect for automatic syncing) and the Nookal section - a Cliniko key pasted there is rejected. Physio, allied-health and mixed clinics see the Cliniko and Nookal sections first; other clinic types see the Zanda section first.
Where do I enter my API key or export? Zanda users: the Zanda section
In RIFT, click Settings, then Data source, and use the Zanda section. Click Upload an export under Your Zanda export - that is how almost every Zanda practice gets its data in, because Zanda's API is in closed beta. Only use Connect for automatic syncing if Zanda has already given your practice an API key. Ignore the Cliniko and Nookal sections - a Zanda clinic never needs them.
The Data source card shows all three systems: which one is in use
The Data source card in RIFT Settings always shows three sections - Zanda, Cliniko and Nookal - whichever system your clinic uses. The section RIFT is reading from is headed in use (for example Nookal - in use) and sits at the top. If you have disconnected and nothing is connected, the section your last numbers came from is headed last used. A clinic reads from one system at a time: connecting a system replaces the connection you had before, so RIFT never holds two keys at once.
Switching from Zanda, Cliniko or Nookal to a different system
You can move a RIFT clinic to a different practice-management system yourself. In Settings > Data source, paste the new system's key in its own section and click Connect. RIFT asks once before it switches: open items found through your old system will be closed as practice software changed, and they do not count as recovered. That is deliberate - an item that disappears because you changed software has not been paid. After the switch, RIFT finds your leaks again from the new system's data. If you switch back, items that are still outstanding in the earlier system return with their history, and any notes or dismissals you made on them are kept. Uploading a Zanda export after being on Cliniko or Nookal is a switch too, and RIFT asks the same question first.
I want to upload a Zanda export but the Upload button is greyed out
While a Cliniko or Nookal key is connected, RIFT syncs itself and the Upload an export button in the Zanda section is switched off - the row reads "Disconnect Cliniko first to upload exports instead" (or Nookal). Open the connected system's section, click Disconnect, and the upload becomes available. Disconnecting removes the stored key and stops daily syncs; your items and history stay.
Option 1: upload a Zanda export (Settings > Data source)
This is the default way to get Zanda data into RIFT, because the Zanda API is in closed beta and most clinics cannot get a key yet.
- In Zanda go to Tools > Data Export and tick just these seven: Client Profiles, Appointments, Invoices, Payments, Client Session Packs, Medicare Claims and Referrals (not Referrer Profiles). Leave everything else unticked - RIFT never reads clinical files, so Notes, Forms, Communication, Diagnoses and Insurance should stay on your computer.
- Zip the folder Zanda gives you (right-click, then Compress or Send to > Compressed folder).
- In RIFT, open Settings, click Data source and click Upload an export in the Zanda section. You can also use Upload an export in the header of any RIFT page. Drop the ZIP (up to 40MB) onto the upload card and click Upload and sync.
- RIFT reads the export, runs a full sync and reports how many new items it found and the date the export was taken. Any notes about what it could or could not read (for example, no Pack Sessions file) appear under the result.
The export must include appointments: everything RIFT measures, including your active clinician count, is read from them. An export with no appointments is refused rather than treated as "every appointment vanished".
Re-upload whenever you want fresh numbers. The header of every RIFT page shows the date the current numbers are from and how many days old they are.
Option 2: the Zanda API (not available to most practices yet)
Today RIFT works with Zanda from your data export (Option 1). Zanda's API is in a closed beta and is not taking new practices, so for almost every clinic there is no API to connect and the export is the way in. RIFT does not sync itself from Zanda: you re-upload an export whenever you want fresh numbers.
If Zanda has already granted your practice API access, RIFT can use it:
- Check with Zanda that your account has API access (it was granted through their Help Menu > Beta Program).
- Once you have access, copy the key from Tools > Zanda API Key in Zanda. It is shown only once.
- In RIFT, open Settings, click Data source, paste the key under Connect for automatic syncing in the Zanda section and click Connect.
RIFT checks the key against Zanda before saving it: a key Zanda rejects is never stored (a stored key is also what unlocks patient email sending). If Zanda reports the account has no API access yet, you will be told to register for the beta first. When the key is accepted, RIFT runs your first API sync straight away. The section then shows Connected with the last four characters of the key, and the button becomes Replace key. Later syncs run when you click Sync now in the header.
The connection is read-only: every request RIFT makes to Zanda only reads data.
Option 3: connect Cliniko (Settings > Data source)
RIFT works with your Cliniko account through Cliniko's API, which any Cliniko account can use.
- In Cliniko go to My Info > Manage API keys and create a key.
- In RIFT, open Settings, click Data source, paste the key under Connect Cliniko in the Cliniko section and click Connect.
- RIFT checks the key with Cliniko before saving it, then runs your first sync (this can take a minute or two). The section shows Connected with the last four characters of the key.
The connection is read-only: nothing in Cliniko is ever changed, and treatment notes are never read. A step-by-step guide is at /rift-cliniko-setup.
Once Cliniko is connected the section shows a Sync now button, a Replace key button, and Disconnect. Disconnecting removes the stored key and stops daily syncs; your items and history stay.
Option 4: connect Nookal (Settings > Data source)
RIFT works with your Nookal account through Nookal's API, using a key you create yourself in Nookal.
- In Nookal go to Setup, then Connections, then API Keys, and click Generate API Key.
- On the new key, tick every location, tick Invoices under Additional Options, and switch Status on. A new Nookal key starts with all three off. Leave Clinical Notes, Documents and Logos & Staff Photos unticked - RIFT never reads them. Click Save Changes.
- In RIFT, open Settings, click Data source, paste the key under Connect Nookal in the Nookal section and click Connect.
- RIFT checks the key with Nookal before saving it, then runs your first sync (this can take a few minutes). The section shows Connected with the last four characters of the key, and lists the locations the key covers: "This key covers: ...".
Once Nookal is connected the section shows a Sync now button, a Replace key button, and Disconnect. Disconnecting removes the stored key and stops daily syncs; your items and history stay.
Nookal keys are not read-only - Nookal says any API key has full access to the account. RIFT only ever reads: it never adds, edits or deletes anything in Nookal, and treatment notes are never requested. You can delete the key in Nookal at any time to end the connection. A step-by-step guide is at /rift-nookal-setup.
RIFT will not accept my Nookal API key
RIFT tests a Nookal key before it saves it, and tells you which of these it found:
- "Nookal rejected this key" - the key was not copied in full, or it has been deleted in Nookal. Copy the whole key again from Setup > Connections > API Keys.
- "This key doesn't cover any location yet" - no location is ticked on the key. Tick every location your practice uses and click Save Changes.
- "This key can't read invoices" - either Invoices is unticked under Additional Options, or the key's Status switch is off. Nookal still lets such a key read appointments, so without this check RIFT would see every invoice you have ever raised as missing. Tick Invoices, switch Status on, click Save Changes, and connect again.
A key that fails any of these is never stored, and your existing connection is left exactly as it was. If those options are changed on the key later, a sync stops rather than changing your numbers, and Sync now tells you why.
How often RIFT syncs, and how to sync now
- Nothing connected yet: there is nothing to sync until RIFT has a data source. Start at Settings > Data source (the "Where do I enter my API key" sections at the top of this article say which section to use). The first sync runs by itself as soon as a key is accepted or an export is uploaded; Sync now is only useful after that.
- Cliniko and Nookal: RIFT syncs itself once a day. Click Sync now in the header (or in the system's section of the Data source card) for fresh numbers on the spot.
- Zanda API: click Sync now in the RIFT header whenever you want fresh numbers.
- Zanda export: the numbers are a snapshot as at the export date. Upload a fresh export whenever you want them updated - the header shows Upload a fresh export and how old the current numbers are.
Every sync re-reads your data and reconciles it against the items RIFT is already tracking: new findings become open items, items that are still there are refreshed, and items that have disappeared from your practice software (for example, an invoice that has now been paid) are marked recovered. Your own ticks, notes and dismissals survive a sync. The one exception is a change of system, covered in "Switching from Zanda, Cliniko or Nookal to a different system" above.
What RIFT reads, and what it never reads
RIFT reads appointments, invoices, payments, session packs, claims and referrals, plus the client details it needs to name an item and, for chase emails, the client's email address. It never reads clinical notes, forms, communication logs, diagnoses or insurance files. For a Zanda export, that is why only seven files are ticked. For Cliniko and Nookal, treatment notes are never requested, and on a Nookal key the Clinical Notes and Documents options should stay unticked.
What happens to an uploaded export
A Zanda export you upload to RIFT is unpacked into a temporary folder, read, and deleted before the analysis results are even saved. Nothing from the export is stored - RIFT keeps only the items it derives (invoice numbers, dates, amounts, client names on those items). The same applies to the free report at https://rift.rapidintelligence.com.au/try, where only the totals are kept. On the free report an API key (Cliniko or Nookal) is used for one read, in memory, and discarded.
What RIFT can and cannot detect from Zanda data
Zanda shares the most, so every RIFT check runs on a Zanda export or the Zanda API:
- Appointments completed but never invoiced.
- Cancellations and no-shows never charged.
- Overdue invoices, for private and funded payers, chased for what is still owing when an invoice has been paid in part.
- Funded sessions left unbooked.
- Reception-note catches, such as "paid cash" written in an appointment note.
- Payments received but not allocated to an invoice.
- Medicare claims not confirmed paid, when Medicare Claims is in the export.
- Group appointments.
What RIFT can and cannot detect from Cliniko data
RIFT checks these on Cliniko:
- Appointments completed but never invoiced.
- Cancellations and no-shows never charged. A late cancellation is one cancelled within 24 hours of the start time, because Cliniko has no late-cancellation state of its own.
- Overdue invoices, for private and funded payers - the payer is read from patient cases.
- Funded sessions left unbooked - read from patient cases.
- Reception-note catches, from appointment and invoice notes.
RIFT cannot check these on Cliniko:
- Payments received but not allocated to an invoice - Cliniko's API does not share payment records. For the same reason an invoice paid in part still shows its full amount until Cliniko marks it paid.
- Medicare claims not confirmed paid - claim outcomes are not in Cliniko's API.
- Group appointments - not yet; only individual appointments are analysed.
- Invoices still in draft are invisible to the API, so that work reads as uninvoiced.
What RIFT can and cannot detect from Nookal data
RIFT checks these on Nookal:
- Appointments completed but never invoiced.
- Cancellations and no-shows never charged. A late cancellation is one cancelled within 24 hours of the start time, because Nookal has no late-cancellation state of its own.
- Overdue invoices, chased for what is still owing - RIFT uses Nookal's own balance for each invoice, so a part payment is taken into account. A third-party payer is read from the invoice.
- Reception-note catches, from appointment and invoice notes.
RIFT cannot check these on Nookal yet:
- Funded sessions left unbooked - patient cases are not read from Nookal.
- Payments received but not allocated to an invoice - payments are not read from Nookal as separate records.
- Medicare claims not confirmed paid - claim outcomes are not in Nookal's API.
- Classes - class bookings are skipped; only consultations are analysed.
An invoice with no line items on it is ignored, so an appointment attached to an empty Nookal invoice still reads as uninvoiced.
RIFT uses the name of the system you are connected to
RIFT's wording throughout the dashboard uses the name of the system your numbers came from - Zanda, Cliniko or Nookal - for example on the Paid outside button and the billing-location setting.
How old are my RIFT numbers?
The header of every RIFT page states how old the numbers are. For an uploaded export, that is the date the export was taken, not the day you uploaded it. The line turns amber once the data is 14 days old and red at 30 days. Live API data (Zanda API, Cliniko or Nookal) shows the last sync date instead.
The RIFT header says "sync failing", or the Data source card says the connection needs attention
Cliniko and Nookal clinics are synced once a day. If two days pass without a sync that works, the last-sync line in the RIFT header turns amber and reads "sync failing"; at three days it turns red, the Data source card in Settings reads "Cliniko connection needs attention" (or Nookal), and patient emails are put on hold until a sync succeeds.
To fix it, open Settings > Data source and look at the connected system's section. A Connection problem row says what happened at the last attempt and shows the date of the last successful sync:
- The stored key was rejected - it may have been deleted or replaced in your practice software. Create a fresh key and paste it under Replace the key.
- The key can no longer read invoices (Nookal) - on the key in Nookal, tick Invoices and switch Status on, click Save Changes, then click Sync now in RIFT.
- RIFT could not reach the system - this often clears by itself. Click Sync now to try again and see the message.
- The Nookal key no longer covers a location - see the next section.
As soon as a sync succeeds the warning clears, the card reads connected again, and any held patient emails go out as normal. RIFT emails the recipients of your weekly digest (Settings > Weekly digest) once when a connection has been failing for three days. On the Zanda API there is no daily sync, so after three days the header asks you to click Sync now instead.
RIFT has stopped syncing: "your Nookal key no longer covers" a location
A Nookal API key only reads the locations ticked on it. If a location RIFT was reading is unticked on the key, RIFT stops syncing and shows a banner at the top of every page naming the location. Nothing in your numbers changes while it is stopped. RIFT stops because items it could no longer see would otherwise look like money you had collected.
There are two ways to start syncing again:
- The location should still be covered: in Nookal go to Setup > Connections > API Keys, tick the location on the key again and click Save Changes. Then click Sync now in RIFT. Everything carries on as before.
- The location really has gone: open Settings > Data source and click Accept the new coverage in the Nookal section. RIFT closes the items it found at that location as "data source changed" - they are never counted as recovered - and syncs the locations the key still covers. Anything paid since the last sync is also closed rather than counted as recovered, that one time.
RIFT asks the same question if you paste a replacement key that covers fewer locations, or a key from a different Nookal account: nothing is saved until you confirm.