Free template, no email wall
The Excel session tracker for personal trainers, and when to stop using it
Track pack size, sessions left, expiry, payments, and balances. Download the real sheet first. Decide about software later.
| Client | Pack | Used | Left | Expires | $ Paid | $ Owed | Last |
|---|---|---|---|---|---|---|---|
| Jamie O. | 10 | 9 | 1 | Sep 4 | 650 | 0 | Aug 25 |
| Maya T. | 10 | 7 | 3 | Oct 12 | 650 | 0 | Aug 19 |
| Dan K. | 10 | 2 | 8 | None | 325 | 325 | Aug 20 |
The XLSX opens in Excel, Numbers, or Google Sheets. The CSV is the roster tab on its own. No signup is required. See what each column means.
A 10-pack, three visits, and a partial payment
Suppose Jamie buys 10 sessions for $650 and pays $325 today. After three completed visits, the session balance is 10 − 3 = 7. The amount still owed is $650 − $325 = $325. When the second payment arrives, the money balance becomes zero; the session balance stays at seven.
The download has three tabs. Clients is the roster, and its eight columns are the ones the importer reads. Sessions is a dated log of who trained, when, and whether it was a completed session, a late cancel, or a no-show, which is what settles an argument that a single remaining number cannot. How this works explains every column. The preview above illustrates extra working columns such as used, paid, and owed; those are not separate imported payment-history fields. Keep your original history when moving a roster.
Follow the complete partial-payment exampleOpen the tracker in Google Sheets
Download the XLSX, upload it to Google Drive, and open it with Google Sheets. Save your own copy before adding client information. The CSV is also available if you prefer a plain table. If you add calculations to your working copy, protect the formula cells and retain the supported column names for import.
Where the sheet breaks
These are gym-floor problems. The spreadsheet is only where they become visible.
The locker problem
The session ends while your phone stays put. The row never gets updated.
The disputed count
Your sheet says one. Their memory says three. Nobody can verify the difference.
Sunday reconciliation
You rebuild the week from a calendar instead of doing work you can bill.
The missing payment
Venmo cleared, but the sheet still says owed. Sometimes it is the other way around.
How the columns work
Client
- name
- Whatever you call them. First name is fine.
- email / phone
- Optional. Use these when you want to send the client their private link.
Pack
- pack_count
- The number of sessions they bought, such as 5, 10, or 20.
- remaining
- Sessions left right now. This is the number the sheet exists to track.
- expires_on
- Leave blank if the pack does not expire.
Money
- price
- The full price of the pack, in dollars. Not the amount paid so far.
- source
- How it was paid in full: cash, Venmo, Zelle, bank, Stripe, or comp. Leave it blank if the client still owes part of the price. The pack imports without a payment, and you record each payment as it arrives.
When you are done with the sheet
PacksLeft adds one-tap logging, a shared client record, payment history, and Stripe Checkout. No workout library or client download.