Time Tracking

Tracking time is really three jobs: recording the hours, charging clients for them, and paying the people who worked them. Sodium does all three from the same entries.

Log it

Every hour has to get recorded somehow, and the practices that track time well are the ones where recording it costs almost nothing. Sodium gives you multiple ways to track time — from highly automated to totally manual. And the tools to easily spot gaps.

Seven Ways to Log Time

Time entry dialog with work blocks, client, task, and workflow step links

Time gets into Sodium whichever way suits the person recording it:

  • Type it in. A start and an end time, or just the duration — "1h 30m".
  • Run a timer. Start it from a task, a client, or the focus panel, and pause it when you're interrupted.
  • Let a timer run itself. Starting a workflow step starts a timer; completing the step logs it.
  • Draw it on the calendar. Click or drag an empty slot and an entry opens with those times already filled in.
  • Log it from a meeting. Click a meeting on the task calendar and choose Log time; the date, times and description come from the meeting.
  • Repeat an entry. Continue yesterday's work as a new timer, or duplicate the entry for today.
  • Import a CSV. Bring across time already recorded in another tracker or a spreadsheet.

All seven produce the same kind of entry, edited the same way.

Link an entry to a client, a task, or even a specific workflow step — so you know the 45 minutes went on "Reconcile bank transactions", not just "VAT Return". If you don't work task-first, time can attach straight to one of the client's services instead — an hour on "Bookkeeping" with no task in sight. It's a task or a service, never both. Linking is optional by default, or flip a setting to require a client or task on every entry.

Bring In the Time You Already Track

Moving from another time tracker doesn't mean leaving this year's hours behind. Export a CSV from wherever your time lives now and import it: tell Sodium which column is the date, the duration, the person and the note, and it matches each row to the right team member and client.

Review what it found before anything is created — rows it couldn't match, and rows that look like duplicates of time already in Sodium, are flagged so you can fix or skip them. What comes in are ordinary time entries: billable, reportable, and editable like any other.

A Timer That Follows Your Work

The timer menu in the top bar: a Logged today bar showing 1h 45m of a 7h 30m day, and recent work grouped by day, each with the client's logo and a play button to resume it

A timer started from a client, a task, or the focus panel arrives already linked to whatever you started it from, right down to the workflow step you had open. A pulsing indicator in the top bar shows it ticking wherever you are in the app.

Pause for lunch and resume after: the timer records each stretch of work as its own block, so interruptions never inflate your hours. Stop & Log then opens an entry with the elapsed time, links and blocks already in place. Close it without saving and the timer stays paused — nothing is lost.

Picking up where you left off takes one click. The timer menu lists your recent work by day, with the client, task and step it was for, and a play button that starts it again with the same links. Resume something from today and the new time is added to that entry rather than logged as another one. A Logged today bar at the top shows how much of your working day you have recorded so far.

Timers That Run Themselves

Switch on automatic timers and nobody has to press anything. Starting a workflow step starts a timer linked to it; completing the step logs the time and starts the next. Tasks without a workflow behave the same way — start the task, the timer starts; complete it, the time is logged.

No forgotten timers, and no writing up hours at five o'clock from memory. Every auto-logged entry is a normal time entry, editable like any other.

Every task belongs to one of that client's services, so the hours roll up per service without anyone tagging anything. That powers the Service Time report: estimated against actual hours per service, with a drill-down to client, task and workflow step, so the £40-a-month client that's actually taking six hours shows up with recorded time behind it. You can also link a block of time straight to a service rather than through a task.

Admins see every running timer across the practice too. A Timers button at the top of the Time page shows who's timing what, for how long, and whether it's paused — no trip into settings to find out. Spot the timer someone left running overnight and pause it for them, preserving the real time worked.

All Your Time, In One Place

The Time page shows every entry across your practice — who logged it, for which client, on which task, and whether it's non-billable, billable, or already billed. Filter by team member or billing state, and search to find exactly what you need.

Step through your week a day, a week or a month at a time.

As with many other pages, the columns are yours: choose which you want, rename them, reorder them, or go full width. Your layout is remembered, and nobody else's view changes.

Each individual client page has the same view, listing just the time relevant to them.

Time page listing time entries grouped by day with daily totals, filters and billing state badges

See Your Week as a Calendar

View time as a calendar and the empty hour on Tuesday afternoon is suddenly obvious.

Your working pattern is drawn in too, so each day's header shows hours logged against hours expected and days someone doesn't work are shaded out.

It isn't just for looking. Drag time to move or extend it, click in an empty space to create an entry.

