Tracking and Billing Time

This guide walks you through time tracking in Sodium — switching it on, setting hourly rates for your team, logging time against clients and tasks, letting timers run themselves from task progress, and turning unbilled hours into billing line items.

Before you start

Time tracking is switched off by default, and until you turn it on there is no time tracking UI anywhere in the app. Enabling it is one toggle, but it's worth deciding two things with your team first:

  • Is time billable by default? If most of the time you record ends up on an invoice, have new entries start as billable. If you mainly track time to understand where the hours go, leave it off and mark billable time by hand.
  • Must every entry link to a client or task? By default entries can be freeform ("CPD webinar", "team meeting"). If you want every recorded minute attributable, you can make the client or task link on every entry mandatory.

Nothing is set in stone — both options can be changed later without affecting existing entries.

1Enable time tracking

Go to Settings → Time Tracking and switch on Enable Time Tracking. This adds the Time page to your main navigation, a Time tab to every client and task, a timer button in the top bar, and hourly rate fields on team members.

Then set your defaults on the same page:

  • Require a client or task link — when on, every time entry must be linked to a client or a task.
  • New entries default to billable — new time entries and timers start with Billable switched on. It can still be changed on each entry.
  • Automatic timers from task progress — starting a workflow step (or a task with no workflow) starts a timer on it, and completing it logs the time. Covered in its own section below.
  • Default hourly rate — the charge-out rate used for billable time when the team member doesn't have a rate of their own.
  • Billing line items — how billed time is grouped into invoice lines: one combined line per hourly rate, or one line per entry. You can override this each time you bill.
The Time Tracking settings page showing the enable toggle, require a client or task link, billable default, automatic timers from task progress, default hourly rate, and billing line items options

2Set hourly rates for your team

Still in Settings → Time Tracking, open the Team Members tab. Each team member can have their own charge-out rate — enter a rate next to a name and save it with the tick button.

When a billable entry is saved, Sodium resolves the rate in this order:

  1. A rate typed on the entry itself, if any.
  2. The team member's hourly rate.
  3. The practice's default hourly rate.

3Log your first entry

Open the Time page and click Log Time. An entry is made of one or more time blocks. For each block, either enter a start and end time and let Sodium work out the duration, or flick Specify manually and type hours and minutes directly. Click Add block to record split sessions — a morning stint and an afternoon stint on the same job stay together as one entry.

Then fill in the rest:

  • Description — what the time was spent on.
  • Team member — who did the work (defaults to you).
  • Client and Task — optional links. Choosing a client narrows the task list to that client's tasks.
  • Workflow step — if the chosen task has a workflow, you can pin the time to a specific step, so reports show the 45 minutes went on "Reconcile bank transactions", not just the task.
  • Billable and Hourly rate — whether the time can be billed, and at what rate. The rate field shows the resolved default, so you only type here to override it.

You can also log time from a client's or task's Time tab — the entry arrives pre-linked to that record.

4Work with the Time page

The Time page opens on your own time for the current week. Use the arrows to step back and forward, and the Day / Week / Month toggle to change the size of the step. On these ranges entries are grouped under day headings with a total against each day and a total for the whole period — this is the view to check your week against before you bill it.

Pick a longer range (This quarter, This year, Any time) and the page switches to a sortable, paged table instead — click a column heading to sort. Alongside the range, two dropdowns narrow what you see: billing state (billable, unbilled, billed, non-billable) and team member. Your range, filters and column layout are remembered for next time.

The Time page showing a week of entries grouped under day headings with a total on each day, the range and filter controls above, and the column cog at the top right of the table

Choose your columns. Click the cog in the top-right of the table to pick which columns appear, drag them into the order you want, rename a heading, hide columns on small screens, or run the table full width. By default a single Entry column carries the description with the client, task and step beneath it — if you'd rather have Client, Task and Description as separate columns, switch them on here. This is your own layout; it doesn't change anyone else's.

Fix a time without opening it. Click into the start, end or duration in the table and type over it — the duration accepts "1:30", "90" and "1h 30m". Press Enter or click away to save, or Esc to abandon the change. Editing the duration of a timed entry keeps the start where it is and moves the end.

Entries made of several blocks — anything from a timer you paused — show their block count instead, and billed entries are locked. Both open in the full dialog when you click the row, which is also where you go to change the client, task, description or rate.

Hover a row and a menu appears at the end of it: Continue as timer starts a fresh timer linked to the same work, Duplicate copies the entry to today, and Delete removes it.

5Use the timer

For work you're about to do (rather than time you're writing up afterwards), start a timer instead. Click Start Timer on the Time page, on a client's or task's Time tab, or in the focus panel while working a task — the timer starts already linked to whatever you started it from, down to the workflow step.

While a timer runs, a pulsing green pill shows in the top bar wherever you are in the app. Click it to open the timer: you can toggle Billable, pause and resume, discard, or finish. Each stretch of work between pauses is recorded as its own time block, so a lunch break never inflates the hours.

When you're done, click Stop & Log. The entry dialog opens pre-filled with the elapsed time, blocks, and links — check the description and save.

6Let timers run themselves

