Coach payroll
Set what each coach earns, schedule your staff’s shifts and time off, review the hours they log, and run one report that totals classes, hours, attendance and pay for any period.
- For gym owners and admins
- Menu: PAYROLL
- Staff: MY HOURS
- Everyone on staff: STAFF SCHEDULE
Overview
The payroll report lists every class your coaches taught in a period, with the number of people who attended and what each coach earned. It is built from your class schedule and your attendance records, so there is nothing to enter by hand except each coach's pay rate.
You can pay a coach a flat amount per class or an hourly amount, and add a bonus for each person in the room. Each coach can also have different rates for different class types, such as CrossFit, Spin or personal training.
Work that isn't a class, like programming or cleaning, is paid by the hour. Staff log their hours, an admin approves them, and approved hours appear on the same report.
The staff schedule plans the week: who coaches which classes (straight from your class schedule), who works which shifts, and who is off. Staff ask for shifts and time off there, and a shift that has happened is logged as hours in one tap, so the schedule and payroll stay in step.
Who can use it
Only gym admins see PAYROLL in the left menu. The report always covers the gym you currently have selected, so switch gyms first if you manage more than one.
Who logs hours
Coaches, admins, and anyone an admin adds as staff see MY HOURS and STAFF SCHEDULE in the ME section of the menu.
Quick start
- Open the reportSelect PAYROLL in the left menu.
- Set class types on classesSelect Setup → Class Types, add the kinds of classes you run, such as CrossFit, Spin or Personal Training, and pick one for each class in the list. You can also set it in the class editor.
- Enter pay ratesSelect Setup → Coach Pay Rates, fill in a default rate for each coach, add class type rates where a coach is paid differently, then select Save Rates.
- Set your pay periodSelect Setup → Pay Period once. The report then opens on your last pay period.
- Review each coachRows are grouped by coach. Expand a coach to see every class behind their total.
- Export the summarySelect Summary, then Export, for one line per person to enter in your payroll provider.
Set pay rates
Select Setup at the top of the report, then Coach Pay Rates. The Coach Pay Rates window lists every coach at your gym, one card each. Every rate, whether a coach's default or a class type rate, has the same three fields.
| Field | What it does |
|---|---|
| Rate Type | Per Class pays the Rate once for every class the coach teaches. Per Hour multiplies the Rate by the length of the class, so a 45 minute class pays three quarters of the hourly Rate. New coaches start on Per Class. |
| Rate ($) | The base amount. The helper text under the field changes to "per class coached" or "per hour coached" to match the Rate Type. |
| Per-Head Bonus ($) | Optional. An extra amount for every person who attended the class. Leave it empty if you do not pay a bonus. |
Assign class types to classes
A class type is set on each class, separately from its track. The quickest way is all at once: select Setup → Class Types on the payroll report, add your class types, and pick one for each class under Your classes.
- The list shows classes running now or in the last year, grouped by name, with the track and when each one runs.
- It opens on No class type so you can work through what’s left. Switch to All to change classes that already have one.
- Expand a class to set its schedules one at a time, for example when the 6:00 AM CrossFit is really a Bootcamp.
- Each pick saves right away.
You can also set it on a single class: open it in the class editor and use the Class Type field in Class Details.
- Start typing to find a class type. If it doesn't exist yet, pick Add "Spin" to create it.
- Recurring classes take the class type from the series editor. Changing it there applies to every date of that series, including past dates on the report.
- One-time classes have the field in the class creator and in the class editor.
- Classes with no class type are paid at each coach's default rate.
- Rename or delete class types in Setup → Class Types too. Deleting one removes it from its classes and deletes coach rates set for it.
Different rates for different class types
The first row on a coach's card is their default rate. It is labeled All class types until you add a class type rate, and All other class types after that.
- Select Add class type rate on the coach's card.
- Pick the Class Type and enter its Rate Type, Rate and Per-Head Bonus.
- Repeat for other class types, then select Save Rates.
Each class is paid at the rate for its own class type. If the coach has no rate for that class type, the default rate is used. If there is no default either, the class shows no pay.
- A coach can have one rate per class type. Each class type can be chosen once per coach.
- Different coaches can have different rates for the same class type, because rates are set on each coach's own card.
- Use the trash can on a class type rate to remove it. That coach then falls back to their default rate for that class type.
- Rates you saved before class types existed became default rates and keep working unchanged.
Saving and removing rates
- One Save Rates saves every coach in the window at once.
- To remove a default rate, clear both the Rate and the Per-Head Bonus (or set them to 0) and save. Without a default or a matching class type rate, a class shows no pay.
- A Per-Head Bonus of 0 is the same as no bonus.
- Rate accepts 0 to 100,000. Per-Head Bonus accepts 0 to 1,000. Negative numbers and non-numbers are rejected with a message and nothing is saved.
- The report refreshes by itself after you save.
Rate changes apply to past classes
Pay is worked out each time you open the report, using the rate saved at that moment. The system keeps one current rate per coach and class type, and no rate history. If a raise starts partway through a period, run and export the earlier period first, then change the rate.
Choose a period
The report opens on your last pay period, the most recent one that has fully ended. Use the Payroll Range menu to pick another, and the report reloads right away. The line above the grid shows the exact dates.
Set your pay period
Select Setup → Pay Period and choose how often you pay staff and which day your weeks start. The window shows the current and last pay period so you can check them before saving.
| Pay frequency | Pay periods |
|---|---|
| Every week | Seven days, starting on the day you choose, for example Monday to Sunday. |
| Every two weeks | Fourteen days. Pick the first day of any one pay period so the app knows which weeks pair up. |
| Twice a month | The 1st to the 15th, and the 16th to the last day of the month. |
| Once a month | The whole calendar month. This is the default. |
The week start also sets the weeks your staff see on MY HOURS. If your gym runs Monday to Sunday, set weeks to start on Monday.
Range options
| Option | Dates covered |
|---|---|
| Last Pay Period | The most recent pay period that has ended. This is the default. |
| Current Pay Period | The pay period you’re in now, for checking hours before it ends. |
| This Week | The current week, starting on your week start day. |
| This Month | The 1st through the last day of the current month. |
| Previous Month | The whole of last month. |
| Last 3, 6 or 12 Months | The previous months plus the current month. |
| Custom Date Range | Any dates you pick in the date picker next to the menu. Picking dates there switches to this option. |
Both the first and last day are included in full. Classes after today are never counted, so when a range hasn’t ended yet the report says so above the grid.
Read the report
The grid has one row for each coach for each class they taught. When two coaches share a class, each gets a row. Rows are grouped by coach, and each coach's line shows totals for the period.
Example only: two coaches, groups expanded. Sam is paid $25 for CrossFit and $20 for Spin. Names and amounts are made up.
| Coach | Date | Class | Class type | Start | Classes | Hours | Attendance | Rate type | Rate | Per head | Pay |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Jordan Reyes | 2 | 1.75 | 17 | $69.50 | |||||||
| Mon Oct 5 | Morning WOD | CrossFit | 6:00AM | 1 | 1.00 | 11 | Per Hour | $30.00 | $1.00 | $41.00 | |
| Mon Oct 5 | Lunch Express | CrossFit | 12:00PM | 1 | 0.75 | 6 | Per Hour | $30.00 | $1.00 | $28.50 | |
| Sam Okafor | 2 | 2.00 | 16 | $77.00 | |||||||
| Mon Oct 5 | Evening WOD | CrossFit | 5:30PM | 1 | 1.00 | 9 | Per Class | $25.00 | $2.00 | $43.00 | |
| Mon Oct 5 | Spin Ride | Spin | 7:00PM | 1 | 1.00 | 7 | Per Class | $20.00 | $2.00 | $34.00 |
Columns
| Column | Meaning |
|---|---|
| Coach | The coach assigned to the class on that date. A class with no coach shows as Unassigned. |
| Class Date, Day | The date the class took place and its weekday. |
| Class Name, Track | The class and the track it belongs to. |
| Class Type | The class type set on the class. It decides which of the coach's rates is used. Blank when the class has none. |
| Start Time | Shown in your gym's 12 hour or 24 hour clock setting. If a single day was changed, the changed time is used. |
| Classes | Always 1 per row. It exists so the coach line can add up the number of classes. |
| Hours | Class length in hours, to two decimals. A changed length for a single day is used when one was set. |
| Checked In | People checked in to the class, not counting no shows. |
| Reserved | People who reserved a spot and are not yet checked in, not counting no shows. |
| No Shows | People marked as a no show. |
| Attendance | Everyone who counts toward the Per-Head Bonus: all attendees except no shows and people on the waitlist. This includes people who reserved but have not checked in. |
| Rate Type, Rate, Per Head | The rate that was used for that class: the coach's rate for its class type, or their default. Blank when the coach has no matching rate. |
| Pay | The amount earned for that class. See the next section. |
Grid toolbar
- Expand all and Collapse all open or close every coach group. Groups start collapsed, so you first see one total line per coach.
- Columns shows or hides columns. The grid remembers your choice next time.
- Filters and the search box narrow the rows, for example to one class or one day.
- Totals are added up for Classes, Hours, Checked In, Reserved, No Shows, Attendance and Pay. Rate and Per Head are not totaled.
How pay is calculated
Each row is calculated on its own, then rows are added up under the coach.
Before the formula runs, the report picks the rate. For each coach and class it looks for the coach's rate for that class's class type first, then the coach's default rate.
If a class is shared by two coaches, each coach is paid the full amount for that class. Split the Rate between them if you only want to pay the class once.
Try it
What gets counted
The report follows your class schedule and then applies payroll rules, so it can differ from the attendance report in a few places.
Included
- Each date a recurring class actually runs, including every-other-week classes.
- One-time classes on their date.
- Today's classes, even if they have not started yet.
- A substitute coach. If you changed the coach for one day, that coach gets the row and the pay.
- A changed start time or length for a single day.
- Every coach listed on a class.
Left out
- Classes cancelled for the whole series.
- A single date that was cancelled. These are unpaid. The attendance report still lists them.
- Dates after today.
- Appointments that came in from GoHighLevel. They are not coached classes.
Coach on time off
Classes are paid to the coach listed on the class for that day. If that coach had approved time off on the staff schedule, the row is marked Coach on time off in the Check column and the report warns you. If someone else coached, change the coach for that day on the class schedule, and the pay moves to them.
Rows with no pay
A row shows no Pay when the coach has neither a rate for that class type nor a default rate, when the class has no coach (Unassigned), or when an older class stores a coach as plain text instead of a member. The class still appears so nothing is hidden. Assign the class to a coach on the class schedule, then run the report again.
Staff work hours
Use work hours for anything that isn't a class: programming, cleaning, front desk, events. Staff log their own hours each week, and an admin reviews them before they're paid.
Set up (admins)
- Add activitiesOn the payroll report, select Setup → Staff & Hourly Rates and add the kinds of work staff log, like Programming or Cleaning.
- Add staff who aren't coachesCoaches and admins can always log hours. Use Add Staff to let anyone else, like a cleaner, log hours too. They see MY HOURS in their menu the next time they sign in or switch gyms.
- Set hourly ratesGive each person a default hourly rate, and add an activity rate where they're paid differently. Select Save Rates.
Log hours (staff)
Wrote next week’s CrossFit and Hyrox tracks
Admin note: That shift was Saturday. Edit and resubmit, or delete it.
- Open MY HOURS in the left menu. It shows one week at a time, starting on your gym’s week start day (Sunday unless your admin changed it).
- Select Log Hours, then pick the date and activity, enter the hours in quarter hours (for example 1.5), and add a note about what you worked on.
- Each entry shows Pending review, Approved or Needs changes. If an admin sends it back, their reason shows under the entry. Edit it to resubmit, or delete it.
- You can edit or delete anything that isn't approved yet. Approved hours are locked; ask an admin to change them.
Review hours (admins)
- When hours are waiting for review, a red count shows on PAYROLL in the left menu and on the Work Hours button, and the report shows a warning. Select Work Hours or Review.
- The Pending tab lists every entry waiting for review, whatever its date. The other tabs use the report's dates.
- Tick the entries and select Approve, or Reject with a reason the staff member will see.
- Use Add Hours to log time for someone, or the edit icon to fix an entry. Hours you add or edit are approved right away.
- Approved hours show on the report as Work rows under the person, with their note, and are added to their total. Hours logged from a scheduled shift show as Shift rows at the shift’s start time.
- Hours logged from a shift show the shift’s time in the Scheduled column. It turns orange when the logged hours differ from the schedule, for example when someone stayed late and edited their hours.
| Staff | Date | Activity | Hours | Note | Status | ||
|---|---|---|---|---|---|---|---|
| Alex Rivera | Fri Oct 16 | Programming | 3.5 | Wrote next week’s tracks | Pending | edit | |
| Dana Lee | Thu Oct 15 | Cleaning | 2 | Deep clean after the event | Pending | edit | |
| Alex Rivera | Tue Oct 13 | Programming | 1 | Hyrox test week plan | Pending | edit |
Approved pay is locked in
When hours are approved, the person's hourly rate at that moment is saved with them. Changing a rate later only affects hours approved after the change. This is different from class pay, which always uses the current rate.
Set a rate before approving
Approval is refused for anyone without an hourly rate for that activity or a default rate. The message names who needs one.
Staff schedule
The staff schedule is one week of who works when. Each coach’s classes come straight from your class schedule, so there’s nothing to enter twice. Add shifts for everything else, like front desk or cleaning, using the same activities your staff log hours against. Staff ask for shifts and time off, you approve them, and once a shift has happened its hours go to payroll in one tap.
Set up (admins)
There’s nothing new to set up. The schedule uses what payroll already has:
- Activities for shifts are the ones in Setup → Staff & Hourly Rates, like Front Desk or Cleaning.
- Staff are your coaches, admins and anyone you added as staff there.
- Weeks start on your pay period’s week start day (Setup → Pay Period).
- Classes and coaches come from your class schedule. To change who coaches a class, change it there.
Plan the week (admins)
- Add shiftsSelect Add shift, or the + in a person’s day. Pick the person, the activity and the times. Shifts you add are on the schedule right away.
- Post open shiftsChoose Open shift instead of a person. Anyone on staff can pick it up, and you confirm who gets it.
- Copy last weekSelect Copy last week to repeat last week’s shifts, including open ones. Shifts already on this week aren’t copied twice.
- Review requestsA red count shows on STAFF SCHEDULE and on Requests. Approve or decline each one, or Approve all.
- Declining a shift or time off request needs a reason, which the staff member sees. Declining a pick-up just puts the shift back up as open.
- A time off request lists the classes that person is down to coach on those days under Needs a sub. Find cover, then change the coach for those days on the class schedule.
- Use Time off to add time off for someone yourself. It’s approved right away.
- Select any shift to change or remove it. Hours already logged from a shift stay in the work log.
For staff
- Open STAFF SCHEDULE in the left menu to see the whole team’s week, with you at the top.
- Request a shift: pick the activity, day and times. It shows as Pending until an admin approves it. You can change or withdraw a request until then.
- Pick up an open shift: select it, then Pick up this shift. An admin confirms it.
- Ask for time off: choose the first and last day. Only admins see your note.
- Log your hours: once a shift has happened, select it and choose Log hours, or use Shifts to log on MY HOURS. The hours go for review like any other entry.
- A scheduled shift or approved time off can only be changed by an admin.
How the schedule feeds payroll
The schedule is the plan; payroll pays what happened. Classes are paid from the class schedule, as always. Shifts are paid once their hours are logged and approved, through the same review as other work hours, so a shift is never paid twice.
Shifts that were worked
- Staff log them in one tap, from the shift or from Shifts to log on MY HOURS.
- You approve them in Work Hours, where the Scheduled column shows the shift’s time and turns orange if the hours were changed.
- If nobody logged them, the report says so. Select Review, tick the shifts that were worked and choose Approve as worked.
- They show on the report as Shift rows at the shift’s start time, paid at the person’s hourly rate when approved.
Things to check
- Shifts on someone’s approved day off start unticked in Shifts not logged, since they probably weren’t worked.
- A class whose coach was on time off is still paid to that coach until you change the coach for that day. The Check column marks it.
- Approving needs an hourly rate for each person, the same as logged hours. The message names who needs one.
- Open shifts nobody picked up aren’t paid or counted.
Export
Select Export in the grid toolbar and choose CSV or Excel. Files are named coach-payroll.
- The export follows what you see: your date range, any filters, and your visible columns.
- To send a coach their own breakdown, filter or search for their name first, then export.
- Keep your exports. Because rates have no history, an export is your record of what was calculated at the time.
Taxes & paying staff
Chalk It Pro works out what each person earned. It doesn't pay anyone, withhold taxes, or file payroll taxes. Every amount on the report is gross pay, before any taxes or deductions. Run the actual payroll in your payroll provider, such as QuickBooks Payroll, Gusto or ADP, or hand the numbers to your accountant.
Each pay period
- Approve all hoursClear the Work Hours queue so nothing is still pending. Pending hours aren’t paid.
- Run the report for the pay periodSet the Payroll Range to the exact dates of the pay period, and check each person’s total.
- Clear shifts not loggedIf the report says scheduled shifts were never logged, select Review and approve the ones that were worked.
- Check classes on a day offIf the report flags a coach on time off, change the coach for that day on the class schedule so the person who taught is paid.
- Open the summarySelect Summary. It shows one line per person: classes, class hours and pay, work hours and pay, total hours and gross pay, with their email for matching. It warns you about anyone with classes that have no pay.
- ExportIn the summary, use Export → Excel or CSV. The file is named for the period. Keep it as your record.
- Enter pay in your payroll providerFor each person, enter their total gross pay, plus hours if your provider asks for them. Your provider calculates withholding and taxes, makes the payments and files the tax forms.
About importing into QuickBooks and other providers
- The summary export is a standard spreadsheet with one row per person. It isn’t built for a particular payroll system, so check your provider’s import format before uploading it. Most people type the totals in, or copy them across.
- Most payroll imports are based on hours. Pay per class and per-head bonuses aren’t hours, so enter those as a pay amount, for example as a commission or other earning, rather than as hours.
- If your provider supports importing a spreadsheet, names must match the employee names in that system exactly.
- The report’s own Export keeps one row per class or logged entry, which is useful as a detailed record.
Employees and contractors
Whether a coach or staff member is an employee or an independent contractor changes how they’re paid and taxed. Your payroll provider or accountant sets that up. Chalk It Pro doesn’t track it.
Troubleshooting
How do I pay one coach differently for CrossFit and Spin?
Open Setup → Coach Pay Rates, select Add class type rate on that coach's card, pick the class type and enter the rate. Repeat for each class type. Classes of any other type use the coach's default rate.
A class type is missing from the list.
Class types are created in the class editor or with Setup → Class Types on the payroll report. Create it there, set it on the class, then reopen Coach Pay Rates.
A coach shows no Pay.
Open Setup → Coach Pay Rates and check the coach has a default rate, or a rate for that class's class type. A coach with both blank has no rate. If the row says Unassigned, the class has no coach on the schedule.
A coach is missing from the Pay Rates window.
The window lists the coaches of the gym you have selected. Check that the person is marked as a coach at this gym and that the right gym is active.
A class I expected is not on the report.
Check whether it was cancelled for that date, falls after today, or runs on an every-other-week schedule that skips that week. Also check that the date range includes the day.
Pay changed on a period I already paid.
Rates are applied when the report runs, so changing a rate changes every period. Export each period before you change a rate.
Attendance is higher than the number checked in.
Attendance includes people who reserved but were not checked in. If you only want to bonus people who showed up, mark absent people as no shows before running payroll.
I see an error when saving rates.
A message names the problem. Rates must be numbers, cannot be negative, and stay within the limits of 100,000 for Rate and 1,000 for Per-Head Bonus. Only gym admins can save rates.
A coach’s classes aren’t on the staff schedule.
The schedule shows the coach set on each class in the class schedule, including a substitute for one day. A class with no coach shows in the Open row as No coach, and so does a class whose coach is stored as typed text instead of a member. Set the coach on the class.
I approved time off. Why does the coach still get paid for a class that day?
Time off doesn’t change who is on a class, because only you know who covered it. The report marks those classes Coach on time off. Change the coach for that day on the class schedule and the pay moves to the person who taught.
A shift was worked but isn’t on the report.
Shifts are paid once their hours are logged and approved. Check the Work Hours queue for pending hours, and the never logged warning on the report, where you can approve the shift as worked.
Staff can’t pick an activity for a shift.
Shifts use the activities in Setup → Staff & Hourly Rates on the payroll report. Add one there, like Front Desk. An activity that has shifts or logged hours can’t be deleted; rename it instead.
Quick reference
| Who has access | Gym admins |
| Where | Left menu, PAYROLL |
| Default period | Last pay period (set in Setup → Pay Period) |
| Week start | Sunday by default; change it in Setup → Pay Period |
| Rate types | Per Class, Per Hour |
| Where class types are set | On each class, in the class editor |
| Rates per coach | One default rate, plus one rate per class type |
| Which rate applies | The class type rate, otherwise the default |
| Rate limit | $0 to $100,000 |
| Per-Head Bonus limit | $0 to $1,000 |
| Remove a rate | Clear both fields (or enter 0) and save, or use the trash can on a class type rate |
| Rate history | None. Only the current rates are kept. |
| Who can log work hours | Coaches, admins, and members added as staff |
| Work hours | Quarter hours, 0.25 to 24 per entry, no future dates |
| Work hours pay | Hourly rate at approval × hours |
| Staff schedule | Left menu, STAFF SCHEDULE: coaches, admins and members added as staff |
| Shifts | Quarter hours within one day, on your work log activities |
| Who approves | Admins: shift requests, pick-ups and time off |
| Time off | Whole days, up to 60 days per request |
| Shift pay | Paid once logged and approved, as work hours |
| Amounts on the report | Gross pay, before taxes and deductions |
| Taxes and payments | Handled in your payroll provider, not Chalk It Pro |
| Export formats | CSV, Excel: detailed (report) or one line per person (Summary) |