Money
Timesheets & payroll
Hours to paid: rates, review, payroll runs, contractor statements, and the CSV warning.
Time becomes money in three steps: hours happen (cleaners clock in and out), Timesheets checks them, and a run pays them. When a number looks wrong, find which step it's stuck in.
Where rates live
On Employees, each person has an engagement (employee or subcontractor — which pay system they're in) and their hourly rate. Everyone is paid by the hour; there is no flat or percentage pay. The rate is stamped onto every entry at clock-in, so a raise never re-prices last month's hours.
Giving a raise. Change the person's rate on the day the raise starts — not before. Shifts clocked in from then on are paid at the new rate; every shift before keeps the rate it was clocked at, even in a pay period you haven't run yet. If you can't be at a desk that day, set yourself a task with a due date as a reminder. Two things do read the rate on the day you create the run, not the day of the work: paid time off, and any shift clocked by someone who had no rate set at the time (Timesheets flags those). Run the period first, then change the rate, if either applies.
Where hours come from
Cleaners clock in and out on their job in the field app. I'm here only appears on a job within four hours of its start; a card further out shows its date instead ("This job is on Sep 26") so a cleaner with two visits for the same client can't start the wrong one — the one for today is the card dated today in My jobs. A shift still waiting to be accepted shows Accept in place of I'm here until the lead clocks in, after which anyone on the crew can start. Every card leads with the day — Today, Tomorrow, or Sat Sep 26 — and the confirm pill and the Accept button repeat it ("Yes, I'll be there Sat Sep 26 at 3:00 PM"), so nobody confirms a date they didn't read. Unconfirmed shifts are chased automatically when the Shift still unconfirmed automation is on: the cleaner is asked the day before and again two hours out, and at that point the office is told who hasn't answered. A forgotten clock-out gets closed automatically past the job's expected end and flagged needs review — those hours wait for a human to confirm the real time before they count as pay. On the job, a cleaner can clock in and out as often as the day needs. I'm here starts her clock. Stop my clock stops it for a break or a supply run, and the job stays open. I'm back starts it again. I'm done (two taps) says her part is finished. A job left on a break closes itself when its scheduled time is up. Clocking back in stays possible all day on the job's date, even after the job was closed; a job the office closed stays closed, but her time still counts. Off the clock after a break and not coming back, Not coming back? I'm done here finishes her part without clocking in again. Job cards on Today and on the Clock tab open the job rather than clocking in, so a tap meant for the job can't start a shift by accident. Time that isn't a job — a team meeting, training, a supply run — is clocked from the field app's Clock tab without picking a job: choose Manager / admin, Training, Travel, Supplies / errand or Other, then clock out when done. It lands on Timesheets and in payroll like any shift, so there's no need to book a fake cleaning to pay someone for a meeting. The office can also add manual entries on Timesheets and attach them to bookings — the booking picker is searchable (client, service, or date), and picking a booking fills the scheduled times in automatically; a Use booking hours button re-applies them after edits.
Timesheets, day to day
Someone still clocked in shows in a calm On the clock right now card — status, not a problem. It only becomes a forgotten clock-out alarm once the shift runs well past its expected end.
Opens on the current pay period — the same calendar your pay schedule defines, with ‹ › arrows to step between periods; date filters still reach anywhere. Flagged rows are unmissable: amber-highlighted with a colored edge (capped shifts) or a lighter orange (ran past the allotted time), and the banner's Show only these button filters the table to just them. Any flagged row whose hours are simply right gets a one-tap Looks good button — no editor needed; it clears both kinds of flag, and saving an edit counts as review too. Each person shows hours and Earned (their rate × their minutes, computed live). Edit an entry to fix a time — edits are minute-exact, so a one-minute correction moves the total by exactly one minute. PTO lives here too: employee PTO carries paid hours; subcontractor time off blocks the schedule but is unpaid by design.
Paying employees: Payroll runs
The Payroll page leads with one next step: an Up next card suggesting the next period, with the unpaid hours and estimated wages waiting in it — or, if a run is already in flight, a Finish what's started card pointing at it. Flagged shifts show as a warning there and are left out of the totals until confirmed.
Set a pay schedule (Settings → Payroll & timesheets) and periods follow your calendar — semi-monthly (1st–15th & 16th–end), every 2 weeks, weekly, or monthly. Setting a schedule also turns on the automation: the morning after a period ends, Sollos prepares it and notifies you it's ready for review. Nothing is ever paid automatically.
Preparing a period covers everyone at once: the employee run, the contractor statement, and the on-call bench's flat-pay jobs for the same window, shown together on the period's page with the combined total. A period contains only its own dates — older unpaid hours are settled by going back: the Payroll page lists previous periods still owing with a one-click Prepare on each. The Pay periods table at the bottom lists every period with employees and contractors side by side.
- Start this run (dates are pre-filled; "Different dates?" if you need a custom window) — it starts as a draft.
- Review each line (hours + bonuses). Fix entries on Timesheets, or delete the draft freely and start over.
- Finalize — amounts lock and every hour in the run is frozen.
- Mark as paid when the money has actually gone out. Sollos records; it doesn't move money.
An entry that refuses to be edited is frozen inside a run — that's the paid record protecting itself. The only unlock is deleting the run, which releases all its entries; fix and re-run.
Paying contractors: statements
Payroll → Contractor pay covers two deals: roster subcontractors earn their rate × their clocked hours; on-call cleaners claimed from the bench earn the flat amount on the offer once the job completes. Statements total, stamp, and freeze exactly like runs. Flagged needs-review shifts are excluded from Earned until confirmed — the amber count links you to them.
Tips to pass on
A tip a client adds at checkout (or that arrives by e-transfer or cash into the business) lands in the business's account, so Payroll keeps a ledger of what's still owed to each cleaner: the Tips to pass on card. Tips split across a crew by their minutes on the invoice's jobs. Two ways off the ledger:
- Mark paid — the money reached the person (through a run, in cash, however you actually pay). Records the handover; doesn't move money.
- Keep in business — the override. The tip was really meant for the business or the owner, nobody could be attributed, or it's a correction. It settles the tip without paying it out, asks you to confirm first, and shows on the invoice as kept by the business — distinct from paid out, so history stays honest. Owner/admin only. The same button on an invoice's tip box keeps everything unsettled on just that invoice. A kept tip is the business's income, and the books say so: Reports shows a Tips kept figure beside paid revenue and a + tips note on each month it happened, and the monthly ops digest carries the same line. Revenue itself stays net of tips, so service numbers stay comparable month to month.
A tip handed directly to the cleaner in cash never touches this ledger — record it as a direct tip and it appears in history already settled. With Sage Accounting connected, every tip the business holds is posted the moment it arrives — bank in, Tips owed liability up — and posted again when it leaves: Mark paid clears the liability against the bank, Keep in business turns it into Tips kept income. Both accounts are on the Sage card under Settings → Integrations. Direct tips post nothing; the money was never the business's.
Payroll in the books
With Sage Accounting connected (Settings → Integrations), every payroll run you mark as paid is posted to Sage as a journal: one line per employee for their gross pay against your wages account, and one credit for the total to a wages-payable or accruals account. Contractors are different, and Sage shows them properly: each subcontractor becomes a supplier in Sage, every finalized statement posts a bill against them (one per person, hours in the description), and marking the statement paid records the supplier payment from your bank account. Open the supplier in Sage and you see exactly who you're paying, what, and what's still owed. The accounts all of this posts to are listed on the Sage card under Settings → Integrations, picked by name from your chart the first time and changeable there. It is deliberately gross, not net: Sollos doesn't know deductions or what actually left the bank — your payroll product does — so the bookkeeper clears that liability against the bank feed and the remittances. A run that didn't post is retried every few hours, and the reason (usually a missing account in Sage's chart) shows on the Integrations card in Sage's words.
Cleaners see their own pay
The field app has My pay (Profile → My pay, or from My hours): the current period's earnings as a running estimate from their closed shifts, and below it every finalized or paid statement — the same frozen numbers your runs produced, marked Paid or Finalized — payment on the way. The estimate is labeled as one: bonuses, PTO, and corrections land when you actually run the period, and shifts awaiting review say so. Draft runs you're still checking are never shown.

