Nabu
Integrations

Connecting Zenoti

How to connect Zenoti to Nabu by API key or S3 export bucket, which method suits your account, and what appointment and sales data gets synced.

About the Zenoti integration

Zenoti is a booking, POS, and practice management platform widely used by medspas and aesthetic clinics. It is the one platform Nabu can read from directly, and there are two ways to do it:

MethodWhat it isBest for
Direct connectionNabu calls the Zenoti API with an API keyAccounts with API access enabled
Export bucketNabu reads the S3 bucket Zenoti writes your data exports intoAccounts on Zenoti's S3 export, or where API access is not available

Either way, data syncs on a regular schedule with no manual exporting, and your financial dashboards stay current without ongoing work.

If neither is available to you, CSV import and manual setup work on Zenoti exactly as they work on every other platform. See CSV Fallback.

What Nabu pulls from Zenoti

Data typeDetails
AppointmentsDate, service, provider, duration, room and status, including booked, completed, canceled and no-show visits when Zenoti provides them
SalesInvoice amounts, payment methods, discounts, credits
ClientsName, client ID, contact info
ProvidersName, employee ID, role
ServicesName, price, duration, category
MembershipsYour membership plans, and each client's memberships with their current status, freeze and cancellation dates, auto-renew and whether dues are being collected

What Nabu does NOT pull from Zenoti

Nabu does not access or import clinical notes, intake forms, medical records, HIPAA-protected health information, or any non-financial data stored in Zenoti. The connection is scoped to scheduling and billing data only.

Nabu reads from Zenoti. It never writes appointments, invoices, or client records back.


Option A: Direct connection (API)

Step 1: Check that API access is enabled

Log into Zenoti and go to Admin → Organization → API keys. If you see an API key listed there, you're ready.

If API access isn't enabled, contact Zenoti support and ask them to turn it on for your account. This is a standard request and typically takes one to three business days. Most mid-tier and enterprise Zenoti plans include API access; some entry-level plans do not.

Step 2: Connect in Nabu

On the source step of onboarding, choose Zenoti, then choose Direct connection. The next step asks for:

  • Zenoti account name: the subdomain you sign in to Zenoti with
  • API key: from Admin → Organization → API keys
  • Base URL: leave the default unless Zenoti gave you a different one

Click Verify and continue. Nabu tests the key immediately and reads your center list. If you have more than one center, you pick which one to set up first on the next step, and you can add the rest later from Settings.


Option B: Export bucket (S3)

Zenoti can write your data exports into an S3 bucket, and Nabu reads that bucket directly. You need three things from Zenoti: the bucket name, an access key ID, and a secret access key. Nabu resolves the AWS region and the export folder itself.

Many export buckets only accept requests from approved IP addresses. Onboarding shows you Nabu's connection IPs to send to Zenoti, and lets you finish setup and checkout while the request is pending. Zenoti is marked connected only once the bucket test succeeds.

The full walkthrough, including the allowlist request and what each failed test message means, is on its own page: Zenoti S3 export bucket.


Your first import

After a successful connection, Nabu starts pulling your data. It does this in a deliberate order rather than all at once:

  1. Your setup first. Locations, rooms, providers, services, products, packages, memberships and your client list. This is what the rest of your numbers hang off.
  2. The last 30 days of sales. This is the minimum your dashboard needs to stop looking empty, so it lands early.
  3. The previous 13 months. This is what makes year over year comparisons possible, and it fills in behind you while you are already using Nabu.
  4. Everything older, a month at a time, quietly in the background until your history runs out.

How long it takes

Honestly: it depends on your size, and a large account takes longer than you might expect.

Your accountRoughly how long
A few hundred clients, one locationMinutes
A few thousand clients, one to two years of historyAn hour or two
Many thousands of clients, several years, multiple locationsSeveral hours, sometimes overnight

The first import is the slow one. Every refresh after it only looks at what has changed, so it is far quicker.

You do not have to watch it. The import keeps running after you close the page, sign out or shut your laptop. Come back whenever you like and the progress will be further along. You can keep setting up other sections, and use the parts of Nabu that are already populated, while the rest fills in.

What the import statuses mean

The Data Import page shows a card per section. Here is what each state is telling you, and whether it wants anything from you.

StatusWhat it meansDo you need to do anything?
Green tick, no labelFinished.No
ImportingRunning right now.No
PausedNabu is waiting before it asks Zenoti for more. It resumes by itself.No
QueuedWaiting its turn behind another section.No
Not run yetScheduled, has not started.No
Not sentZenoti is not sending Nabu this kind of data.Only if you want it. Ask your Zenoti contact.
Needs a lookSomething stopped and will not fix itself.Yes. This is the only one that asks for you.

