Staff Roster and Timesheets

Audience: Riding school owners, club managers and organisation admins


Overview

The Staff Roster is where you plan who is working, record the hours they actually worked, approve those hours, and export the pay period as a file your payroll system imports.

Horsify deliberately stops at hours × base rate. Award interpretation, penalty rates, superannuation, tax and payslips stay in Xero, MYOB, KeyPay or whichever payroll system you already use — Horsify's job is to get accurate, approved hours to it without anyone retyping a paper timesheet.

Go to: Organiser → People → Staff Roster. On your own club site, where the Organiser menu is one flat list, the item sits in that list. The Organiser Dashboard also has a Staff Roster quick-access tile.

Requires: a Riding School or Club Site plan, and organisation admin access.

Rostering is not riding-school specific. A club with no riding school still employs a groundskeeper and an office administrator, which is why the link sits under People alongside Member Management and Committee rather than inside the Riding School menu. The solo Instructor plan does not include it — a sole trader working alone has nobody to roster.


The five tabs

Tab What it's for
Roster The week grid. Plan who works when.
Pay period Hours, cost and approvals for a whole pay run, plus the payroll export.
Staff Who can be rostered, their rate and payroll ID.
Templates Recurring weekly patterns you can pour into any week.
Settings Pay period length, its start date, default break, staff self-service.

Start on Staff. Until at least one person is on the list, the Roster tab shows a prompt to add them and nothing else works.


Step 1 — Add your staff

Two ways in:

Import instructors — one button on the Staff tab creates a staff record for every active instructor you already have, so teaching and non-teaching staff share one roster. It is safe to press repeatedly: instructors already on the list are skipped, and it tells you how many it added.

Add staff member — for everyone else: stable hands, office admin, groundskeepers.

A staff record that came from an instructor stays joined to that instructor, and the staff editor says so when you open it. Name and contact details are kept in sync from the roster, but lesson rates and teaching availability live on the Instructors page — the base hourly rate here is what the roster pays them for rostered hours, not what they charge per lesson.

Field Notes
First / last name At least one is required.
Main role Instructor, Stable hand, Admin, Groundskeeper or Other. Groups the roster and fills the export's Role column, which is what payroll maps to a pay item. It does not affect pay rates.
Also does Tick every other role this person covers — a stable hand who also does the books and takes lessons gets all three. They still sit under their main role on the roster, but all their roles show beside their name, and each one becomes a one-tap option when you set a shift's role/task.
Employment Casual, Part-time, Full-time or Contractor. Exported alongside the hours so payroll can apply the right award rules.
Email Use the same address as their Horsify login. This is what connects the roster to the person — see Letting staff see their own shifts below.
Phone Optional.
Base hourly rate Optional. Leave it blank if you keep rates only in payroll; you can still roster and export hours.
Payroll employee ID Optional but recommended — their employee reference in Xero / MYOB / KeyPay. It goes into the export so the import matches on ID rather than on name spelling.
Active Untick when someone leaves.

When someone leaves

Untick Active rather than looking for a delete button — there isn't one, on purpose. Deleting a person would take their approved timesheets with them, and you still have to be able to prove what you paid.

An inactive staff member disappears from the roster grid and the staff list (tick Show inactive to see them again), and cannot be given new shifts or a new template. Their existing shifts stay fully editable and payable, so the fortnight they left in still runs normally.


Step 2 — Roster the week

The Roster tab is a grid: one row per staff member, one column per day, Monday to Sunday.

  • Add a shift — click the + in any cell, or Add shift for the toolbar version. Horsify pre-fills the times from that person's last shift this week, so a repeat is two clicks.
  • Add another shift to the same day — once a cell has a shift, the button reads + Add another. There is no limit: someone doing AM Stables then AM Admin then an afternoon lesson is three shifts on one day. The new shift is pre-filled to start when the previous one finished, and its role/task is left blank for you to set to the new job.
  • Edit a shift — click the shift itself.
  • Move between weeks — the arrows, or This week.

A shift carries a date, a start, a finish, an unpaid break in minutes, an optional role or task ("AM Stables", "AM Admin", "Coaching") and optional notes for staff.

The role or task is shown on the roster directly under the shift's time, so a day with two people covering different jobs reads at a glance. It is free text, and under the box you get one-tap buttons for that person's own roles plus any label already used on this roster — so "AM Stables" is typed once, not every week.

Planned paid hours are worked out for you: finish minus start, less the break. A finish time earlier than the start is read as a shift running past midnight, so a 10:00 PM – 2:00 AM night check is four hours, not a negative number.

Horsify refuses a shift that cannot be real: identical start and finish times, or a break longer than the shift itself.

Colours

Colour Meaning
Grey Planned. Nobody has recorded what actually happened yet.
Blue Actual times entered — by the staff member or by you.
Green Approved and locked.

Double-booking

If you roster someone into two shifts that overlap, Horsify saves it and tells you:

