# Gym Occupancy Analytics: Peak Hours From Check-Ins

> Count check-ins per hour, multiply by average visit length, and compare class rosters with capacity. Formulas, an example peak-hour grid, data pitfalls and what to change once you know your busy hours.

*Author: Trainera Team  |  Published: 2026-10-11  |  Reading time: 9 min*

## How do you measure gym occupancy with check-in data?

You measure gym occupancy by counting check-ins per hour and multiplying by the average visit length: 60 entries an hour with a 75-minute average visit means about 75 people in the building at the peak of that hour. Class fill rate is booked or attended places divided by capacity. A check-in log plus a spreadsheet is enough; you do not need a dedicated occupancy system to start.

The catch is that most gyms record entries, not exits. Without a check-out, occupancy is an estimate, and how good it is depends on how cleanly every visit gets recorded. The rest of this guide covers the formulas, the data problems that skew them, and what to change once you know your peaks.

## The three occupancy numbers worth tracking

Three numbers cover almost every decision: entries per hour, estimated people inside, and class fill rate.

| Metric                  | Formula                                          | Data you need                                                | Decision it supports                            |
| ----------------------- | ------------------------------------------------ | ------------------------------------------------------------ | ----------------------------------------------- |
| Entries per hour        | Count of check-ins in each hour, per weekday     | One check-in per visit with a time                           | Staff rota, cleaning times, front desk cover    |
| Estimated people inside | Entries per hour x average visit length in hours | Entries plus an average visit length (measured or estimated) | Crowding, equipment pressure, member experience |
| Class fill rate         | Booked (or attended) places / class capacity     | Class roster and the room or class capacity                  | Which classes to add, move or cancel            |
| No-show rate            | (Booked minus attended) / booked                 | Roster plus attendance marks or check-ins                    | Waitlist and booking rules                      |

Average visit length is the input most gyms do not have. If you have no check-out data, time a sample yourself: note entry and exit for a few dozen members across different days, or ask staff to log it for a week. Use the result as an assumption and say so in your reports.

## How to find your peak hours

Group a few weeks of check-ins by weekday and hour; the busiest cells are your peaks.

1. Take at least four weeks of check-ins, so one odd week does not decide your rota.
2. Build a grid: weekdays across, hours down, entries in each cell.
3. Average each cell across the weeks.
4. Mark the top cells. Those are the hours where crowding, waiting for racks and front-desk queues happen.
5. Repeat each quarter, and after any price change, new class or opening-hours change.

Here is an illustrative weekday grid for a mid-size club. The numbers are an example, not a benchmark; your own data will look different.

| Hour        | Mon | Wed | Sat | Estimated people inside (Mon, 75-min visit) |
| ----------- | --- | --- | --- | ------------------------------------------- |
| 06:00-07:00 | 35  | 32  | 8   | about 44                                    |
| 12:00-13:00 | 28  | 30  | 40  | about 35                                    |
| 17:00-18:00 | 62  | 58  | 25  | about 78                                    |
| 18:00-19:00 | 70  | 66  | 18  | about 88                                    |
| 20:00-21:00 | 30  | 27  | 6   | about 38                                    |