The task calendar goes both ways: connect Google, Outlook or Apple and your other commitments sit alongside your tasks, so you can plan around them — or subscribe to Sodium's feed and your tasks appear in those calendars instead.

The Time page calendar view: a week of time entries drawn to scale on a time grid, with daily logged-versus-expected totals in the day headers, an amber banner for entries with no start time, and weekend columns shaded out

Those expected hours come from working patterns — the hours you expect someone to log on each day of the week, saved under a name like Full time or Part time (Mon/Wed/Fri). One is your practice default, so most of the team needs nothing set at all. Because a pattern holds hours per day, a part-timer is measured against the days they actually work, and bank holidays and your own closure days come out automatically. The Team Time report reads the same patterns.

Bill it

Set a default charge rate and override it per person. Bill your whole unbilled position from one screen — one client or a dozen at a time — straight into your invoices, by the hour or as a fixed fee. Write off what you can't recover with a reason attached, and see whether what you charge for a service matches what it actually takes.

Set Rates Per Person and Per Type of Work

For each team member you can set:

  • A charge rate — the amount you bill a client for their time.
  • A cost rate — what their time costs you per hour.
  • Whether to pay them by the hour — turn it on and approving and paying their time becomes a two-click job.

Tracked time automatically picks up that person's rates. Set a practice default for each and most of your team needs nothing of their own.

Rates carry the date they take effect from, so April's rise can go in now and start applying on the first. The old rate stays on the record rather than being overwritten, and every entry is valued at the rate that applied on the day it was worked — so last quarter's figures don't move when this quarter's rates do. A rate history on each person shows what they were on, and when.

Work that is charged or paid differently gets its own rate. Give a task category or a service a charge-out or cost rate, for the whole practice or for one person, and time logged against it picks that rate up automatically. Payroll can be paid at its own rate and FD support charged at a premium, without anyone choosing a rate when they log their time.

When a rate changes, you see exactly which unpaid time would change with it, old rate against new, and choose whether to bring it up to date.

From Hours to Invoices

Billing your clients is made easy. Pick a time period, view the unbilled time, and in a couple of clicks it becomes invoices for your clients, pushed straight to your accounting software.

Unbilled Time page listing every client with unbilled time and value, with one client's entries and a preview of the billing lines

Bill the Hours, or Bill the Fee

Hours times rate is the default, but most practice work is quoted. Type the fee you agreed instead and Sodium works out the difference on the spot: write off the shortfall with a reason, or leave it in WIP to bill later. A fee above the time behind it is recorded as a write-on. Either way, every entry knows exactly what it was settled for.

Billing a client for a fixed fee below the time logged, with the choice to write off the remainder with a reason or leave it in WIP

Time you will never charge for can be written off straight from the entry — a reason and a note, no bill raised. A starter set of reasons comes with the system, from Quoted fixed fee to Training / junior time.

The list is yours to run. Add reasons that match how your practice actually loses time, rename the ones that don't fit, put them in the order your team will read them, and switch off any you have stopped using — a retired reason disappears from the write-off screen without touching the history that already cites it.

The reasons are what make the numbers useful. The Write-off Analysis report shows what you gave away and why, by reason, team member or client, and the WIP Value report shows what is still sitting unbilled, how old it is, and each client's recovery to date — so an under-priced fee shows up before it becomes a write-off.

Pay for it

Restricting someone to only the clients they work on pairs well with employing contractors. The time they log is what makes paying them easy.

Paying Your Team for the Time They Log

The Unpaid Time page mirrors Unbilled Time: what you owe each person, on one easy-to-read screen.

Pick a team member and their entries open beside the list, ready to review. Edit entries if you need to. Approve for payment, then record the fact you have paid them.

The guide to paying your team walks through it step by step.

What It Cost, and What It Was Worth

The Cost & Profit report values every hour logged at what it cost, against what the billable part of it is worth, and shows the difference as profit.

Group by client to find the ones you are losing money on — the fixed fee whose workload has crept up for two years shows here long before it shows in the bank. Group by team member for your true cost of delivery.

The Permissions You'd Expect

Switch a team member to own time only and their Time page narrows to their own entries: no logging time for anyone else, no billing or paying, and no practice-wide time reports.

Separately, the cost rates permission gates the whole cost side — rates, Unpaid Time and Cost & Profit. Admin-only out of the box, with viewing and editing separate, so a manager can read what delivery costs without being able to change anyone's rate.

Off Until You Want It

Time tracking is a single switch in settings, off by default. Leave it off and there is no mention of it anywhere in the app — no timers, no Time page, no Time tabs, no rate fields.

Each part is opt-in on its own terms, too: leave cost rates blank and nobody flagged as paid by the hour, and the whole third part of this page simply isn't there.