Sam Stable is already rostered 06:00–12:00 on the same day. Both shifts will count towards their hours.

It is a warning rather than a refusal because split shifts, handovers and one person covering two roles at once are all normal. What is not normal is finding out in the pay run, so the clash is always named — including the case where a night shift runs into the next morning's.


Step 3 — Record the hours actually worked

Planned hours are what you intended. Actual hours are what you pay.

Staff record their own at My Shifts — see Letting staff see their own shifts below, and send them the My Shifts guide.

You can record anyone's: open the shift and expand Actual times worked, then enter started, finished and break. This works whether or not staff self-service is switched on, so you are never locked out of your own payroll.

A timesheet that adds up to nothing — identical start and finish, or a break longer than the hours — is refused. Left accepted it would record someone as having worked and paid them nothing, while quietly clearing them from your missing times count.

A shift with no actual times is not a problem. It approves at its planned hours, which is the right answer for salaried and part-time staff who work exactly what was rostered.


Step 4 — Approve

Approval is the moment hours become pay. It does three things:

  1. Locks the shift. An approved shift cannot be edited, deleted, or given new times. Press Withdraw approval first if you need to change something.
  2. Captures the pay rate. The rate on file at that moment is stored on the shift. Give someone a raise next month and last fortnight is still costed at what you signed off — a rate change never rewrites a closed period.
  3. Puts it in the export.

Three ways to approve: Approve inside a single shift, Approve week on the Roster tab, or Approve all on the Pay period tab.

Shifts in the future are skipped, not approved. If nothing has happened yet there is nothing to sign off, and Horsify tells you how many it skipped rather than silently approving next week's roster. A future shift someone has already reported times for approves normally.


Step 5 — Check the pay period

The Pay period tab is the fortnight (or week, or four weeks) as payroll will see it. Four tiles across the top — approved hours, estimated gross cost, how many shifts are awaiting approval, and how many staff are rostered — then a row per person:

Column What it tells you
Shifts How many shifts they have in this period.
Planned Hours as rostered.
Actual Hours from shifts where times were recorded.
Approved Hours you have signed off. This is what gets paid.
Rate / Est. cost Their current rate, and the cost of the approved shifts at the rate each was approved at.
Missing times Past shifts with neither actual times nor approval. This is your chase list.

Underneath, Shifts awaiting approval lists every past shift not yet signed off, each with Enter times and Approve beside it — so a pay run is a single pass down one list.

Move between periods with the arrows, or Current.


Step 6 — Export for payroll

Export CSV for payroll downloads the period as a spreadsheet file. Approved only is ticked by default; untick it to include everything, in which case unapproved rows are marked No in the Approved column so nobody pays them by accident.

The file has one row per shift:

Employee ID, Employee name, Role, Employment type, Date, Start, End, Break (min), Hours, Rate, Amount, Approved, Pay period start, Pay period end, Notes, Shift role/task

followed by a TOTALS block with one row per employee. Where actual times were recorded, the Start, End and Break columns carry the actual ones — the file always reflects what you are paying, not what you planned.

Role is the person's main role, which is what payroll maps to a pay item. Shift role/task is the label on that individual shift, so a split day shows as two lines — AM Stables and AM Admin — rather than two identical ones.

The Notes column carries the staff member's note about their hours if they left one when they submitted their times, and otherwise your note for staff on the shift — so an explanation for an unusual number of hours reaches whoever checks the pay run.

Column names deliberately match what Xero, MYOB and KeyPay timesheet imports expect. Save your import mapping once and every future period drops straight in. New columns are only ever added on the end, so an existing mapping keeps working.


Letting staff see their own shifts

Staff read their roster and record their hours at My Shifts — their own page, showing their own shifts and nobody else's. Send them the My Shifts guide once and they will not need to ask again.

How the connection is made

Add the staff member with the same email address as their Horsify login. Nothing is sent and there is nothing for them to accept — Horsify links the staff record to the account by itself the next time that person loads a Horsify page.

The Staff tab shows Linked or Not linked in the Login column, so you can see at a glance who can and cannot see their roster. Instructors added with Import instructors usually arrive already linked, because their instructor profile already carries the account.

If they have no Horsify account yet, ask them to sign up with that address — free, and they only need the account itself.

Being on your staff list does not make someone a club member, and it does not need to. Staff are your employees, not your members — they will not appear in Member Management, membership renewals or member email campaigns, and they do not need a membership to see their shifts. If someone has a Horsify account with a matching email, that is the whole requirement.

What a linked staff member sees

Where they find it: their name in the top right → My Shifts. On a phone, the same item is in the menu. It only appears for someone who is actually on a staff roster, so a person who cannot find the item is almost always not linked yet — check the Login column first. Allow up to five minutes after you add them, because that menu check is cached; going straight to /my-shifts works immediately.