If your team already works through tasks and workflow steps in Sodium, you can stop starting timers by hand. Switch on Automatic timers from task progress and:

  • Setting a workflow step to In Progress starts a timer for you, linked to that task and step.
  • Completing (or skipping) the step stops the timer and logs the time as a normal entry.
  • Starting a different step while a timer is running logs the running timer first, then starts a fresh one — so moving between jobs never loses or double-counts time.
  • Tasks without a workflow behave the same way, driven by the task's own status.

Auto-logged entries are ordinary time entries — linked, editable, and billable like anything logged by hand. A timer with under a minute on the clock is quietly discarded rather than logged, so flicking through steps doesn't litter your Time page.

7Bill time to a client

When it's time to invoice, click Bill Time on the Time page. The client picker lists every client with unbilled billable time and how much they have waiting. Pick one and you'll see their unbilled entries with a preview of the invoice lines.

Choose how the lines are shaped with Line items:

  • Combined — one line per hourly rate, e.g. "9.5 hours at £120". Compact invoices.
  • One line per entry — each entry becomes its own line, using the entry's description. Full transparency for clients who want the detail.

Set the VAT rate, Billing date, and Accounting code (it defaults from your billing settings), then confirm. The entries become billing line items on the client's Billing tab and follow your normal client billing pipeline onto the next invoice.

Billed entries lock automatically — they can't be edited or deleted while billed. If you delete the billing line before it's invoiced, the entries unlock and return to the unbilled pool.

8Compare estimates with actual time

Estimates live on the work itself. Give each step of a workflow a time estimate and every task using that workflow gets its budget automatically — the sum of the steps that apply to that client. Tasks without a workflow take a Time Estimate directly; set it once on the recurring task and every task it creates inherits it.

Once your team has been logging time for a while, open the Service Time report to see estimated versus actual hours per service, and drill into any service for the per-client breakdown. This is where underpriced work shows up: if Bookkeeping is budgeted at two hours but one client consistently takes six, you have the recorded evidence for a repricing conversation.

Set what each person is expected to log

If you want to measure logged hours against a number you expected, set up working patterns: the hours due on each day of the week, saved under a name like Full time or Part time (Mon/Wed/Fri).

This is entirely optional. Skip it and the Team Time report still shows you what everyone logged — there's just nothing to compare it against.

Create your full-time week first. Sodium prefills 7.5 hours Monday to Friday, so for most practices it's a name and a save. The first pattern you create becomes the practice default automatically, and every team member is measured against it unless you say otherwise — which means you can stop here and the Team Time report already works.

Add further patterns only for the people who differ.

Check everyone is logging their hours

The Team Time report puts the whole team on one screen: hours logged over a period against the hours their working pattern expected, with the variance beside it. It answers the weekly question — is everyone hitting their hours? — without opening a single timesheet.

Reach for Last week as your date range. A completed Monday-to-Sunday week is what a weekly review actually wants, and it avoids reading anything into a period that hasn't finished. If you do check mid-week, expected hours are counted only up to today, so the numbers stay honest rather than showing everyone behind.

Two things are worth looking for. Someone at zero — they still get a row, and on a short period the day-by-day strip beside their name shows exactly which days are empty, which is how a few days off surfaces before anyone mentions it. And someone well over — steady overtime nobody asked about is as worth a conversation as the gaps.

Keep an eye on running timers

Admins get a third tab in the time tracking settings: Timers. It lists every timer currently running across the practice — who started it, what it's linked to, how long it's been going, and whether it's paused.

Spot a timer someone left running overnight? Pause it — that stops the clock without losing the time they genuinely worked. Discarding is also available, but that throws the accrued time away, so pausing is almost always the kinder fix.

Restrict someone to their own time

By default everyone with access to time tracking can see the whole practice's time. If that isn't right for a contractor, a junior, or an outsourced bookkeeper, switch on Own time only against their name on the Team Members tab. You can also set it on the person's record under Users and Teams.

With it on, that person:

  • Sees only their own entries on the Time page, on client Time tabs and on task Time tabs — the team member filter and column disappear.
  • Can only log and edit time for themselves; the team member field on the entry dialog is locked to them.
  • Can't bill time to clients — Bill Time is hidden.
  • Can't open the Service Time or Team Time reports, which report across the whole practice.

Everything else they can do is unchanged, and turning the switch back off restores the full view immediately. Their time is still visible to everyone else throughout — this restricts what they see, not what they contribute.

Tips for getting the most out of time tracking

  • Start timers from the work, not the Time page. Starting from a task's Time tab or the focus panel links the timer automatically — no filling in client and task afterwards.
  • Pause instead of discarding. Paused time keeps everything you've accrued; discarding destroys it. If you're interrupted, pause.
  • Link to workflow steps for granularity. Task-level time tells you a VAT return took three hours; step-level time tells you two of them went on chasing records.
  • Check the week before you bill it. Step the Time page back a week with the team member filter on Anyone — the daily totals make a missing afternoon or a duplicated entry obvious, and you can correct the times in the table without opening anything.
  • Match the line mode to the client. Combined lines keep invoices tidy for most clients; switch to one line per entry for clients who query every invoice.
  • Set estimates even if you're guessing. Rough estimates on your workflow steps and recurring tasks make the Service Time report useful from day one — you can refine the numbers as real data comes in.
  • Let automatic timers do the recording. If your team works through workflow steps anyway, switching on automatic timers captures the time as a by-product — no end-of-day write-ups.

Where to go next

Questions about tracking or billing time? Get in touch and we'll walk you through it.