Free template
The Excel session tracker for personal trainers, and when to stop using it
By Scott, builder of PacksLeft
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. 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 four tabs. Clients is the roster, and its eight columns are the ones the importer reads. At a glance adds the roster up as you edit it: how many clients, sessions left and used, who is at 2 or fewer, and what the sessions not yet trained are worth at full pack price. 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.
Does the spreadsheet deduct sessions automatically?
No. The download has no formulas linking the Sessions log to the Clients roster. After a session is used, add a dated entry to Sessions and manually update remaining in Clients. Cross-check the two when reconciling a balance. You can add formulas to your own working copy; keep the supported roster column names if you plan to import it into PacksLeft.
Is this a workout programming template?
This template tracks prepaid session packs, sessions left, and expiry. Its payment fields are the full pack price and the method used to pay in full. It has no amount-paid or amount-owed fields and does not store partial-payment history. It does not prescribe exercises, sets, reps, or training programs. Keep workout programming in your existing tool and use this sheet for the session record.
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.
A simple routine for keeping the count current
Update the roster right after the session, while the visit is still fresh. Add the dated entry to Sessions first, then change remaining in Clients. If you are interrupted, leave yourself a clear note and finish the update before the next appointment; do not rely on memory at the end of the week.
Use the same entry labels each time: attended, late cancel, no-show, comp, or correction. The label explains why the total changed. A late cancel should only reduce the balance when that is the policy the client agreed to. Keep the session date and the date you corrected the record if those differ.
Example: fixing a count without erasing history
Suppose a 10-pack shows 6 sessions left, but the dated log has only three attended visits. Do not overwrite the roster with 7 and delete the disputed row. Review the calendar and messages with the client, identify the duplicate or missing entry, then add a correction note that names the date and reason. Once you agree on the corrected starting point, update the roster to 7 and retain both the original entry and the explanation.
Reconcile at a consistent time
A short weekly check can catch a forgotten update before renewal. Compare each active client’s remaining count with the dated session log, review packs nearing expiry, and check that a new purchase has a new pack reference. Resolve differences against your calendar or appointment history; do not use a payment receipt to infer how many sessions were delivered.
Know when the workbook is no longer enough
A spreadsheet can be a good fit when one person maintains the roster and both people can review the count together. It becomes harder when several trainers edit it, clients need the balance between visits, or updates are routinely delayed until Sunday. If you keep making duplicate copies, losing track of which one is current, or answering the same balance question by text, compare a shared record before moving every client.
Keep a private backup and limit access to the working copy. Do not put workout notes or sensitive health details in a roster that is meant to track credits. Before importing, remove test rows and confirm the supported column names; extra payment-history columns in your own workbook do not become imported history automatically.
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, Venmo pack requests, and card checkout through Stripe. Install it on your home screen; your clients use a link with no download.
$14.99 / month
30 days free. No card. Cancel anytime. No refund for the current month. Switch to annual any time. Stripe credits the unused part of the month. Renews monthly at $14.99 until cancelled.
The importer accepts this exact sheet.