What is on the page — one card per shift for the week, showing the day and date, start and finish, the hours that comes to, the shift's role or task, and any notes for staff you attached to it. Today's shift is highlighted, and arrows and This week move between weeks. Someone who works for more than one club on Horsify gets a club picker at the top; each club shows only its own shifts.

Each card carries a status that lines up with the colours you see on the roster grid:

They see You see Meaning
Upcoming Grey The day has not arrived. Nothing for them to do.
Enter times Grey The shift has happened and no hours are recorded. It is on their to-do list — and in your Missing times count.
n h entered Blue They have recorded their times and are waiting on your approval.
Approved Green Signed off and in the pay run. Locked at both ends.

What they can do: enter started, finished and break on a shift whose day has passed — with paid hours updating live as they type — add a note to you about those hours ("stayed back, farrier ran late"), and correct their times as often as they like right up until you approve.

What they cannot do: enter times for a shift that has not happened yet, save times that add up to nothing, or change a shift once it is approved. They also cannot add, move, swap or decline a shift, and they never see another person's roster, rate or cost — the roster stays yours to author, and pay questions still come to you.

Switching self-service off

Settings → untick Let staff enter their own times. Staff can still see their roster; only the time-entry form disappears, replaced by "Your manager records hours for this organisation." You keep recording times from the shift editor exactly as before.


Settings

Setting Notes
Pay period length Weekly (7 days), fortnightly (14) or four-weekly (28).
A pay period starts on Pick the first day of any real pay period — the Monday your current fortnight actually started. Every other period is counted forwards and backwards from there, so this one date makes every period boundary in Horsify line up with your pay run.
Default unpaid break Pre-filled on new shifts and templates. 0–240 minutes.
Let staff enter their own times See above.

Templates — for the parts of the week that never change

A template is a recurring weekly shift: Sam, Tuesday, 6:00 AM – 10:00 AM, morning feed. Templates never appear on a roster by themselves; they are a mould you pour into a week.

  1. Templates → Add template — choose the person, the day, the times and the break.
  2. Roster → Fill from templates — choose a date range and press Fill roster.

Every active template creates a shift on each matching weekday in that range. Then adjust whatever is unusual about that particular week.

Four things worth knowing:

  • One template per job, not per person per day. If Sam does stables at 6:00 AM and admin at 10:00 AM every Monday, that is two Monday templates — both apply, and each carries its own role/task.
  • Filling the same fortnight twice is safe. A template is skipped for a day where that person already has a shift starting at that time, and you are told how many it left alone. You will not end up with a doubled roster.
  • Pause instead of deleting. Untick Active on a template and it stops being used without losing the pattern — useful for a winter-only shift.
  • Deleting a template keeps the shifts it already created. Rosters you have already published to staff do not evaporate.

Templates skip anyone marked inactive, so a staff member who leaves stops appearing in next month's fill automatically.

You can fill up to 8 weeks in one go.


Limits

Limit Value
Roster and export date range 93 days
Fill from templates in one go 56 days (8 weeks)
Break on a shift 0–720 minutes
Default break 0–240 minutes
Pay period length 7, 14 or 28 days

What Horsify does not do

Deliberately out of scope, because your payroll system already does them properly:

  • Award interpretation, penalty rates, overtime loading, allowances
  • Superannuation, tax, Single Touch Payroll, payslips
  • Leave balances and leave requests
  • Paying anybody — the export is the handover point

Also not yet available: staff notifications when a roster is published, clock-in from a phone, and a direct Xero/MYOB API connection. The CSV is shaped for their timesheet imports in the meantime.


Troubleshooting

Problem Cause and fix
A staff member says they can't see their shifts Check the Login column on the Staff tab. Not linked means the email on their staff record does not match their Horsify login. Correct the email, then ask them to open My Shifts again.
A staff member says there is no My Shifts in their menu That item only appears once someone is on a roster. If the Login column says Linked, the menu check is simply cached — it appears within about five minutes, and horsify.com.au/my-shifts works straight away. If it says Not linked, fix the email first.
"Approved shifts can't be edited" Working as designed — the pay run has already consumed it. Open the shift and press Withdraw approval, make the change, then approve again.
Approve week says some shifts were skipped They are dated in the future and have no actual times, so there is nothing to approve yet. They will approve once the day has passed.
The estimated cost is blank Nobody in the period has a base hourly rate. Add rates on the Staff tab, or ignore the column and let payroll cost the hours.
A shift I approved is costed at the wrong rate It is costed at the rate captured when you approved it, which is intentional. Withdraw approval and re-approve to pick up the new rate.
"is marked as no longer working here" You are rostering someone set to inactive. Set them active on the Staff tab, or roster somebody else.
Missing times keeps counting a shift I've dealt with Missing times counts past shifts with neither actual times nor approval. Either enter the times or approve it at planned hours.
Fill from templates created nothing Either there are no active templates, the range contains no matching weekdays, or every slot already had a shift. The confirmation message distinguishes these — it reports both created and skipped.

Related articles