The Classes report shows you every group class, workshop and appointment service you offer: how full they were, who taught them, how many people showed up, and what they earned. It replaces six separate back-office reports with one.
New to Reports? How to use a Report covers the buttons and controls.
It helps you answer questions like:
Which classes fill up and which run half empty?
Which teacher gets the best attendance, and who has the most no-shows?
How much revenue does each class on my timetable actually earn?
Which of my sites is performing best on the same class?
Is my cancellation rate getting worse?
Which appointment services are people actually booking?
What this report replaces
This one report covers six back-office reports:
Old report | Where it is now |
Sessions | Group class, ungrouped |
Activities | Group class, grouped by Name |
Workshops | Group class, filtered to workshops, grouped by Name |
Activities and workshops per establishment | Group class, grouped by Name and Venue |
Activities and workshops per teacher | Group class, grouped by Name and Teacher |
Appointments | Appointment |
Each one is spelled out step by step in Matching your old back-office reports below.
Before you read the numbers
Two views, one switch. The Service Type control (in Filters) switches between Group class and Appointment. These are genuinely different things with different columns, so nothing carries over when you switch. Set your filters again afterwards. Group class is the default.
The reporting period. The date range filters on when the class or appointment starts, not when it was booked. The default is the last 6 months. 💡 Because it is based on the start date, the report includes classes in the future if your range extends forward.
The comparison. Each KPI box compares the period you have selected against the equivalent earlier period.
Group classes
One row is one class session, a single occurrence on your timetable at one date and time. A class that runs every Monday for ten weeks is ten rows.
The KPIs
KPI | What it shows |
Number of Group Classes | Group classes and workshops starting in the period. |
Number of Bookings | All bookings across those classes. |
Number of Attendees | Clients who actually attended. |
Total Earned Revenue | Revenue earned on those classes, including VAT / sales tax. |
Columns
Column | What it shows |
Name | The name of the class. Click it to open the class in the back office. |
Start At | Date and time the class starts. |
Category | The category the class belongs to. |
Number of Bookings | Bookings taken against the class's available spots, shown as |
Earned Revenue | Revenue earned from this class, including VAT / sales tax. Counts confirmed bookings and cancelled bookings that were not refunded. |
Earned Revenue excl. Tax | The same figure with VAT / sales tax removed. |
Fill Rate | Bookings as a percentage of available spots. |
Status | Status of the class: either 'ok' or 'canceled'. |
Number of Attendees | Clients who attended. For classes that have not happened yet this shows the number of bookings instead, so upcoming classes do not look empty. |
Occupancy Rate | Attendees as a percentage of available spots. For classes in the future this matches the fill rate. |
Number of No-Shows | Clients who booked but did not attend. Always 0 for classes in the future. |
Number of Cancellations | Bookings that were cancelled, for any reason. |
Cancellation Rate | Cancellations as a percentage of all bookings ever made for the class, cancelled ones included. |
Number of Aggregators bookings | Bookings that came through a partner platform, against the spots you made available to them, shown as |
Average Earned Revenue per Client | Earned revenue divided by the paying clients on the class. Partner bookings are left out, because their revenue is not counted yet. |
Day of Week | The day the class falls on. |
Date | The date of the class, without the time. |
Time | The start time of the class, without the date. |
Duration (minutes) | How long the class lasts, in minutes. |
Teacher Name | The teacher who taught the class, including a substitute if one stepped in. |
Teacher Email | That teacher's email address. |
Is Substitute Teacher | True when someone other than the originally scheduled teacher taught it. |
Venue | Where the class took place. |
Is Rollcall Validated? | True when the roll call has been completed and is up to date. Turns False if a booking changed after the roll call was last saved. |
Rollcall Updated At | When the roll call was last saved. Empty if it was never done. |
Number of bookings in waiting-list | Clients waiting for a spot, against the maximum waiting-list size, shown as |
Class Type | Group class or Workshop. |
Level | The level set on the class. |
Is Livestream | True for livestreamed classes. |
⚠️ Attendance depends on the roll call. Number of Attendees and Number of No-Shows both come from the roll call. If a class's roll call was never completed, everyone who booked counts as a no-show. Is Rollcall Validated? is the column to check before trusting an attendance figure.
⚠️ Earned revenue can change over time. For a client on an unlimited pass, the revenue attributed to each class depends on how many classes they have used the pass for so far. As they keep booking, the revenue spread across their earlier classes shifts, so two exports taken weeks apart can show slightly different revenue for the same past class. Revenue from aggregators is not included at all yet.
Filters
Filter | What it does |
Name | One or more classes, by name. |
Category | One or more categories. |
Status | Classes that ran, or cancelled ones. |
Teacher | One or more teachers. |
Venue | One or more venues. |
Duration (minutes) | A range of class lengths. |
Class type | Group class or Workshop. |
Day of Week | One or more days. |
Number of bookings | Classes with a number of bookings in a range, for example everything with fewer than 3. |
Number of attendees | A range of attendees. |
Number of no-shows | A range of no-shows. |
Number of cancellations | A range of cancellations. |
Is archived ? | Whether to include classes belonging to an archived class type. |
Is rollcall validated ? | Classes whose roll call is done, or those still outstanding. |
Is livestream ? | Livestreamed classes, or in-person ones. |
Group By
Group by | Use it to answer |
Name | Which classes on my timetable perform best overall. |
Teacher | How my teachers compare on fill rate, attendance and no-shows. |
Venue | How my sites compare. |
Day of Week | Which days are worth keeping and which to cut. |
Category | Which kinds of class earn the most. |
Class Type | Group classes against workshops. |
Level | Whether beginner or advanced classes fill better. |
Start At | How things move over time. Choose the step: day, week, month, quarter or year. |
Grouped rows give you:
Summary column | What it measures |
Number of Bookings | Total bookings in the group, against total available spots. |
Fill Rate | Total bookings as a percentage of available spots. |
Earned Revenue | Combined revenue for the group, including VAT / sales tax. |
Number of Attendees | Total clients who attended. |
Number of No-shows | Total clients who booked and did not attend. |
Number of Cancellations | Total cancellations. |
Occupancy Rate | Total attendees as a percentage of available spots. |
Attendance Rate | Total attendees as a percentage of booked spots. |
No-show rate | Total no-shows as a percentage of available spots. |
Cancellation Rate | Total cancellations as a percentage of all bookings ever made across the group. |
💡 The rates are recalculated for the group as a whole rather than averaged across its rows. A teacher's fill rate is their total bookings against their total capacity, instead of the average of their individual class fill rates.
Example. A teacher runs two classes this week:
Class | Bookings | Capacity | Fill rate |
Sunrise yoga | 1 | 2 | 50% |
Evening flow | 45 | 50 | 90% |
Averaging the two class fill rates gives 70%. The teacher's fill rate is instead 46 bookings against 52 spots → 88%. The small class can't drag the number down, because each spot counts once no matter which class it belongs to.
Appointments
Switch Service Type to Appointment.
One row is one appointment service you offer, with its bookings totalled up across the period.
The KPIs
KPI | What it shows |
Number of Services | Appointment services on the report. |
Number of Bookings | Bookings taken for those services in the period. |
Number of Used Spots | Spots held by bookings that went ahead. |
Number of Cancelled Spots | Spots held by bookings that were cancelled. |
Columns
Column | What it shows |
Name | The name of the appointment service. |
Category | The group the service belongs to. |
Teacher Names | Every teacher who offers this service, listed together. |
Bookings | Every booking taken for the service in the period, excluding cancelled ones. |
Number of Used Spots | The capacity held by bookings that went ahead. For a one-to-one service this is the number of confirmed bookings. For a service several people can book at once, it is the spots they took between them. |
Number of Cancelled Spots | The capacity held by bookings that were cancelled, whoever cancelled them. |
Is Available | True when this service is currently switched on in your back office. |
Is Home Service | True when the service is delivered at the client's home. |
Description | The description shown to clients when they book. |
Is Available for Aggregators | True when you have opened this service to marketplace partners, so it appears in their catalogue. False when it is bookable only through bsport. |
Filters
Filter | What it does |
Name | One or more services. |
Category | One or more categories. |
Teacher | One or more teachers. |
Is available ? | Narrows to services that are currently switched on in your back office. |
Is home service ? | Narrows to services that are delivered at client’s home |
Number of bookings | Services with a number of bookings in a range. |
Number of cancellations | A range of cancellations. |
Is available for aggregators? | Narrows to services you have opened to marketplace partners, or to those you have kept bsport-only. |
Group By
Group by | Use it to answer |
Category | Which kinds of appointment service are booked most. |
Grouped rows give you:
Summary column | What it measures |
Number of Services | How many services fall into the group. |
Number of Bookings | Their combined bookings. |
Number of Used Spots | Their combined used spots. |
Number of Cancelled Spots | Their combined cancelled spots. |
Matching your old back-office reports
Sessions
To reproduce it: set Service Type to Group class.
Where your old columns are now. A / means the column does not exist on that side.
Name of the column in legacy reports | Name of the column in legacy Excel file export | Name of the column in the new report (and downloaded file) |
Name | Name | Name |
Full date | Full date | Start At |
Marginal value (incl. VAT / Sales Tax) | Marginal value (incl. VAT / Sales Tax) | Earned Revenue |
Marginal value (excl. VAT / Sales Tax) | Marginal value (excl. VAT / Sales Tax) | Earned Revenue excl. Tax |
Day | Day | Day of Week |
Date | Date | Date |
Cancellations | Cancelled | Status |
Time | Hour | Time |
Duration (in minutes) | Duration (minutes) | Duration (minutes) |
Teacher | Teacher | Teacher Name |
Teacher Email | ||
Establishment | Establishment | Venue |
Number of slots | Nb bookings | Number of Bookings — the second number |
Attendees | Nb attendants | Number of Attendees |
Absentees | Number absent | Number of No-Shows |
Studio | Franchisee | / |
You must validate the roll call | The rollcall must be validated | Is Rollcall Validated? |
Date of last modification of the roll call | Last update on | Rollcall Updated At |
On waiting list | Number booking on waiting-list | Number of bookings in waiting-list — the first number |
Waiting list capacity | Waiting-list max size | Number of bookings in waiting-list — the second number |
/ | / | Category |
/ | / | Fill Rate |
/ | / | Occupancy Rate |
/ | / | Number of Cancellations |
/ | / | Cancellation Rate |
/ | / | Number of Aggregators bookings |
/ | / | Average Earned Revenue per Client |
/ | / | Is Substitute Teacher |
/ | / | Class Type |
/ | / | Level |
/ | / | Is Livestream |
What's different
Revenue is counted slightly differently. The old report counted cancelled bookings even if they were refunded. Here, a cancelled booking only counts if it was not refunded.
There is no time-of-day filter. The old report let you narrow to classes starting between, say, 18:00 and 20:00. You can filter by Day of Week, but not by time of day. If you need to filter on the hour in a spreadsheet, see Splitting date and time in Excel.
"Number of slots" (exported as "Nb bookings") was the class capacity, not its bookings: it matches the second number in Number of Bookings, which reads
booked / available spots. The first number — how many people actually booked — is new."On waiting list" and "Waiting list capacity" are now the two halves of Number of bookings in waiting-list, which reads
waiting / maximum: On waiting list is the first number, Waiting list capacity is the second."Cancellations" (exported as "Cancelled") was a yes/no flag on the class itself; it is now the Status column, reading 'ok' or 'canceled'.
Is Rollcall Validated? is the opposite way round from "You must validate the roll call": True means the roll call is done.
Activities
To reproduce it: set Service Type to Group class, then Group By → Name.
Where your old columns are now. A / means the column does not exist on that side.
Name of the column in legacy reports | Name of the column in legacy Excel file export | Name of the column in the new report (and downloaded file) |
Name | Name | Name (the Group By) |
Archived | Archived | / (now the Is archived ? filter) |
Number of bookings | Booking number | Number of Bookings — the first number |
Attendees | Nb attendants | Number of Attendees |
Absentees | Number absent | Number of No-shows |
Attendance rate | Attendance rate | Attendance Rate |
Absence rate | Absence rate | No-show rate |
Number of cancellations | Cancellations | Number of Cancellations |
Cancellation rate | Cancellation rate | Cancellation Rate |
Studio | Franchisee | / |
/ | / | Occupancy Rate |
/ | / | Fill Rate |
/ | / | Earned Revenue |
What's different
The old report mixed in workshops and had no way to separate them, so adding up the old Activities and Workshops reports double-counted every workshop. Here you separate them with the Class type filter.
Cancellations are counted more completely. The old report counted bookings cancelled by the client or by a staff member, but not bookings cancelled because the class itself was cancelled. Those disappeared from the report entirely. Here every cancellation counts, so your cancellation numbers will be higher than before, and more accurate.
You now have revenue. The old report had no money columns.
This report is reproduced with Group By → Name, so the new columns above are the grouped summary columns plus the group-by dimension itself, not the per-class detail columns.
"Absence rate" measured absentees against the bookings marked in the roll call. No-show rate measure them against class capacity instead, so the figures will not match the old ones.
Workshops
To reproduce it: set Service Type to Group class, filter Class type to Workshop, then Group By → Name.
Where your old columns are now. A / means the column does not exist on that side.
Name of the column in legacy reports | Name of the column in legacy Excel file export | Name of the column in the new report (and downloaded file) |
Name | Name | Name (the Group By) |
Archived | Archived | / (now the Is archived ? filter) |
Number of bookings | Booking number | Number of Bookings — the first number |
Attendees | Nb attendants | Number of Attendees |
Absentees | Number absent | Number of No-shows |
Attendance rate | Attendance rate | Occupancy Rate |
Absence rate | Absence rate | No-show rate |
Number of cancellations | Cancellations | Number of Cancellations |
Cancellation rate | Cancellation rate | Cancellation Rate |
Studio | Franchisee | / |
/ | / | Fill Rate |
/ | / | Earned Revenue |
What's different
Archived workshops are now included by default. The old report always left them out. Set Is archived ? to exclude them if you want the old behaviour.
Cancellations are counted more completely. The old report counted bookings cancelled by the client or by a staff member, but not bookings cancelled because the class itself was cancelled. Those disappeared from the report entirely. Here every cancellation counts, so your cancellation numbers will be higher than before, and more accurate.
You now have revenue, which the old report did not have.
This report is reproduced with the Class type filter set to Workshop and Group By → Name, so the new columns above are the grouped summary columns plus the group-by dimension itself, not the per-class detail columns.
"Absence rate" measured absentees against the bookings marked in the roll call. No-show rate measure them against class capacity instead, so the figures will not match the old ones.
Activities and workshops per establishment
To reproduce it: set Service Type to Group class, then Group By → Name and Venue.
Where your old columns are now. A / means the column does not exist on that side.
Name of the column in legacy reports | Name of the column in legacy Excel file export | Name of the column in the new report (and downloaded file) |
Name | Name | Name (the Group By) |
Establishment | Establishment | Venue (the Group By) |
Number of bookings | Booking number | Number of Bookings — the first number |
Attendees | Nb attendants | Number of Attendees |
Absentees | Number absent | Number of No-shows |
Absence rate | Absence rate | No-show rate |
Attendance rate | Attendance rate | Occupancy Rate |
Cancellation rate | Cancellation rate | Cancellation Rate |
Studio | Franchisee | / |
/ | / | Fill Rate |
/ | / | Earned Revenue |
/ | / | Number of Cancellations |
What's different
You now get cancellation counts, not just the rate. The old report showed a cancellation rate but never the number behind it.
Archived classes are now included by default. The old report always left them out. Set Is archived ? to exclude them if you want the old behaviour.
Cancellations are counted more completely. The old report counted bookings cancelled by the client or by a staff member, but not bookings cancelled because the class itself was cancelled. Those disappeared from the report entirely. Here every cancellation counts, so your cancellation numbers will be higher than before, and more accurate.
This report is reproduced with Group By → Name and Venue, so the new columns above are the grouped summary columns plus the two group-by dimensions, not the per-class detail columns.
"Absence rate" measured absentees against the bookings marked in the roll call. No-show rate measure them against class capacity instead, so the figures will not match the old ones.
Activities and workshops per teacher
To reproduce it: set Service Type to Group class, then Group By → Name and Teacher.
Where your old columns are now. A / means the column does not exist on that side.
Name of the column in legacy reports | Name of the column in legacy Excel file export | Name of the column in the new report (and downloaded file) |
Name | Name | Name (the Group By) |
Teacher | Teacher | Teacher (the Group By) |
Number of bookings | Booking number | Number of Bookings — the first number |
Attendees | Nb attendants | Number of Attendees |
Absentees | Number absent | Number of No-shows |
Absence rate | Absence rate | No-show rate |
Attendance rate | Attendance rate | Occupancy Rate |
Cancellation rate | Cancellation rate | Cancellation Rate |
Studio | Franchisee | / |
/ | / | Fill Rate |
/ | / | Earned Revenue |
/ | / | Number of Cancellations |
What's different
You now get cancellation counts, not just the rate, and earned revenue per teacher, which the old report had no way to show.
Archived classes are now included by default. The old report always left them out. Set Is archived ? to exclude them if you want the old behaviour.
Cancellations are counted more completely. The old report counted bookings cancelled by the client or by a staff member, but not bookings cancelled because the class itself was cancelled. Those disappeared from the report entirely. Here every cancellation counts, so your cancellation numbers will be higher than before, and more accurate.
This report is reproduced with Group By → Name and Teacher, so the new columns above are the grouped summary columns plus the two group-by dimensions, not the per-class detail columns.
"Absence rate" measured absentees against the bookings marked in the roll call. No-show rate measure them against class capacity instead, so the figures will not match the old ones.
Appointments
To reproduce it: set Service Type to Appointment and leave Group By off.
Where your old columns are now. A / means the column does not exist on that side.
Name of the column in legacy reports | Name of the column in legacy Excel file export | Name of the column in the new report (and downloaded file) |
Name | Name | Name |
Teacher | Teacher | Teacher Names |
Number of bookings | Booking number | Number of Used Spots |
Number of cancellations | Cancellations | Number of Cancelled Spots |
Studio | Franchisee | / |
/ | / | Category |
/ | / | Bookings |
/ | / | Is Available |
/ | / | Is Available for Aggregators |
/ | / | Is Home Service |
/ | / | Description |
What's different
Archived services now appear by default. The old report showed only services currently marked as available, so switching a service off erased its past bookings from the report. Here every service is listed, but you can filter them out with the Is available ? filter
The last day of your date range is now included. The old report stopped just short of the end date, quietly leaving out that day's appointments. Expect slightly higher numbers here, and they are the correct ones.
Cancellations are counted more completely. The old Number of cancellations counted bookings cancelled by the client or by a staff member, but not ones cancelled because the session itself was cancelled. Number of Cancelled Spots counts all of them, so this number will be higher than before.
Cancellations are measured in spots, not bookings. For a one-to-one service these are the same number. For example, cancelling a 1:1 appointment counts as 1 cancellation, but cancelling a group appointment with 3 spots counts as 3 cancellations.
There is no time-of-day filter. If you need to filter on the hour in a spreadsheet, see Splitting date and time in Excel.
Downloading
The download gives you exactly what you are looking at: your view, your columns, your filters, your date range, and the summary if you are grouped. Available as Excel, CSV or PDF.
Data freshness
On Report pages, data is refreshed on an hourly basis.
Permissions
Access follows your existing back-office report permissions. Everyone who can see this report sees every venue in your company, so use the Venue filter or group by Venue to narrow it down to one site.
Related articles