For context on scale: swiss active reports an average of 1,007 members and 6,077 check-ins a month per fitness center in Switzerland in 2025 ([swiss active Eckdatenstudie 2026](https://swissactive.ch/wp-content/uploads/2026/04/sa-eckdaten-studie-2026-report%5FDE.pdf)), and the UK has 12.2 million members across 5,842 clubs ([UK Active market report, April 2026](https://www.leisureopportunities.co.uk/news/UK-Active-report-shows-the-fitness-sector-has-achieved-record-growth/362767)). Membership is not attendance, though: only your check-in data tells you how many of those members actually come, and when.

## Estimating how many people are inside without check-outs

Without exits, estimate people inside from recent entries: everyone who checked in within the last average visit length is probably still there.

A simple rolling method: at 18:30, count check-ins between 17:15 and 18:30 if your average visit is 75 minutes. That count is your estimated occupancy at 18:30\. It runs slightly high for people who leave early and low for people who stay long, and it averages out over weeks.

Two ways to make it better:

* Measure visit length separately for different groups if they behave differently, for example class members versus open-gym members.
* Compare the estimate with a manual headcount a few times. If the estimate is consistently 20% off, adjust the visit length rather than trusting the formula blindly.

## Class fill rates and no-shows

For classes, the roster gives you better data than door entries, because you know both capacity and who booked.

* Track fill rate per recurring class slot, not per class type. A Tuesday 18:00 spin and a Thursday 07:00 spin are different products.
* Track no-shows separately. A class that is 100% booked and 60% attended needs booking rules, not a second slot.
* Look at the waitlist (or the people who tried to book) before adding a slot. Consistent overflow is the signal; one busy week is not.
* Low fill for many weeks in a row means move the time, change the format or replace the class.

Our guide to [gym class scheduling and booking software](/blogs/gym-class-scheduling-software) covers how booking rules and waitlists work in practice.

## Data problems that distort occupancy numbers

Occupancy analysis is only as good as the check-in log; missing, duplicate and late entries all bend the curve.

* **Missed check-ins.** If staff wave members through at busy hours, your peaks look smaller than they are. That is the worst possible time to undercount.
* **Tailgating.** At gates, two people on one entry undercounts. A spot check at peak hours tells you how big the gap is.
* **Late-recorded entries.** Check-ins that are recorded later than the visit, for example after an internet outage at reception, land in the wrong hour. Treat them separately in hour-by-hour counts.
* **Non-visit rows.** Records created at sign-up or by staff for admin reasons are not visits. Filter them out.
* **Mixed methods.** If some members scan and others are checked in by hand, compare the share of each method across hours. A jump in manual check-ins at peak often means the scanner queue was too long.

Check-in data is personal data about your members' habits. The gym is the controller of that data, so check your own privacy obligations, keep only what you use, and offer a non-biometric option if you use biometric access; in Spain the data protection authority fined a gym for making fingerprint access mandatory with no alternative ([Conprodat, 2024](https://conprodat.com/2024/02/20/sancion-uso-huella-dactilar/), secondary report).

## Splitting occupancy by membership package

Peaks look different once you split check-ins by the package each member holds, and that split is what pricing decisions need.

Match each check-in to the member's package and rebuild the hour grid per package. Look for three patterns, each pointing to a different move:

* **One package drives most of the evening peak.** If a low-priced package fills your busiest hours, an off-peak version at a lower price, and a slightly higher price for full access, spreads the load without cutting revenue per visit.
* **Some packages barely appear in the log.** Members who pay but rarely come are a retention risk, not a capacity problem. Contact them before renewal time.
* **Class packages cluster around a few slots.** That tells you where a second instructor or a larger room pays off.

Keep the comparison simple: share of each package's check-ins that fall in your top peak hours. A table with one row per package and one percentage is enough to start a pricing conversation.

## What to do with your peak-hour data

Use the numbers to move staff, classes and promotions toward the hours members actually use, and away from guessing.

| What you see                            | What to try                                                                                                       |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Weekday evening peak far above the rest | Extra floor staff and front-desk cover at that hour; cleaning before, not during                                  |
| Quiet midday hours                      | Off-peak package or classes for shift workers, parents and retirees                                               |
| Classes full with high no-shows         | Booking deadline, late-cancel rule, waitlist promotion                                                            |
| Classes under-filled for weeks          | Move the slot toward a busier hour or replace the format                                                          |
| Members who stop appearing in the log   | Reach out before they cancel; our [churn reduction playbook](/blogs/how-to-reduce-gym-member-churn) has the steps |

Peaks also belong in your weekly KPI review next to sales and retention; see [the 8 gym KPIs to track weekly](/blogs/gym-kpis-owner-dashboard).

## Where Trainera fits

Trainera records the check-ins and class rosters you need for this analysis; it does not provide a dedicated occupancy dashboard, so the peak-hour math above is yours to run.

* **Check-in methods:** members check in with a digital member card and QR code in the member app, and staff can check members in manually from the gym overview.
* **Source on every record:** each check-in is recorded with its source: QR, manual, turnstile, registration or offline. That lets you separate real door entries from admin rows and spot when manual check-ins spike at peak. Hardware and specific gate integrations depend on your setup, so check them with Trainera before you buy equipment.
* **Classes:** the class planner supports recurring series and rosters, so fill rate per slot is a roster count against your room capacity.
* **TRAI for gyms:** every gym plan includes TRAI with 200 requests a month. It is read-only on gym data and can answer questions about members, leads, packages, classes and reservations. The sibling post on [questions gym owners can ask TRAI](/blogs/trai-gym-owner-questions) has examples.

Gym plans are Core $119, White Label $219 and Studio $259 a month in US dollars, with the first 3 trainers included; prices differ by country on trainera.fit/pricing. More on scanning in our post on [gym QR check-in and attendance](/blogs/gym-qr-check-in-attendance), and on entry hardware in [gym check-in and access control software](/blogs/gym-check-in-access-control-software).

## A four-week occupancy routine you can start Monday

1. Week 1: make sure every visit is checked in, at every hour, by every method. Fix the busy-hour gaps first.
2. Week 1: time a sample of visits to get your average visit length.
3. Weeks 1 to 4: collect check-ins and class rosters without changing anything.
4. End of week 4: build the weekday-by-hour grid, the estimated-occupancy column and fill rate per class slot.
5. Pick one change (staff, a class time or an off-peak offer), make it, and compare the next four weeks.

_Run check-ins, classes and memberships from one dashboard with [Trainera for gyms](/for-gyms)._

## FAQ

### How do gyms know how busy they are?

Most count check-ins per hour. Without check-outs, multiply entries per hour by the average visit length to estimate how many people are inside.

### What are the busiest hours at a gym?

It differs by club, so use your own data. Group at least four weeks of check-ins by weekday and hour; the highest cells are your peaks.

### How do you calculate class fill rate?

Booked or attended places divided by class capacity, tracked per recurring slot. Track no-shows separately: booked minus attended, divided by booked.

### Can I track gym occupancy without turnstiles?

Yes. QR or manual check-ins give you entries per hour, which is enough to find peaks and estimate occupancy, as long as every visit is recorded.

### Does Trainera have an occupancy dashboard?

No dedicated occupancy dashboard. Trainera records each check-in with its source (QR, manual, turnstile, registration, offline) and keeps class rosters, which is the data the analysis needs.

---
Source: https://trainera.fit/blogs/gym-occupancy-analytics