The short version: Paused is normal and by design. Needs a look is the only status that wants your attention.

Why sections pause, and why that is a good sign

Zenoti limits how quickly any one account can be read. That limit is set by Zenoti, it applies to your whole account rather than to one location, and it is shared across every location you have connected.

Nabu is built to stay inside it. It reads at a deliberate pace, and when Zenoti signals that it is being asked for too much too quickly, Nabu slows down further and waits before trying again. That wait is what Paused is showing you.

So a paused section is not an error, and it is not a sign that something is wrong with your data or your connection. It is Nabu being careful on purpose. Larger accounts see it more often simply because there is more to read, and a paused card will tell you roughly when it picks back up.

Nothing already imported is ever lost when a section pauses. Nabu keeps what it has and continues from there.

This is a deliberate trade. Nabu would rather take a few hours and bring your numbers in completely and correctly than rush, get refused by Zenoti, and leave you with a half-filled dashboard you cannot trust.

When a pause becomes something to look at

If a section keeps stopping, Nabu eventually stops retrying on its own and the card changes from Paused to Needs a look, with a Try again button. That is your cue. If it fails again after that, open a ticket from the Help section and tell us which section it was.

Earlier months

The Earlier months panel tracks your history filling in behind you. It counts only months that actually brought data in, so a month your clinic was closed shows as checked rather than loaded, and the count will not pretend to be complete when it is not.

If some months stop and cannot finish, the panel says how many and offers to try them again.

After connecting

Once the initial sync completes, Nabu refreshes your data automatically once a day, at 2am in your location's own time zone. Every location is on the same schedule, whatever plan you are on. If you have more than one location, each refreshes on its own local clock.

The nightly refresh includes sales and appointment updates. Zenoti accepts appointment requests for no more than seven calendar days at a time, so Nabu automatically breaks longer history into smaller date ranges. You do not need to set this up or run each range yourself.

If Zenoti cannot return one appointment range, Nabu keeps the sales and visits it did receive and records which dates were incomplete. A problem with one request does not erase the rest of the import or stop valid sales from reaching your dashboard.

You can pull something in sooner at any time. Data Import has Refresh everything, and each step has its own Refresh for when only one thing has changed. There is also a Sync now button on the Integrations page next to your Zenoti connection.

Automatic refresh can be switched off per connection if you would rather control it yourself.

Memberships over the direct connection

The direct connection tells Nabu how each client's membership stands at the moment Nabu reads it. It doesn't tell Nabu what happened before that, apart from any cancellation, freeze or closure date Zenoti includes. So membership figures for periods before you connected, such as past member churn, can show as Not available. If you also connect Zenoti's export bucket, its status history fills that in, and the two are matched so each membership is counted once. Memberships explains how each figure is counted.

If your data looks incomplete after syncing, check your Zenoti data directly: missing provider assignments or uncategorized services in Zenoti will show up in Nabu as gaps. The integration reflects what Zenoti has. It doesn't fill in missing data.

Frequently asked questions

Do I need a specific Zenoti plan to use the API? Most Zenoti mid-tier and enterprise plans include API access, but some entry-level or legacy plans do not. If you don't see the API keys section in your Zenoti settings, contact Zenoti support. If API access isn't available to you, the S3 export bucket is often an alternative worth asking them about.

Which should I choose, API or S3? If you have an API key, use the direct connection. It's the simplest. Use the export bucket if Zenoti has set one up for you, or if API access isn't available on your plan.

Can I switch between them later? Yes. API and S3 can be switched in either direction from Settings, and either can be switched to CSV import or manual setup.

A section says Paused. Is something broken? No. Paused means Nabu is deliberately waiting before it reads more from Zenoti, because Zenoti limits how fast any one account can be read. It resumes on its own, nothing already imported is lost, and there is nothing for you to do. See Why sections pause.

My import has been running for hours. Is that normal? For a large account, yes. The first import reads your entire client list and up to several years of sales, at a pace Zenoti will accept. Several hours is normal for a busy multi location account, and it will keep going after you close the page. If a section says Needs a look rather than Paused or Importing, that one has stopped and does want your attention.

Do I have to leave the page open? No. Everything continues in the background.

What if my data looks wrong after the sync? First, check the same data in Zenoti directly. If it looks wrong there, the issue is in Zenoti's records. If it looks right in Zenoti but wrong in Nabu, open a ticket from the Help section in your Nabu dashboard and include the specific discrepancy.

Can I disconnect and reconnect? Yes. Go to Settings → Integrations → Zenoti and use the disconnect option. You can reconnect at any time by entering your credentials again. A fresh sync will run on reconnection.


← Integrations Overview

Next: CSV Fallback →

On this page